import sqlite3
from pathlib import Path
from opentelemetry.sdk.trace.export import SpanExporter, SpanExportResult
class SQLiteSpanExporter(SpanExporter):
def __init__(self, db_path="sqlite/otel/traces.db"):
Path(db_path).parent.mkdir(parents=True, exist_ok=True)
self.conn = sqlite3.connect(db_path)
self.conn.execute("""
CREATE TABLE IF NOT EXISTS spans (
name TEXT,
start_time INTEGER,
end_time INTEGER,
input_tokens INTEGER,
output_tokens INTEGER,
cost REAL
)
""")
self.conn.commit()
def export(self, spans):
for span in spans:
attrs = dict(span.attributes or {})
self.conn.execute(
"INSERT INTO spans VALUES (?, ?, ?, ?, ?, ?)",
(
span.name,
span.start_time,
span.end_time,
attrs.get("input_tokens"),
attrs.get("output_tokens"),
attrs.get("cost"),
),
)
self.conn.commit()
return SpanExportResult.SUCCESS
def shutdown(self):
self.conn.close()
def force_flush(self):
return True