Spaces:
Running
Running
import sqlite3 | |
from constants import DATABASE_PATH | |
class MetricsStorage: | |
def __init__(self, db_path=DATABASE_PATH): | |
self.db_path = db_path | |
self.setup_database() | |
def setup_database(self): | |
"""Initialize the SQLite database and create tables if they don't exist""" | |
with sqlite3.connect(self.db_path) as conn: | |
cursor = conn.cursor() | |
cursor.execute( | |
""" | |
CREATE TABLE IF NOT EXISTS inference_metrics ( | |
id INTEGER PRIMARY KEY AUTOINCREMENT, | |
inference_time REAL, | |
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP | |
) | |
""" | |
) | |
conn.commit() | |
def add_metric(self, inference_time): | |
"""Add a new inference time measurement to the database""" | |
with sqlite3.connect(self.db_path) as conn: | |
cursor = conn.cursor() | |
cursor.execute( | |
"INSERT INTO inference_metrics (inference_time) VALUES (?)", | |
(inference_time,), | |
) | |
conn.commit() | |
def get_recent_metrics(self, limit=80): | |
"""Get the most recent metrics from the database""" | |
with sqlite3.connect(self.db_path) as conn: | |
cursor = conn.cursor() | |
cursor.execute( | |
"SELECT inference_time FROM inference_metrics ORDER BY timestamp DESC LIMIT ?", | |
(limit,), | |
) | |
results = cursor.fetchall() | |
return [r[0] for r in reversed(results)] | |
def get_total_inferences(self): | |
"""Get the total number of inferences recorded""" | |
with sqlite3.connect(self.db_path) as conn: | |
cursor = conn.cursor() | |
cursor.execute("SELECT COUNT(*) FROM inference_metrics") | |
return cursor.fetchone()[0] | |
def get_average_time(self, limit=80): | |
"""Get the average inference time from the most recent entries""" | |
with sqlite3.connect(self.db_path) as conn: | |
cursor = conn.cursor() | |
cursor.execute( | |
"SELECT AVG(inference_time) FROM (SELECT inference_time FROM inference_metrics ORDER BY timestamp DESC LIMIT ?)", | |
(limit,), | |
) | |
result = cursor.fetchone()[0] | |
return result if result is not None else 0 | |