feat: add Days Active card and total days lifetime span to dashboard overview
This commit is contained in:
@@ -123,6 +123,21 @@ func (s *Server) handleUsageSummary(c *gin.Context) {
|
|||||||
miscStats.AvgResponseTime = 0.0
|
miscStats.AvgResponseTime = 0.0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Lifetime days & start date
|
||||||
|
var lifetimeStats struct {
|
||||||
|
TotalDays int `db:"total_days"`
|
||||||
|
FirstDate string `db:"first_date"`
|
||||||
|
}
|
||||||
|
_ = s.database.Get(&lifetimeStats, `
|
||||||
|
SELECT
|
||||||
|
CAST(ROUND(COALESCE(julianday(substr(MAX(timestamp), 1, 19)) - julianday(substr(MIN(timestamp), 1, 19)), 1.0)) AS INTEGER) as total_days,
|
||||||
|
COALESCE(substr(MIN(timestamp), 1, 10), '') as first_date
|
||||||
|
FROM llm_requests
|
||||||
|
`)
|
||||||
|
if lifetimeStats.TotalDays < 1 {
|
||||||
|
lifetimeStats.TotalDays = 1
|
||||||
|
}
|
||||||
|
|
||||||
c.JSON(http.StatusOK, SuccessResponse(gin.H{
|
c.JSON(http.StatusOK, SuccessResponse(gin.H{
|
||||||
"total_requests": totalStats.TotalRequests,
|
"total_requests": totalStats.TotalRequests,
|
||||||
"total_tokens": totalStats.TotalTokens,
|
"total_tokens": totalStats.TotalTokens,
|
||||||
@@ -134,6 +149,8 @@ func (s *Server) handleUsageSummary(c *gin.Context) {
|
|||||||
"today_cost": todayStats.TodayCost,
|
"today_cost": todayStats.TodayCost,
|
||||||
"error_rate": miscStats.ErrorRate,
|
"error_rate": miscStats.ErrorRate,
|
||||||
"avg_response_time": miscStats.AvgResponseTime,
|
"avg_response_time": miscStats.AvgResponseTime,
|
||||||
|
"total_days": lifetimeStats.TotalDays,
|
||||||
|
"first_date": lifetimeStats.FirstDate,
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -59,7 +59,20 @@ class OverviewPage {
|
|||||||
<div class="stat-value">${window.api.formatNumber(this.stats.total_tokens)}</div>
|
<div class="stat-value">${window.api.formatNumber(this.stats.total_tokens)}</div>
|
||||||
<div class="stat-label">Total Tokens</div>
|
<div class="stat-label">Total Tokens</div>
|
||||||
<div class="stat-change">
|
<div class="stat-change">
|
||||||
Lifetime usage
|
Lifetime usage (${(this.stats.total_days || 1).toLocaleString()} days)
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="stat-card">
|
||||||
|
<div class="stat-icon warning">
|
||||||
|
<i class="fas fa-calendar-alt"></i>
|
||||||
|
</div>
|
||||||
|
<div class="stat-content">
|
||||||
|
<div class="stat-value">${(this.stats.total_days || 1).toLocaleString()} Days</div>
|
||||||
|
<div class="stat-label">Days Active</div>
|
||||||
|
<div class="stat-change">
|
||||||
|
Since ${this.stats.first_date || 'launch'}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user