diff --git a/src/services/stats_service.py b/src/services/stats_service.py index 757eaa9..d00baee 100644 --- a/src/services/stats_service.py +++ b/src/services/stats_service.py @@ -76,6 +76,26 @@ async def get_usage_stats(db: Session, days: int = 30): UsageLog.status == "success" ).scalar() or 0 + # Average audio duration + avg_duration = db.query(func.avg(UsageLog.duration_seconds)).filter( + UsageLog.created_at >= since, + UsageLog.status == "success", + UsageLog.duration_seconds.isnot(None) + ).scalar() or 0 + + # Processing factor (seconds processing time per minute of audio) + # Formula: (processing_time_ms / 1000) / duration_seconds * 60 + processing_factor = db.query( + func.avg( + (UsageLog.processing_time_ms / 1000.0) / UsageLog.duration_seconds * 60 + ) + ).filter( + UsageLog.created_at >= since, + UsageLog.status == "success", + UsageLog.duration_seconds.isnot(None), + UsageLog.duration_seconds > 0 + ).scalar() or 0 + # Daily stats for chart daily_stats = db.query( func.date(UsageLog.created_at).label("date"), @@ -96,6 +116,8 @@ async def get_usage_stats(db: Session, days: int = 30): "total_requests": total_requests, "success_rate": round(success_rate, 2), "avg_processing_time_ms": round(avg_time, 2), + "avg_duration_seconds": round(avg_duration, 2), + "processing_factor": round(processing_factor, 2), "daily_stats": [ {"date": str(stat.date), "count": stat.count, "avg_time": round(stat.avg_time or 0, 2)} for stat in daily_stats diff --git a/src/templates/dashboard.html b/src/templates/dashboard.html index 58c3659..abc1dd3 100644 --- a/src/templates/dashboard.html +++ b/src/templates/dashboard.html @@ -27,6 +27,14 @@
{{ "%.2f"|format(stats.avg_processing_time_ms / 1000) }}s
Ø Processing Time
+
+
{{ "%.2f"|format(stats.avg_duration_seconds) }}s
+
Ø Audio Duration
+
+
+
{{ stats.processing_factor }}s
+
Ø Processing/min
+
{{ model }}
Model
@@ -78,9 +86,10 @@ Time Endpoint - Duration + Audio Duration + Processing Time + Factor (s/min) Status - Processing @@ -95,12 +104,19 @@ - {% endif %} + {{ "%.2f"|format(log.processing_time_ms / 1000) }}s + + {% if log.duration_seconds and log.duration_seconds > 0 %} + {{ "%.2f"|format((log.processing_time_ms / 1000) / log.duration_seconds * 60) }}s + {% else %} + - + {% endif %} + {{ log.status }} - {{ "%.2f"|format(log.processing_time_ms / 1000) }}s {% endfor %}