|
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 |
|
|