From 0eee0616609b2c890ccc69f6a4ab3aba0b8a8630 Mon Sep 17 00:00:00 2001 From: Carlos Alexandro Becker Date: Mon, 26 Jan 2026 12:01:49 -0300 Subject: [PATCH] feat: crush stats (#1920) * wip: stats Signed-off-by: Carlos Alexandro Becker * wip Signed-off-by: Carlos Alexandro Becker * wip Signed-off-by: Carlos Alexandro Becker * fixup! wip Signed-off-by: Carlos Alexandro Becker * fix: css Signed-off-by: Carlos Alexandro Becker * fix: cleanup Signed-off-by: Carlos Alexandro Becker * wip Signed-off-by: Carlos Alexandro Becker * wip Signed-off-by: Carlos Alexandro Becker * logo Signed-off-by: Carlos Alexandro Becker * fix: cast Signed-off-by: Carlos Alexandro Becker * wip Signed-off-by: Carlos Alexandro Becker * wip Signed-off-by: Carlos Alexandro Becker * wip Signed-off-by: Carlos Alexandro Becker * wip Signed-off-by: Carlos Alexandro Becker * wip Signed-off-by: Carlos Alexandro Becker * wip Signed-off-by: Carlos Alexandro Becker * cleanup Signed-off-by: Carlos Alexandro Becker * improvements Signed-off-by: Carlos Alexandro Becker * provider donut Signed-off-by: Carlos Alexandro Becker * fix: improvements Signed-off-by: Carlos Alexandro Becker * wip Signed-off-by: Carlos Alexandro Becker * wip Signed-off-by: Carlos Alexandro Becker * wip Signed-off-by: Carlos Alexandro Becker * wip Signed-off-by: Carlos Alexandro Becker * jetbrains mono Signed-off-by: Carlos Alexandro Becker * fixes Signed-off-by: Carlos Alexandro Becker * fix: rm border Signed-off-by: Carlos Alexandro Becker * chore: update footer/header Signed-off-by: Carlos Alexandro Becker * fix: footer class Signed-off-by: Carlos Alexandro Becker * refactor: move stuff around Signed-off-by: Carlos Alexandro Becker * refactor: improving Signed-off-by: Carlos Alexandro Becker * fix: anims Signed-off-by: Carlos Alexandro Becker * fix: rename vars Signed-off-by: Carlos Alexandro Becker * chore: remove all card borders * chore: adjust easing * fix: fail if no sessions Signed-off-by: Carlos Alexandro Becker * fix: improvements Signed-off-by: Carlos Alexandro Becker * fix: generated by Signed-off-by: Carlos Alexandro Becker * fix: header hazy Signed-off-by: Carlos Alexandro Becker --------- Signed-off-by: Carlos Alexandro Becker Co-authored-by: Christian Rocha --- Taskfile.yaml | 5 + internal/cmd/root.go | 1 + internal/cmd/stats.go | 384 +++++++++++++++ internal/cmd/stats/AGENTS.md | 3 + internal/cmd/stats/footer.svg | 838 ++++++++++++++++++++++++++++++++ internal/cmd/stats/header.svg | 673 +++++++++++++++++++++++++ internal/cmd/stats/heartbit.svg | 43 ++ internal/cmd/stats/index.css | 275 +++++++++++ internal/cmd/stats/index.html | 136 ++++++ internal/cmd/stats/index.js | 356 ++++++++++++++ internal/db/db.go | 90 ++++ internal/db/querier.go | 9 + internal/db/sql/stats.sql | 93 ++++ internal/db/stats.sql.go | 367 ++++++++++++++ 14 files changed, 3273 insertions(+) create mode 100644 internal/cmd/stats.go create mode 100644 internal/cmd/stats/AGENTS.md create mode 100644 internal/cmd/stats/footer.svg create mode 100644 internal/cmd/stats/header.svg create mode 100644 internal/cmd/stats/heartbit.svg create mode 100644 internal/cmd/stats/index.css create mode 100644 internal/cmd/stats/index.html create mode 100644 internal/cmd/stats/index.js create mode 100644 internal/db/sql/stats.sql create mode 100644 internal/db/stats.sql.go diff --git a/Taskfile.yaml b/Taskfile.yaml index b626c2fdd767d4da40b192de9e454fb8f2050afd..9ffe8923d6bbd92caf441d872726de48352b2faa 100644 --- a/Taskfile.yaml +++ b/Taskfile.yaml @@ -66,6 +66,11 @@ tasks: cmds: - gofumpt -w . + fmt:html: + desc: Run prettier on HTML/CSS/JS files + cmds: + - prettier --write internal/cmd/stats/index.html internal/cmd/stats/index.css internal/cmd/stats/index.js + dev: desc: Run with profiling enabled env: diff --git a/internal/cmd/root.go b/internal/cmd/root.go index c08bd839dda7db5fa00cf46cc7a2dde61924d819..e7489777b5938b0edecba2b333643839974fede5 100644 --- a/internal/cmd/root.go +++ b/internal/cmd/root.go @@ -51,6 +51,7 @@ func init() { logsCmd, schemaCmd, loginCmd, + statsCmd, ) } diff --git a/internal/cmd/stats.go b/internal/cmd/stats.go new file mode 100644 index 0000000000000000000000000000000000000000..5dc971d1229350f35f93d5cf772239fa83e9206e --- /dev/null +++ b/internal/cmd/stats.go @@ -0,0 +1,384 @@ +package cmd + +import ( + "bytes" + "context" + "database/sql" + _ "embed" + "encoding/json" + "fmt" + "html/template" + "os" + "os/user" + "path/filepath" + "strings" + "time" + + "github.com/charmbracelet/crush/internal/config" + "github.com/charmbracelet/crush/internal/db" + "github.com/pkg/browser" + "github.com/spf13/cobra" +) + +//go:embed stats/index.html +var statsTemplate string + +//go:embed stats/index.css +var statsCSS string + +//go:embed stats/index.js +var statsJS string + +//go:embed stats/header.svg +var headerSVG string + +//go:embed stats/heartbit.svg +var heartbitSVG string + +//go:embed stats/footer.svg +var footerSVG string + +var statsCmd = &cobra.Command{ + Use: "stats", + Short: "Show usage statistics", + Long: "Generate and display usage statistics including token usage, costs, and activity patterns", + RunE: runStats, +} + +// Day names for day of week statistics. +var dayNames = []string{"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"} + +// Stats holds all the statistics data. +type Stats struct { + GeneratedAt time.Time `json:"generated_at"` + Total TotalStats `json:"total"` + UsageByDay []DailyUsage `json:"usage_by_day"` + UsageByModel []ModelUsage `json:"usage_by_model"` + UsageByHour []HourlyUsage `json:"usage_by_hour"` + UsageByDayOfWeek []DayOfWeekUsage `json:"usage_by_day_of_week"` + RecentActivity []DailyActivity `json:"recent_activity"` + AvgResponseTimeMs float64 `json:"avg_response_time_ms"` + ToolUsage []ToolUsage `json:"tool_usage"` + HourDayHeatmap []HourDayHeatmapPt `json:"hour_day_heatmap"` +} + +type TotalStats struct { + TotalSessions int64 `json:"total_sessions"` + TotalPromptTokens int64 `json:"total_prompt_tokens"` + TotalCompletionTokens int64 `json:"total_completion_tokens"` + TotalTokens int64 `json:"total_tokens"` + TotalCost float64 `json:"total_cost"` + TotalMessages int64 `json:"total_messages"` + AvgTokensPerSession float64 `json:"avg_tokens_per_session"` + AvgMessagesPerSession float64 `json:"avg_messages_per_session"` +} + +type DailyUsage struct { + Day string `json:"day"` + PromptTokens int64 `json:"prompt_tokens"` + CompletionTokens int64 `json:"completion_tokens"` + TotalTokens int64 `json:"total_tokens"` + Cost float64 `json:"cost"` + SessionCount int64 `json:"session_count"` +} + +type ModelUsage struct { + Model string `json:"model"` + Provider string `json:"provider"` + MessageCount int64 `json:"message_count"` +} + +type HourlyUsage struct { + Hour int `json:"hour"` + SessionCount int64 `json:"session_count"` +} + +type DayOfWeekUsage struct { + DayOfWeek int `json:"day_of_week"` + DayName string `json:"day_name"` + SessionCount int64 `json:"session_count"` + PromptTokens int64 `json:"prompt_tokens"` + CompletionTokens int64 `json:"completion_tokens"` +} + +type DailyActivity struct { + Day string `json:"day"` + SessionCount int64 `json:"session_count"` + TotalTokens int64 `json:"total_tokens"` + Cost float64 `json:"cost"` +} + +type ToolUsage struct { + ToolName string `json:"tool_name"` + CallCount int64 `json:"call_count"` +} + +type HourDayHeatmapPt struct { + DayOfWeek int `json:"day_of_week"` + Hour int `json:"hour"` + SessionCount int64 `json:"session_count"` +} + +func runStats(cmd *cobra.Command, _ []string) error { + dataDir, _ := cmd.Flags().GetString("data-dir") + ctx := cmd.Context() + + if dataDir == "" { + cfg, err := config.Init("", "", false) + if err != nil { + return fmt.Errorf("failed to initialize config: %w", err) + } + dataDir = cfg.Options.DataDirectory + } + + conn, err := db.Connect(ctx, dataDir) + if err != nil { + return fmt.Errorf("failed to connect to database: %w", err) + } + defer conn.Close() + + stats, err := gatherStats(ctx, conn) + if err != nil { + return fmt.Errorf("failed to gather stats: %w", err) + } + + if stats.Total.TotalSessions == 0 { + return fmt.Errorf("no data available: no sessions found in database") + } + + currentUser, err := user.Current() + if err != nil { + return fmt.Errorf("failed to get current user: %w", err) + } + username := currentUser.Username + project, err := os.Getwd() + if err != nil { + return fmt.Errorf("failed to get current directory: %w", err) + } + project = strings.Replace(project, currentUser.HomeDir, "~", 1) + + htmlPath := filepath.Join(dataDir, "stats/index.html") + if err := generateHTML(stats, project, username, htmlPath); err != nil { + return fmt.Errorf("failed to generate HTML: %w", err) + } + + fmt.Printf("Stats generated: %s\n", htmlPath) + + if err := browser.OpenFile(htmlPath); err != nil { + fmt.Printf("Could not open browser: %v\n", err) + fmt.Println("Please open the file manually.") + } + + return nil +} + +func gatherStats(ctx context.Context, conn *sql.DB) (*Stats, error) { + queries := db.New(conn) + + stats := &Stats{ + GeneratedAt: time.Now(), + } + + // Total stats. + total, err := queries.GetTotalStats(ctx) + if err != nil { + return nil, fmt.Errorf("get total stats: %w", err) + } + stats.Total = TotalStats{ + TotalSessions: total.TotalSessions, + TotalPromptTokens: toInt64(total.TotalPromptTokens), + TotalCompletionTokens: toInt64(total.TotalCompletionTokens), + TotalTokens: toInt64(total.TotalPromptTokens) + toInt64(total.TotalCompletionTokens), + TotalCost: toFloat64(total.TotalCost), + TotalMessages: toInt64(total.TotalMessages), + AvgTokensPerSession: toFloat64(total.AvgTokensPerSession), + AvgMessagesPerSession: toFloat64(total.AvgMessagesPerSession), + } + + // Usage by day. + dailyUsage, err := queries.GetUsageByDay(ctx) + if err != nil { + return nil, fmt.Errorf("get usage by day: %w", err) + } + for _, d := range dailyUsage { + prompt := nullFloat64ToInt64(d.PromptTokens) + completion := nullFloat64ToInt64(d.CompletionTokens) + stats.UsageByDay = append(stats.UsageByDay, DailyUsage{ + Day: fmt.Sprintf("%v", d.Day), + PromptTokens: prompt, + CompletionTokens: completion, + TotalTokens: prompt + completion, + Cost: d.Cost.Float64, + SessionCount: d.SessionCount, + }) + } + + // Usage by model. + modelUsage, err := queries.GetUsageByModel(ctx) + if err != nil { + return nil, fmt.Errorf("get usage by model: %w", err) + } + for _, m := range modelUsage { + stats.UsageByModel = append(stats.UsageByModel, ModelUsage{ + Model: m.Model, + Provider: m.Provider, + MessageCount: m.MessageCount, + }) + } + + // Usage by hour. + hourlyUsage, err := queries.GetUsageByHour(ctx) + if err != nil { + return nil, fmt.Errorf("get usage by hour: %w", err) + } + for _, h := range hourlyUsage { + stats.UsageByHour = append(stats.UsageByHour, HourlyUsage{ + Hour: int(h.Hour), + SessionCount: h.SessionCount, + }) + } + + // Usage by day of week. + dowUsage, err := queries.GetUsageByDayOfWeek(ctx) + if err != nil { + return nil, fmt.Errorf("get usage by day of week: %w", err) + } + for _, d := range dowUsage { + stats.UsageByDayOfWeek = append(stats.UsageByDayOfWeek, DayOfWeekUsage{ + DayOfWeek: int(d.DayOfWeek), + DayName: dayNames[int(d.DayOfWeek)], + SessionCount: d.SessionCount, + PromptTokens: nullFloat64ToInt64(d.PromptTokens), + CompletionTokens: nullFloat64ToInt64(d.CompletionTokens), + }) + } + + // Recent activity (last 30 days). + recent, err := queries.GetRecentActivity(ctx) + if err != nil { + return nil, fmt.Errorf("get recent activity: %w", err) + } + for _, r := range recent { + stats.RecentActivity = append(stats.RecentActivity, DailyActivity{ + Day: fmt.Sprintf("%v", r.Day), + SessionCount: r.SessionCount, + TotalTokens: nullFloat64ToInt64(r.TotalTokens), + Cost: r.Cost.Float64, + }) + } + + // Average response time. + avgResp, err := queries.GetAverageResponseTime(ctx) + if err != nil { + return nil, fmt.Errorf("get average response time: %w", err) + } + stats.AvgResponseTimeMs = toFloat64(avgResp) * 1000 + + // Tool usage. + toolUsage, err := queries.GetToolUsage(ctx) + if err != nil { + return nil, fmt.Errorf("get tool usage: %w", err) + } + for _, t := range toolUsage { + if name, ok := t.ToolName.(string); ok && name != "" { + stats.ToolUsage = append(stats.ToolUsage, ToolUsage{ + ToolName: name, + CallCount: t.CallCount, + }) + } + } + + // Hour/day heatmap. + heatmap, err := queries.GetHourDayHeatmap(ctx) + if err != nil { + return nil, fmt.Errorf("get hour day heatmap: %w", err) + } + for _, h := range heatmap { + stats.HourDayHeatmap = append(stats.HourDayHeatmap, HourDayHeatmapPt{ + DayOfWeek: int(h.DayOfWeek), + Hour: int(h.Hour), + SessionCount: h.SessionCount, + }) + } + + return stats, nil +} + +func toInt64(v any) int64 { + switch val := v.(type) { + case int64: + return val + case float64: + return int64(val) + case int: + return int64(val) + default: + return 0 + } +} + +func toFloat64(v any) float64 { + switch val := v.(type) { + case float64: + return val + case int64: + return float64(val) + case int: + return float64(val) + default: + return 0 + } +} + +func nullFloat64ToInt64(n sql.NullFloat64) int64 { + if n.Valid { + return int64(n.Float64) + } + return 0 +} + +func generateHTML(stats *Stats, projName, username, path string) error { + statsJSON, err := json.Marshal(stats) + if err != nil { + return err + } + + tmpl, err := template.New("stats").Parse(statsTemplate) + if err != nil { + return fmt.Errorf("parse template: %w", err) + } + + data := struct { + StatsJSON template.JS + CSS template.CSS + JS template.JS + Header template.HTML + Heartbit template.HTML + Footer template.HTML + GeneratedAt string + ProjectName string + Username string + }{ + StatsJSON: template.JS(statsJSON), + CSS: template.CSS(statsCSS), + JS: template.JS(statsJS), + Header: template.HTML(headerSVG), + Heartbit: template.HTML(heartbitSVG), + Footer: template.HTML(footerSVG), + GeneratedAt: stats.GeneratedAt.Format("2006-01-02"), + ProjectName: projName, + Username: username, + } + + var buf bytes.Buffer + if err := tmpl.Execute(&buf, data); err != nil { + return fmt.Errorf("execute template: %w", err) + } + + // Ensure parent directory exists. + if err := os.MkdirAll(filepath.Dir(path), 0o755); err != nil { + return fmt.Errorf("create directory: %w", err) + } + + return os.WriteFile(path, buf.Bytes(), 0o644) +} diff --git a/internal/cmd/stats/AGENTS.md b/internal/cmd/stats/AGENTS.md new file mode 100644 index 0000000000000000000000000000000000000000..b2b557e2d074fc7940a79cd0c07b3685753a8ab1 --- /dev/null +++ b/internal/cmd/stats/AGENTS.md @@ -0,0 +1,3 @@ +# General Guidelines + +- always format CSS, HTML, and JS files with `prettier` diff --git a/internal/cmd/stats/footer.svg b/internal/cmd/stats/footer.svg new file mode 100644 index 0000000000000000000000000000000000000000..06b4c85ac3e672e531981a1d7e01aaee58552233 --- /dev/null +++ b/internal/cmd/stats/footer.svg @@ -0,0 +1,838 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +KLUv/QBYlC0DOi4boTogRUTOAwAMAAwArAHAAMAALMA6vrpQuiak2EE606A//CAh0Acdrm3bBlrg +Xdd2Skn9A4kJGABwToA0XQkTCksKPgRDkQzJ0Dw/n3pzj+j4ob8UfVp+5md6k5tbLdHxK0FOoiM6 +muD4UdEM+z59yE/Q/DiYkh/5iR84/tH/zT//pSd7KX59i76T+6MiuD/Zyc5J9TRLMvzG74/bjx01 +yVH8nm815GJajqHnYSmCIRh+4Ac56EEV/cyPf/1TP0qCP/TkBv3nP+9PspM9/L2nJhl+Pi1VteTm +/kITJFFTNVOziyd4huM5lufm3n8oaG4UTdHzTNUUTdGNoqd5niZaoiVJjmG4QxREQY9+3zmqpig5 +bvEMzxD8vO8nP/l5mmiKjhtMSzT8vVS356kpgt/3URVVURXFU9yniIok+P0uirv8wi/0oeebDP0J +9q/+nXa0m730KD95ycvv46Afe+egF8Gvc7Lj2df9R3bPxZD8+Og7Gfb+/0d2Ugw7npE8JEkuerB7 +kfzE7oslunnv3fcfdrFEe9rVzn333v/Qi3400/79///b4yd/if70q59//fPfHz/yKz8z/dSPgx0E +R1MFNw8/MRzNtIte/GIpmuIpomIqqn6PIzmWaEiK5HjuD/2i2VEP7hEl0TL1IZmWKUii+0P/d/qT +n6mJmqZJmqIJmt/splqipVmSZVh+pS95mZInSH6Sk+l4jpscxREc/8jHVDxFUhRFUPxiF9UQDc2Q +DMUQDH/YQ7X8wI9+Z/iB6d/oN8MPqj4dvejTju5S5OH3fd9jOYK+q2S6RTL8OsnF/UOPfh1UP/V/ +23+pR0k/9u3RXZJjuNGTND85jlscQ1IcN6iCKYiCJ3iS4AiK6Yf6b5dfP705fv57n24TTDlahh// +XU1R89xmCX7fc3NzUy3VMi3T0xzFMgS/L3u6PVmO4yjuMiTDMRTDMPzCH/qwhzxMQRQ0wTIEQfAD +P7g9yEH1Sz/0Oz/zK7/xE7/wA7/v+1//+Kf+9KP//OYn//jFH37wf/9///lXfepRb/rSl570og89 +6Pfnv++ee+7Vjvazn93sZSf72MUe9q///rvvvfOu8pSf3OQlJznJRy7y8OOfe97//yo4Rc1Nmz3j +5NfxDAS9+Pv/RpGHZP86LpLf90WS/CNJei52PBNH8ZMdFHv4fZKLHd+0adp2xzRtGee9Zz4TO56J +YPfk5yPJwU/0X8czkgQ/773vXxc573gWht+HXwR9+L/Qix3P+D7Ys2nasm9LNjc7uU3TNE/zNFEz +NVNTNVWTn/zspz/9+c9/fud3guIpnuM5nuRZnuVpnuZ5nueJnumZnuqpnhzlaEe3Rz360Y9+6IeC +IiqiI0qiJFqiJWqiJnqiKIqiKZqiKqqiPO1pT33q05/+9AvTMBVTMR3TTaZkWqZlaqZmeqZoiqZp +mqZqqqZc7WpXverVr37qF6qhKqqjOqqkSqqlWqqmeqqniqqomqqpqqroaZbkGG4xBL/vOw+3mqKn +WZIjuEcxBL/vOwdVNVVR9VRNtVRJdVRFNVRB9VO/6tWuclVN0xRNz9RMy5RMx1RMwxRMv/Sn26c9 +5amKpiiKnqiJliiJjqiIhiiIfuhHPdpRjqpneqLneZpneZLneIpneILnd/7Tn/3kp2qmJmqepmnu +0iTN0Zvd5KZapiVanqVZliVZjqVYhiVYfuUvfdlLXqpkSqLkSZpkSZLkSIpkSILkR35ye7KTnFTH +dETHczTHciTHcRTHcATHb/yjH/vIR1VMRVQ8RVMsRVIcRVEMRVD8xC96sYtcVMM0RMMzNMMtsPmW +bE+WJmmWZkmOpmiOOwRBcIuhaIbmDk0xDM0QBL9vboEt2bxzzz8O8pCPnOQmP3nKVe7718E+drKb +/exp39x3/3nQi570pT896lXP///gD7/4yW/+86eff/77PvALP/Erv/NDP/VTPw9+8ANDUARJsARP +EAVTcPfQhz8EwzAkwzI8QzRUQy568RM/ERRDcRRJ0RRRMRX52Mc/fiM4hqM4jiM5muM5pqM6crKT +nvzkR4LkDsmxJE3yJFEyJVNSJXnZS1/+8iu/EizDUizHkizJsizN0izPEi3RMi3VUi252U1vfvOb +n/mZoLkF9sFWmT7j2V6EGStTtS8Whj+K7FHDrati5xU2s74dDrCTLVqZbXUyFRyL5Vd8trUb62Rz +q4LdVatmN6K6hdl3U8Mui5lZmH1bAS6GVsHta2YtAW6damV6blNuS2Znlvu+7FnPZT2XrZrdwJo5 +rl1VmsEbGuViFNkig2N3BVuyVqpmBWhZqjR749jzxrEna9Gx2czmtq7ZVFvTA3TaN+XWM7t50e4b +o14DdOT4bQXA6WuOVy2qyBZZO7OvupBdtlNkCxbsptjZkymyRZ1qE1CaTNUCwJ3jOtWCFDtewRY5 +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 +51l64rdL/f3se2aspnrGn/rbL9PeLC35sb8z3uTfaKOvqb899TfiePJv9PTf5e9+Kc3RJhHNq3uT +0xxt+Cyped9bJjVHm9L9blR1/KTmpe+mtpb81tyczb3zcvVTzfqp62PzNde0a87mbe7mqHOuye7n +vp3+OBnnvf95Onxv1+TeiNPen3YxKeKZWRtySu+/0rdD5jQzDsCn15Ru+PmovvGr7z9jykvDhJrS +OxVxLg3dNP/vdpPbmJdbPfW80ZH1ny2ZN9qwWrbrd9dppuuut2bk3NZP3Y2ev/JUT92u3LmauBN3 +918fo/N/d/L+Pu9txv/HT+Zdiee+6NbW6I02ep/Quw5PW/35LKV3aWr1Rhts7MTe1e2ImZp8p+bt +Xbyp7R79ny+563maWWui/X9icvdzTX6ffJHt0xLTb3My+fL59D4h5uEe2m40GWbuYWIyvDUMQLUb +sust45v/v3YydE+2++rZ6MmRvz3frnPN/NJtI45ta9f3sTc+urJnOnqataXWLm61XT1Ojppozr/Z +qdESa6P3pzMe7tue2u4mTWxVt022z0U7S0yqjTiemt34Zohp1d3sMLF24d5b31lnau6Ute2H2nbG +mVwPLb3WOSb729nuU55cf/iq62bL6bXRxg67mZc5sS17sm206c5025r6tvtyuxZTXy1mPnWb+Oq8 +zRhTbqONlvurbubl/z9rytLfdN4208NtxMnlTbpdmJx2G21SO/G29napuvJ7Xtpa7O1L3NuoU53c +vbqM/Ydm/Mm3UYiMQiTpoCBBA3o2acnzWXed0UwzcSa/T7vb6dmT2ibO5uV+M+PE2Z74yp3VEu/s +P3E22pimPm83+1215OfZvLdpx2aLnM5fX7PL58fv9v9vTH6dbN3X/x8x+Z32b2qq++Wf55m9p8vO +30t+5/a765781M72NpuTX6km7vGaIW8bbqNt+nNMtpf7jLdm/wm1bSs5EXU7IdYi26fZY+rs6n7P +68eE2Gnx+jF702Gp+rv1mfkmzS5F/WX9/19Lhtn1+ciNmvouGz2lV5ksG20609c5evalWesmTUuW +vQmzESfP0V3NLC9xdjVarh/j7rX3udmmRZzi87vrbORe09RPXX+omG1mmMzcxnfJS399t//fMqE2 +2mRy9HLn79M040uoXd4bnpAt2RJxStuys+49db0l2nQ/+uWrY1cXn3Zj13EzFiN6lAsby4+rsRAb +680REcexWi2R89CRC61PFRcvmdWbX5/KRa7/R7TZ2sdFxPEtR0e0acfS8satRcTZwu3txfLkZazV +On1NxsJkRJvKZExGxKnE8kZE1OlLfMoXldP/DNHuMTvPljVxLYcVG7kOi5EXfxEFoHKRF9HDaIPJ +i5oWEeexF8tTEW3qWrEU63aV2bkRPZ3EDf6pYRoaHh7i4eEhIhoaGv79/f35+fn5+a3f/f3f3Rki +jqGh4Rm+4T53sjeyX9oh7jce+uEhoiGia+edn/fp+fn5+eXfbV79Zj5vppkl5rUm5k82xzSuxTz9 +z180rjwu1Ctt49a9T3qshzi8x7XHy6V8nZivK6+auw5tuvYK0/ZeXmXllbY+eOjpbGWe4Sa/ljVh +7Rdi6aMNImddXdqhjV0t6um/syrmoae4GRU5U+/4LZnVHjXV/gw98wvTu7E/s7K7rzdb/7930yPO +p1dmfTPzWrq7ptevW95vtmF7amoh2hRbfvPq/5bes2on2mxhLZ7ep2dxltud4Tmjo7MjzvMjDn+l +Lv+jJTu24ydxGz1paLOld3yHOHzHtdel186Y7I5TV9ohTv/+Iw7nuyNObWd3vXXdH+I4nz8fryPO +amniQ5ys7uwsbbTJRnfU+Xw0n401t7nTNqppI44fv3qxZ9rSVa/etGhTvKlfqreZZ6a1eq75t19s +6etW/fSUq58TcTgLbxVveb8WEW3qj//KmX+Pkf/rVF2vMY3fC2391BON2VKZU1MX+m5al99ts/u/ +FZridV8jDqPy/q4jjta66/P6W2nvKtob4682pr2/IU419malaqvjf31u9zPu/+8nLD1k5v90iDhZ +7ovFluX+eOmreJb1x7mK1qmF6632ylnLiziVmfz/bkmrsjFpJdqxo9lWt7sm96t7HvP1eVr0sKWv +m1miZ4vVEHvN3zQdrRlNVesvaaU2576ZKeLU77a2d2s1vqJimmVtGudffsr9ddxMxFlLWb3Y3lis +ncqnija1p/mM6KpmV7i2V753uaZmV2+p3z0VNV25d7Wy2X3a1ZZq7j2q2SGOo5c/5l8nZ8K7vNxF +xMlKrzz111uzLPTaTq/m4z818/ps1bXtlF6K/ImciTjl7cXX6dxqSb3cvPF+rbowd78VMSnaeOo6 +TF0zNa3V0mzcvTdDHdds+9ukyCSkUjfZJit/22TltpasTo97Efs/EzNZvbrqtmL2c6PdpgohRTFR +jDKETHg89Ps34+3Uqmdml35mlonL+b+Gto6+9Wpnfdb//HjGi7h3znac62kffR370Pg207+mfdBR +p/mQBt3OxNnP/DQ66tTqTqhAGtDzbOzwnm/Tc7sf/vM9N+LsL/v/+3On5nZ/s9TcfIht//3slb51 +YsZPXEV3Te3MjThrvP9tnazcaNPazt7x+o1HGtDzpqp3ZrjVqobbj7h9uJ1pu9FGe7W7cjMp9iLO +c3OKqPN2cl7P5a7uiCMCg8vlckEoG0w+CECFQ4hCWVFhCYGysqFQNph8QGExYVHx4MGkUAJgEmID +WkFJAAAmKwckSLCCQgCT59mggehEg4TkG2SQoJyoZOisqGg4oEHGZqJILmgAAFhhMXmgoVGGNGhw +NL67E6x6o05IvdU5I95a2b+iDRp1pVaXoKyMgg+daCAKzzt6UL9zj92hjlHorO+z/ozMfOjxzk46 +HtKgeahz6OGOnd9zHctDG/jpbCjT8Oihp9LP9zYe3Y7nvT+P9/f8oSefQr9+3u8MEXXs+VNEHf37 +8z/D66ChGt/t4/b2YGo+36edPjTES8TEQ1TEB/ETHfF4FXkvz3XvMeVFnYeRbx9W7wdVV/X53TT0 +5f1NbX4ONaUu6mAuevxz9bL1uUzk2z5FxEWdvH1s123x720Tl1PbNjHv2eJt3qLOhjKkAT3t70++ +6uq7mu3Zoo79uvY3o+crurfbK+p8d6fltdZzdEWd64f5knsnq/Y2/1pfGz+7ytysqMN7y4nb+mus +qOOqqru8ijqqaqq3uJqqroo6nYqpqaqqmWqqp4o6v8j5HCqmZipqn/p7ni7q6vOmiHZs2qfeaJqn +epqmn29qp6jzr2/Ke4+met+e/u/puvqd9veJOubPtrdzY6sn6mDzt3miDitv8z58jZ2oc7zOzpur +zLmvfGy7vaynuLmJOqidr+qZq6yJOpppmaiXmRgz0zMzM1MzUSfRLS2TMRsTdfYOMzHx0jIv01Kv +91It/+/yLlHHLL8t3ZIfPy01/3H/N8t3Xvx8RJ3zp9v9HVEn29O1n83PEXWsn+XudX6OWx/Zl60R +dR7ex46REXVWfRF1VDcfRtRJfTZZWxF1GGlAz5OqiDqJaEMZinD7eLtXt7eIU227x4vFvIue4ly0 +Rc+iDZYvFu9W4haarnLSRZzVrebSWvTUuy7aXG7dlW/l1RVv7e2izhWv32Yd89gx/z8Xn7u5k225 +T5+Ny5Wx9m7rdvU23aZbt7VN3H/t/NP75o//v8+Dumz4iqbI7696x9z9jjaP/OxpmqX5l7iod7a8 +izh+6nh/aa9oebdY5227erdoU32Fm1qoublc54q6qb+IU8pbubi4W27p9hZxbG170aaybW3rXhGn +LvW1X/sVPcX8HVe0UYaqqZdUVe20vPn0FG20eBm1unl5eVtZq1W1eKOpqKijuVllu99X1PpnRNVt +11Qz08tS1DxbzfLUrEwt/21HdMxE/ScVbTi1C1MxtVpbMRG1UVERB7VPq/kUcVa7TPnbNlerTc00 +y7R+TRFHa/e0UE9RB3Xjn+nfm/vr6enpyYpo2frJqbao+vmenZna2Ynr2PyZnJzp/u23ZsnJ+Zg4 +czkXOTkTZ+pEnM7O9NSpfPm61vmNx8uezZ7XnJ552f53uvm5mmqYn4izrNion57p6dmZOjs5c5M3 +XTM3eXNz8znzYdbSTJiJWbmsjYZZjImJNpWYnZ+YmYlYmmhT3ZpZyZiZurzfnJeZmZWZmZnl71np +3VqZlapPfW0m6tQXpoYn0VPe3NHUTV6ur7Jta6ujNuo6rq/nVvumdcRL+4go1O7jFqblU056/Cxm +zk7yRt0hDejZNKIjOiIu5qMlZiUGlIColDCL94mcc8wUEQAAAACzEQgAgCgoDkkGgxKt8hQABU9a +MjYsKB4uOEBKFo5EagxjgAHGIMQMZNAIIEIAlwPUj3R21ON+OoolweHHyxEec6PUXuHG3tm8FdzV +26/Dtr2iBDx65sB//To0b06XgPsn6vi0awiJ9c1TGfpNu24gg8GTTWQ2surHzQ8iOkVMRQ8bqc3T +dz23gbqUKb8Do4CprHXpqUS1sxNMxk+nDv2Kx0qUZ3JtEyH5MJyirueANVPNJ8uECmYbTQH4bQxe +wOgDhxfHWveLy5GRmr44vxTfqiUCt5VJVHopJlXVsc6W01qnKlfFWVT8AR9BSMtzKKHWSj2dvVF1 +NKyz89JH4IYLL8nSLYH3pNK+RYY56JNiRDxOnixB8yrPM5QUi+gVnkRCtTo+PX9DETY9CZC0XUiC +kreIZASFtoCr4J32RGKBI9lLDZ63TipQQHzBpq3plEnAOG1XcQ9MIQERItkIgxJDQlR3d2B55Kb/ +t18APJYV9Xx/NwyPpMOxTRRNl9NGgqGbkSPTA9XZeL10N8qDqn3YynJmIh8KwNQ2LKpYNRqklgbG +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 + + + + \ No newline at end of file diff --git a/internal/cmd/stats/header.svg b/internal/cmd/stats/header.svg new file mode 100644 index 0000000000000000000000000000000000000000..b97ba95adea196efa0e62202d8755e91f09c1f76 --- /dev/null +++ b/internal/cmd/stats/header.svg @@ -0,0 +1,673 @@ + + + + + + + + + + + + + + + + + +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 +Kx6dLJ7lQADAwxrZ2AUZDAGPUSMZDYVcHJzJS0hDH05OBCtMXkImDgcwERYITFgQZhgVgnDZ2IYP +CY7GNosjouA0GxIczQRHRMFhAwmO5kM3CGy8DNCBEwgIaLHwgeBAxWYfQAaATUUIVcIW1aAxoaBg +gg74DJCPjpGOxAAHNnxjfVo6GQYYkJqO50LFwIA0lgMdCTBqYzFg41aD5WhWVTSuwXI0HioDHFCH +gKDBwMQDgWYoNCpcrJh0NiI0R2MLQE0icRiVkeEBA8bKp2UEITqcjWngeDi5Ec2C5Wg0Li9xHJkF +y9FsLBSQuE7EREfEgiSFAgWEFDvQHlAoggRHM0GlFMt8Ki5sJix2AwRFin08nFyB3o1B3Aa5mFHV +ZLeWJV7GvOslXcV1uSx55a7XRf313f5/y6Woalot7UrVP11+iiqdMptz/7Pkq3Nv6b0vvF2c+yth +uqme6q02ZV+WjGpnqia+tSip1MtQHx/N0lb/5f6Zda/9VNNfaqL9f0qn675t6pWnm9J6U25NXjRD +Xuup9+x76m4q7UrTb+XlzYzYy/6PudCU31e/NnbyYknC713O+bdtaKa4mvGXvaSLvRcy7jpONbXt +6q1L5urv1mfmtnoPFbN3U03R+pZUs9G8/11SW9u3eX23/3+3bJ8fv9v/v1f2Pmd2o+aZNa9V5jSz +06X63pn8/27LWVNdWS95GfsPzfjXp2eq6RzdFVniPbtH/2cJf/XmIi/3mxnj0sz03mb8/+bFm0pl +VYqSHJP97cwSF262rl36me0ux8RXXTezx9WYaspbxjf/VVKkiouHmJ7HfL2/NFkNsVd1qdTNvJzr +TknRri7EyJSkGJmalkmd3L1qq09JUR76/eNC31fVpefn7ojcaw9RSVFeZEqKFpdGhrrOUbU5982y +bTXm+qsr57Lj4z+1114ofbLd7+uvPUdrRtNT0/vyvFyr1//8qLzOHrOTbamUnIi6/cv2TVUvVyMj +IvZ6VVd+z+TFi/v5yG29bldiY+vE///Hha7ul8/Lk3N1auPuva2T9lcz/6/y6/83LlVltlTm/z9b +qWqKEBVdn///eTE/9qGhL05rRvb/z1+vvn1r6bxc1RTpv6W/rc/l/F9DM/tdjLd2lRR5Lyqn/5lZ +ty+a5tJVU/SLprxnZuzLsZ/1PM3MNhcfLq5jYzVFyssvQXQpSlLcO2fP5a/XmMb/v7yWlRS9HZ62 +7i2LcvWdz///fjGrKbJjM7O7xVFjq7r9/xsua6US2bVcRKpeIl4U6CIyJQCQyNRFZKoEowy4hC5K +LMqUmBkvIj737Rq6reFrW9r9m/cbbuaVYElEESXggOASutiUYJSCi8hUBinKYAShPlLkeNH3Vcig +oOQMKE4BWjCqTTYM4yF0kRgD0sTkTJajMQcGLhKFR1aj0WHdUkIgH8PAJIPBw0SENsDJRGREcFkF +gMvGUCrcicvGICxO44zEZWPTQgFxIbB4WsFsCH26tsfYdxq9Iut+StFZvjPfqWt3ah/q6oz+M/17 +1SNudYWi6woFfVkb1yPU9OxeS+N9XX1+5cvXNfYo23mzb3WyR4eojC95u+pE3fb43c6u2fa4Otuj +20Z3727njI79UKVI5qcmbWk61WV7E6sU5F30u8Rej6ikqNkVJ13EUynMKKH2qYmXPa/Z7tCzz/HM +WMqd2s9VitSHasqfOPm5k727J1NdaCpt3Lp9mNj8aXmnpOhZLZHzUMpTk9/f2ZkU2fZqO54ii9jS +7/QwGRmX/e66ERVbsuWNSkLpJm5Mx0tGlxwZlR3dVz7uY6PlP1r29qNk6XgmXTpmrna8k/oylz7m +Ix+mpT/qQkzFNDWUNlPXnV2qKVOzL/dSajVX/P5fTcQ8TM13R0dXU3SGuvx+MvRVc8zL49x/z4Xn +aoo23fzX1qV+Pm6n+nN2rpMW3dxcTSgZOn9/q0nS82/vPEc3X29vNZlLaf7dk3lndzd/7z2/tMg9 +ebeSzHl3W00t7dLex5UtOfdqa6tJSs7OVhNvb3Y23+LtXanXbWNjq2kZsSdN0+u9/tyUlmZfW6sp +09faWk0oSYn/vPxw+/oZn9V0uPjOnU9i58narHub1bT+JV763PyS+zKryaX093NpV7evXF6+dmVl +NbXEjHqqvHrrl5Wky3hPzTh/dS8ZWU3ryos8qaYerz8+VGlXJ688PlbTpRsbqylZkZXEyGh8xvZL +UdJlyL+/Xu/+fdV0rH99jM7Gb9zsybreq6U0/t5G4/7s7VWTdI/LmXlX9bLt19mR13Edq+8y591d +NUnat6+rpl3ZksSrquqrWcqV/Lm3kKXexVw1nS5e6dft2qfj9rJVRlxclXaZ8u2tmlJKQ1/+d1+a +e7n6qXfL36dpqybddcbMx11b28ZN3P/lr7cQV3v16ePzHd66t3Mvu2V0dVXT2lpbzfWvSuJltpv5 +l2iWv7i1VU3Sr1ue+n/qO3r2pRniutb3d9y1rPyrfVHSla593OZodr5+dVVNLvXqXrrpC1fVxHn2 +/n+7uH1ZY6vearWWAirDQwEGg8EokMqJBgGwWGiJQCEWlxZQSCUCqZxoALmcRKAAnLSoqBAIw4WT +0IOJiRCIACeSRAANLCglHg4JJRoRPiBEKAkgUQYiYhUMVB+MkpLnuCgBfVgqTCGWlAccFx2IqASj +BnAh5HLCAAMjMpWCgYIR4cTEd7eaQCKciKw1sshUMKKL1KKbiCyyzJ76YCgp0d1WkTW19cwN+3X3 +7vR3EeU09dt582+X71r/zvvdf3PVUy3fc08N2dscex23195dd+6itWZH39O9U5Le3S69+2V77kNB +VdTttLw+1HtGt9d2S7S+TsSPqIffq37XZ5pL7/gznW0Vj+8u9Y8XdfrEe5WipFuTzpTtOqfcdo3K +3srHx4qNypLquJ3hqmnfYX6ee+++qZ3dvd1+mtrperu3Uyj5vJnmdm7niriKbhclKx6yuW/qdSd1 +V7/l/ea33aFs2yE6nq0fCttp9BNbqhQl2Un3vMp/pme3/K7r/t2u7XbXjnYKpdEu7/A+faWd2pna +qdq56nxy2qWdQkE7tPsO9tnZ2fHZ9akUhcL7zG+9b/74/NHbav4h3+prNEPudl7d/J7R+r5C8WTP +qO8Mz/X/U9cu7quJc//79xKR+68/DTNN3f+Xjz/i9z40zOVETv3N04+S3dTQc/H87/ws1VPfcz33 +99k2+ZX0+amYtvtn/W67n2v/f2rsvG37+8YS/vu+6nxGp6amUeorlP3I2TZ9NdEU+X2f+RXKO/Z7 +v0KJ9H5N8XPRuO9N/aPv20M/M32VPPtVh/P7OXtXv5qid85+VClKsvd3bT5DSXUiXzvtP819j16Z +f/3MLLJlrzqRrjvfm0ae9lFmqnKnPeO618gx/z5aVUXzs9M+w2c/U3xXz/b2/c0/w1eS6kTHyfib +n7fwI/9L01S0f71DRWM+Q/3z01zs/0de9/cK5T7it77jW2Zv9gol2jRzZ1N7je45vS357KcoTbef +9/1UipLO1n3xjLM3c/HWNtU5dc3Z9iw99U5fdS9VJ8r8/OXLftRlw/TXla5Qole93r5UX21fjw49 +D/tyG3v/X6FE3ajRXzc+H2qEm5h+rDq2/ajcp3ppmdl4C9WNW/tM1aPrTO/jjC+oRDDq9qmmpA4p +NDMzAQAAwxIIMGgsOhHLZBIpenYUgAhRWCY2MiocKiBGJojIwxGJJAYxDEOBHAhy2ByBNiAAyAL/ +Phu9rc3Lusm4Txe/VMlu0perH2P1FGh6m5Kx9wHdkUWQ9sjq6LUDUFeXKuy+LETaWen4en/9wXBB +K59m+HQl7cJh+nx60VdnT9cuQqQTeKinyHRuppVRmIDt2O10duqSS+ahiy0IoMrgivKOFdEeHUYx +Jv4aj1ElsS3a0exao3jSPcbiqsWGXWLOAjWCQJA2a9eMi4l2xpsDJR6DQANgngfTUAortk8ZaT/0 +WtuO9aMBFjBpK9uIHhJggOiuWfQ7m4SPEzp6vAqJEyrWQ76dKE2XRS1gGvJf7D3RyzCg8Ios38Jb +4B3vYII49IAVUmCc0lYKc3NIEUXI8ChNfVZwlnL03Gom7OjJC+hEeK3qQ8a/vkFD+X/aQ/E4aSOl +mINMVXyPhiuU1oFY0ZqUWP7IPBcFVdPumhpw7mDDXFkhGwQ1nZjMi+8g5nZrBZRnP3VFKklKPjcQ +jvNmPABhzV9msb+/yQQpwIfCPvOMpzLz+b+FmHlMfwRrcrEDxKf0ecjj5G+/rsivbm2Zotr2MqH/ +bZ1+idEcL274JFl1TKCkM/HNWEOlKT5txM11EVu5UousXZ4HLoJhQKIiAWUkA6MbkM3BMClG0Sz3 +G9BtNr3Og4OwMvOr53Ege3IuTXGpBzG5DugQTRDioFyM1JUR2qLOxDlFjJ6nh5anoeYPrAEJDd8E +rMyf+Oz3Hpo5+P0I/E5XTz3KANqzTOziaT0K/BskLA8KcxAgEQTwqXyFxl1jyTpQEN8oPrM4KJAE +MTfoXlg4Hn/ExaBGia+ThLneqlqWQ5hwc/koDw0aytr4Cphm3mS93nNIc91bi9jKV1mr53i8c+br +pWOLeUoijU6l4lwuGT04uRnQOxcik6X+isOWmKn4R6/X1Oey4hE2sovabqUg/eChUj2dOR3BDklQ +zDKbTpDTzuzYeziiV8wFYBcUZ7fhSE82vI5mcnanw0hjYKe1tWFHbmneT1BuJB15Wm50XKbbA3Dt +dAPap/lYnINDEKgIa7xRQvkLHQU2sIXDejmo2v94hok4VuA+Tr7r9TRBu8alcIEWtTgMsjQMSeHp +NUAWv7aZWw6juBod508E9ZQStq9k8Chg3KFFLQClQtDAyxMeoynAQE2dQRqKcVPbGDF+FNM5wDTC +Nruarpp49eTTZVAc5SwZy9jisWYdqFOgXu5bbtblJWk0pxROPYCGzzbpoXld0iFoX9AYktaxYV0S +O+gn230jTR3RWIEYXsHtNcePRgb5OU1f7nGxkFMBs91TbTqiI5ERs6FwkfpisB/2CZA235B1cfd/ +p8vwP1zt5nUGZCWWeBCa88N26auJ6ZeimSZmZyiauic7LJSVDCZnB10m/lP1mIaU70kKjF/fRufK +urau9iNlrY2zieVIWRyG6o2wgDk8zEq3vvq10pJSmeSLacRJjQ84mkI1tMBVtGqLGlQeyl3yQQrF +qRPI6oxb6CUJkCG6KEbQK29PdRJz55CXIzQ4iDBNT0oiI+ltQCHdLuGzZyCGdRO83cEWVM3kyjw7 +hQ/PRaT4KCEHup2ID8qfFq05pnes94TMSLgJLVht9zo8dz3qfJWuSXkey7Wg2WynrHXpLwbkgq2m +dtvt8eYKtQ9MLxRFvDLKHddThfIC6apyngQu8fEoJhMSWZzvV/tp/ECeXJoPqxsms4U5ZMdHJrGD +/cnzhPT4LO34OgqmKVZCqiT/Cp6DhC02+z54F81ucIj1qshl2XdqWrUFTMM/8H4MAp9/cXJiRmaN +ZvD4oMfYyEysV9fi4zqfu0fiDZAOdizx8OxhLBfoYfXnEuh+wvn+ZeqsOEP8LCF5dRkZgcqyeZMo +n/Owhwiwp9hZSf2iFxn4kw69ECuG4K2KsZDvbNipaz/JnU6URefnff4XqQZKUAKp0+p2XVqoqrU2 +kAdswqHgbfRr41iDjGUpcf1C8diCyTJgC3og0fQRB9THVyXRGDcPhHnjdHfCtPgZaBj1MmCsJVE0 +Xo9bRWbKKEs2BchVxXIULSioaKgYo2mtNprX/+a25qjxnLKMb0EIDpN0dT3GbN8eLvxGQaR3Lomd +UAIBOQIj7EsY2R00eXdUPG+dhGW0O8d3OEeqmtD5bx7eBmi7JIl1fPKfUVoRVgdjV9KA31jHM/Wm +nfMz3AxnXayMK3lYZwlJq5xBIekTReCLrwrVykyamqp2YMRWNgFGURk8Bt1FI4+xQBaC1rV0A56r +jaQQei8WEQ8RlUaZg0hsUuaklyrbNLaeD0kzesOnOpohZOg7rRS2z7XbwcgCeASFRAxOGtx/Lbb4 +uQx+HkThd0wcyAqtBqZ/5YB57tSwXQwMH+hyJbQEyA6pNkikNBHD2jeP7LyQEq6uZTT2GrpURxRq +TfQHW5tCc7K4nHPX3fvp9EvrgUBic2ih691QXjKaafLAVD/2PhJfgGmllRCiUbYGhKUScukS4VAm +i3yDTktl3Osw4K4BA6cKFzQI4iW3XNRHZZN0KtWdwyDKsZ5PKKXKEBWk3A82Wh3G8qfXp95rmd4c +fFkGzJY358LkohjKkEPzfqAk2lslqEsqsLApCXcniH4ijUDU1WxlUL9STU9ICapskuyl6f7KxIU9 +TDXSIDnbCYzLJAD/vzO7ixKYRgZPAPz8Z46m+mZVji4uvlPdQP2WLsYHTP8S3ELHgn9Hcq1LuJD2 +T69D+O4c2Pkl/N7GOr1h+6LtY0mxg5Dk/x0i1CqXqo4HtLqUYk6jDNDQsrZu+s9j0dJBMjQ2UFFK +fD5iWbOHSLZyf8csDq/NvGUURD2SfyQEAMoSEgKbV7PCkEIVkiQ7xuxLYuPqgN12pyLdJEy+b+kC +k1FSDXhIwco+Rr2wpWoLttboG+xhS86ssUEXPY5H05pM2W7DP/grPHSlwjxoNAL3JBvX+1Ky5HsT +/sK7REnR9BBbc1HgpDqchM9DuPwL1pRfGRgjYsegit0QxoYC0aZ+KKLo4PcmMkwtVOUn1YGIuiaM +C1fykVxKOqKqmpuFIoRYosQ7lqbHQi5pGtbNtGMTDfMKZKIYUaSAoYcM9TS7Kvon7qqkR/XHsE7E +fefPGtIg27iS0dbyTxJafGkqEJZHqG8vdeTvPXj0IEW1c8hcoRLnFZN46NCfIiLSMImfAQehx7yz +Y1caWbetnekYEw7BodfmqfrN5cH2M3XhDfn07Mk1IIg2NMLh8ronuPzzImk8WKDRWYx8fW6Ojbg2 +4UCTN2HIMlmhwMEt1eY5VecSzYG6LCRQCoSShnjdfBoP8gPr9YEkiDi+MaApYVe1tygISVlvZ/Lk +EZyUqlAZZObegOGhnprNaj/oEv9zX1+blt596AAb8kKMj1iCTGg1pl2ufS3eD3iJaDsgSPYCi3hu +yKRP4XLZwQg/+Xgb0YE+/8BHC3QJ6dfpYBFJI6PFMANdk5qYlvCZX+s4EVhnZAuLBf+I7W1DoYqt +luBPQHwevWCYFVuVBVeolZMei2/T9hk3fbN/YsqBiwZGuA/M6e981yOFRh+4dn//IrQs1CQK0Zuv +YuxjXBLJAMt7lCh5mwBZCK+Ic0C9FhAFtcYIwyHKqgC5Kdr5VbYXfJX5IcVZnj4yhS3fBCAhmiwu +OGQGSBR1GCk3iK8ll+yIGJL9yy4oHh5CVUxQk0KkMTFfF5xUeArIccxNDzIpw8j9tFdYiAnnWHqs +QZJj0k1nptY8Q29W4DllDklEOU+2E00yZGhs37/rRsmT/CAKQqpS4KWSm8ZgC9vAIaMy5gVnT4OP +faFaHcWclBirF8r8CZIWCpfdmkOcL/FMaf2jr16oX6JQDyYor4KlgWGWhMXloZiyLE+uqHmdnh1h +D62IiwHoIfyZBHbIBtJOi+k+n0CHk1uj4qdlTsJFuBSy9eiXCn4oj+rUREmlrOoEoy4eaPN8BTjn +UkQRp6qChCi/w1r6mMRhz9U+A1L6PkuQmxdHYX4VVXdz4bebcJz5lYUvVzLwGRp4O4kq5achi6Vf +vgNEC5fSj8SJyGMSY9PKsbOvipWdMEmL9cmPSOpZK9GiRUT7OYg+pBySUo/3rkTmkEZ3tcxOnlAF +TMZwiw+MnKrQw7acqWA8qTx8v20U71PUI+4sCoYGXrk9Bq+iwzPVAzpP56c7/LQX5RgSnt7yOQFL +njZCGiQVwkPuDiNaBlhBIGKVW9X6yRRegkMWuf361ZM/sHUuk8i5jKc8RdCx4lT8fTG3SnKkPfTy +r17LZyjO+7QVwgDXJMOhEy59m+q0QrlTGV28Dnru1EODjg5NekIXQ/KaiEDI/zfsRu9ttNP0N5Ec +qXh+oKH/yi/CA5HBN6EnyGzt5/Tdql/Q4T2SMvRJ/j9UqANQMmbvzYnqcZUq8LKKR/a4UHCEt5Qh +yxg6tntREaUZo2JUwsBfiYa4Fh1WcqpRoA/W7qkjDYMA56AjQQy47q2z5xgV+gKVtRDaj2pF31j1 +l+hFIRRvOdaWalJl0NHj1o7hjSdkP2nypRwOo8aeK80lgMT5gPDENGJmigkpJ3pYL3iwQcqO1+j+ +xI0/6/8AQHzbfg+aITyhXCkeywM9j/YEBUdQmWwbPsoW8hGd/2kiOiwOMdJYMBhJ810QUmU0E7IH +KrB8UNcd9v/tTyQh9rL2fOwQr65C4hIZoQDxTWSJoSHEjSgcFYhLZPbQp4wNK1GWaAeEKGSD4Cud +otL4O11wNTJHMDS2MdHHkkqAZI2s6NfCJNxDqNBYus0/QHgnJMYpP7pXunDBQO3135umBWpWkEze +F64CYt3RMjn3KaV4O0yQmovZsPQvdeiFJXmX4DFCuWIrpo+KTTMV++8XnJyN2TAYLcll5pphj/Gi +T1AqKWpvZAmh/QM/kt6SpJGARPaUwkvSi8ZZFzI4aVCCJzmzF47CtLdsCYskaXMSRefwJeu0QwDq +6s7wy5OLCsS7B0PEYfoURAL4XMVknhg182GhJMohSYCgE1dRWWZGbgWdsx5oLCBZ9Ep53oft7DlE +cg5WucX1N0sEYcIQHLAr8h8UjHvC2q5raYEKOBPV0V3H1zAQDCCpD6b70Lx9EYJ+pxkkieyT1Jtg +ByOQAaQMur2IKDJM3IYh+wtrc1z2zRYINReGMy3HoUlGSnXbK9apoiK7EpBR5Un1OIkfVGhKirGg +hypC5hiW0P9BaDTKmitoqKCqTBo5G08fmBHveah6PqA8v2tbuSrIzXQrnT5+MiHr1EdHm4zCkino +mTyKphR+piSmBM1sg67YL0ugDCExwr9SyM8LQ5hufLOT2N41fQYCFFUtztExpXJjsKAmiboYY0+y ++mFOfy3NGhXDoatKB0eOPhyvJ5HVQFAlvq4QVCcMPEKmh0oNI4B+2FVFNGfmAOcOpk8MiiHwypwE +7zT1pJZOmECqzU96SjGcX16Egt+q6kvuk85HxxSOFBATSG1Dl4AFWGZidlcTtkBvWoTqJJ+sfUcz +FzCVpi6WN4sbUZOCAKJ8MO8dZAh3obLrZFAagn6dK4i6pFWcFJtbBij4JtARWqJQmfesqEd3xvjK +mtSwlukX+FJPoQIcLEkbHhuFxG7EyG8bbqUp8U5OzCXDR86Sc1C+/snJwrc4jmXDX1/Bdlih5H6w +ibOLdCg0q1pZ08KCl6SBzsysorg/ORFIDhJbr0LfEP0kcm6KliKcaAVqN2luViobcj+BngzXyuQS +00CGfjd+obZmxiMN75qiWdCgEoellZWbieGktUpPAQzism5uh+BhA30yv3Z1aV4YAt538L0+E9Vs +zp3ke2QEM4GvInUaMy8jp6zJV/RiSvTC207DWoWkIaKFAj/EY5EPillB8d4/S6V+VoXrsko09EBC +rsMHVCGxIJRQg74hN3vqx6aSTEzMV6R2uc1Ry0K6VZUq/dZnNLFuJKA35HYlL60SioeDwszokPpE +IJMqyS6IZsi8cSgo9aj17p15S2BRpqiuc9epz6in9/48FI4mi2QnSiP130Bol016KgsN1Bc4ppkX +98MIl8FMxkoSlK+lrH+qEy+aXKXi11QBvqZSoVpCf8CCCyMWy6ypXF4yZ63q6NcqCrwLO3r26QwF +KoO+kjV04uQQwIyKQJhsbQeU0qvPWFv4hMfhzUj7OQrcY8Ui12RaoK/0zEp9Ijb8LhKR/ds4/R8I +oiarFFMZY0GklelSqqkm6TGB9Ej1qgr5AyJdp7rWqEaZ8FUXo2LcUvl4kRPibKo95S8R4vD7UprU +MzhniUqUDKmk5TQ9HTGcR1fCRA1POOwEZFQa9IgSU0FO0fSo6wTthy3BXQQhk4ZcZYfxQ7kcDjlB +LIIfol8pakn9hHORMgNCEnayEOpe0OFPSE1r+aQEO/2XfLw9+4+ixFFV0LqJvR6opFGNWf0lEqlc +VzHmcerRUSXKzTngVLYiZUU3VzDY8y8lVXFdN59g2XZOi6mEpqIJyxVVxgu8Q8t0z+PRmZx/UDcB +uBsJqIr6YIW7NhK2reYFir5dpzw86BHOoXG+JJGRUUeC0zfwXRFJAcPLugV6wPIeExpYJYMC+cVl +aKsynxUkNuVH9gRBs0+oSGeA6MqAewNOmX1wrBwLzMCRo3S/Eask2lRUizlB0TCb0g3LEPUTiJGs +z24Bb5tqhgq9Z1OiJUtYxwtvt9CCY0cP5xaKQ3rajSXTFDGvRs9rhBcUoldaYJcVdAFyFDcOdqzy +DMS66E405xmyYCfeYg3CcTIzKlQQUAl7PIQDK1OehsuJ/Cq41OVTOIJxl6sEKugRc0nLKHaXlIS8 +ekYJzXRDRIsoS6W83BsBlQplkRjedzzsRE4+uLTnIoRXiF9oKuIG7ecnLXhl8jnMskXKzRgf1Qr9 +OqdXLcuX9Mjtw+rYJQKRlHXayFXjtDkWg8oSBNOTpGIZwr9fmph/RWNx9UqYhK+egvW69RJr2xcp +BYemETV1t5MPd/Enku77tG+oGNQmxVy1NqpvafH/QkYO5QCkEytEeSyElo4YEq16IY3yYmXDaEZp +cAyhrHfIUZ2GwyAAsH1zuEu/8qpAJEJROUVZggNgI1lQQUN71c/ccrAugGbeoDr2cqt+0cWhbyya +EjwY2R6rOyWKhMo1cZR8NUEush7QVT7l4GCg4sVUlkkkl4XYUlT9qxt58yEiy7iIxY0/pA57RHZU +OF7iAiAAQySO67P0U5unZjEU4Y6aTXtYRaYosT4WAMM9NFJY7gDAQQS6ykNzMXD6U/FT+txQdH+D ++M8Qz8TVVF4Wq3BqJ21CQDd+MNTrJwfL4ZTiKGG4s+OIJad25PJQCos5AqzAVXu2or8hKZH+yPSv +R/K3GgZlF9hGNf/AUkzHx7LKEEdifYbyVonlzgaBwn4VJLNxrCsY9REHWh1cGQNebjTfnwMLEf2R +XoNmhj8wf/JmhaArWdHPX2wATY+verv2j4l+8Lm4hfLKWF68BCa66/2h0TSjM6sMccElaOicb6Cr +MRlXbQ5Dp/QwuvYQWN7oMiKXXVanXwBZ2GWVxr81lZWorO1yRUyt6WQmGP+yWl+7MG+z9/Qxc5vP +2z+bmfua/oZ/QnUhm/BbMIrUzG9WnK4ntzfSFmOPeF497RoX5ixiP3KCbkgfhCPLLl9/kuepNvTz +YGDDnj/ofIFRQDj5wK5x9sbFzmQnh0YSPlBbabD345Vgdc3+YwC3ks7/iOjLPh3GgkpK3wc3FWNr +NRr1w/KTNeMBAEXNELwyFu2A35M9VdQWIuQxsCsJGxFXQDbwEVFc0gJeSO0AR2gRAILOJDtCB0FN +VxgchhesYPEM2tVgKQJbXpVt/omgVmu4Bn5uKEHzlNGXaUh748Rm0kItthLQtuKBg5sAim8lNJVt +YI/pb6CY2uZw/IxoxroLtisoOxHr8ZVLhZvYRCHHUg6wiAQr/Nq+IvK+Z/6tSbOL7hX8B+g8+za3 +jf2GWeV41bnltneBMmfiR5DsB3YZCEq8F4jsG1BVAlwOBgz/DnAq9pYNtPapN55tkvRT+wwNf+// +marNrsPEnK2rxi4NVDknsCvqsgmKeNm/8rqu8l/5vB+nnArRNrpPHNRXHi5ygpf6JDziEHT1z0tq +ODv0qdyXjOwwjTP6ZY6bsaUOkev/P53o8h+oVO0ZiLFhokh05Bk4ffzJJz8u+ev4M1Kp7DoDhcu9 +GXUprCaH3YCe/1qbnEzc9v4LvrGh+pvGxu+RXXUzQWfTtIR5f/XhdsxM0vUij5oaM1Nn1pRTkkH1 +TczUI15eIW7JlHDR6FOjznTTBCUaLm16eoYf7Xt5MyFoUW8yH5B8tlheGRL3dVXeDCpxZtXZBYoE +WYw797TKhRRF+ttKJRc38MsthToENPEHVx3wQoWMLrUewxWTei4W2SGCScUpZ1sPsUkLqm6Mj0RM +t3/v44AeBTcQMcuJmXNdMmcu5Z7A2K/Z7sDlo02IzgLb7TsgqA5MWWygANwFRNQFO4d61wZz18Ff +8+pmDDp4jAIwhRjCBIIrd8P6Z5f7JnvztTbQv9UjWjjdYRG6k8qb5qu+elkUkvbeodk8PKURtENK +O8ClSJmTval69evBXL840k2l1qEdsAx790Wv9SpDTj/SzVxUvOiX0WJtX2tSRR4wSTl6TxsA0/Pv +NdG9bcR6G9fEgLYE/XihcjJlAyK1rwZdWu5RIOFi+fOJaQ9LZU42jTBQB06Js4vdR2FnBWoc8KfL +ZqNAz5tlTU8ue94yxOxnmdGzy5wLOQqmWcaxcVlHf703y5IeXDYOLlSaZfb9YjcjD6pJX/DxBGCU +oFiTsNbw8dbUPGLPQ14WeMkhX7ewb4p8nARIyKs28cyXN7kepwSEvOqUPQ9vMm6cbDzk/dZIVx1v +KkKcbBzydlwktjfJRJyKQcjLx5ucEaccQ17Fc6820tc5FPe6v0xinEmqhrxKuuSiD/eYbElOl4Qy +5NXqJOh2uSXrXcp/yKtE24BTcUugdSl+h7wpSylHP17u94W8KpBjg9yStS7lL+RVIlrdH6+CuZjo +3nSX9Ap5F8lYoAb1ZD0/3kTzzWI//T/26xeKW38ekrA6Lg5WNJUE5qXuXLyIYBi3d8WuTuiR6gcz +8JGCLeVBCla0mLnC02y4HJOnxia6lj3532dZuSab1kLwVaJhNp4XJRLa3Y5KSeUpwbR1sBvQgvmN ++VfAswJzJHdNU+atAP7lr1hKbNvEPnus1lS4td2GHp8AMZ+E8RGwbZrh11FN3vBTNRVKlSDru3qX +TAWNvSxvlux3i/nHkvZ4Z8nwI32YY0nSt17LhVnSOmy/Syy5TMIsybr23DWWPCY/S6ZbvJWGcc0s +if2xZA6zpLYv3v5QYrpL5sXFtRAHyDGJejGZv9AxqdWOEBaTTjkck9faxNyLSb12j0l2biL9Gz4B +OSavXyXfisldHo5JNjsSmwjo/1EKpjpN/4pU6T4wF1RaC6n+vxcZuheLoD5AsDZoSnK83LIftlOC +j/PHG9OFNqFQVzImFCazrAo7nXvuyq7wYHJvoKjClW/Icl33bciLJ1DSinXlIxIV5sVy7ArL/pk1 +qvugZOqnEhbhuyFdz4OWDRR6dBo5ivqsnNmCsveBtfXGrUxM2befbMMwrbngzN9LYl1UVStyBgSb +1Y8MkI3oskENsibRYX+iLnI3WUWJGg59xWMSx0F6/1iXH/t/Q/NWKmn+U0JCBTQLi9+lda/hxgrE +SB35w2EWNbWF/BhD+r8NQGCnqxzJVmM55l/dHfrpdyyfJkEU02+wte2dYJkchsciElisWO8VAu55 +hbFPdtJbcfzsVSQGF2LkWwKHL+nxEXEM9/TyJLwRi8w8lQ9C6JCCDkonkDiByMnnQZolYquoyV05 +aQMCJK7kwHpU1bEYEq3V0Zgfx8QqBOUSFEiGsghyLdjOpSH0LM/Fz5gaPG4+pxbUqvQvJnAvgoOw +LXMNMscjAPmxDg1CoMHBEcLJawhEEAaGHTqATikE7JoyYW6ETQJEUfcNMDjEKZyD/C5+PVybNr2h +XVEt7zGxqLgLxW3BVBRL+txgNLPNYzFIIYQisQ2h8xQHDl/xdpylEp1jVgEZKiEJrC4cR/FkJKXR +hsXyMr7WcP0PRMHldrS5yTdbwz38PtjRIEnpsoYTpAwxyiBBWVNrUDvsC27klOlAyZcurYVlvLz9 +UOkciYPmUi9coCH2eccFcqnLBE80kkQlXyZILjgW1VbL2Dxve5L0Mx9aqam/SiyR9+qVpM2dZRO4 +/O56KUpRYHLLq83KISxKqaBXLrsJq1NQav7s1aMxr6JZ7zHNOKx1XA6xiqVcT0xSnCiOOKzOFj/A +M9OobmfJJJcPbElNDA4bGIkyLv3odZCW3ED6FobYK0pmHy4RDu03 + + + + diff --git a/internal/cmd/stats/heartbit.svg b/internal/cmd/stats/heartbit.svg new file mode 100644 index 0000000000000000000000000000000000000000..daef4b0b57f392d02699d5e7371671633ffd57f2 --- /dev/null +++ b/internal/cmd/stats/heartbit.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/internal/cmd/stats/index.css b/internal/cmd/stats/index.css new file mode 100644 index 0000000000000000000000000000000000000000..b01c84442f6cbe1675f46ec02a65d801d0abed2d --- /dev/null +++ b/internal/cmd/stats/index.css @@ -0,0 +1,275 @@ +:root { + /* Dark mode colors - charmtone dark palette */ + --bg: #201f26; + --bg-secondary: #2d2c35; + --text: #fffaf1; + --text-muted: #858392; + + /* Charmtone colors (global - same in both light and dark modes) */ + --charple: #6b50ff; + --cherry: #ff388b; + --julep: #00ffb2; + --urchin: #c337e0; + --butter: #fffaf1; + --squid: #858392; + --pepper: #201f26; + --iron: #4d4c57; + --tuna: #ff6daa; + --uni: #ff937d; + --coral: #ff577d; + --violet: #c259ff; + --malibu: #00a4ff; + --hazy: #8b75ff; +} + +/* Light mode colors - charmtone light palette */ +@media (prefers-color-scheme: light) { + :root { + --bg: #f0f0f0; + --bg-secondary: #fbfbfb; + --text: #201f26; + --text-muted: #4d4c57; + } +} + +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + font-family: + -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, + sans-serif; + background: var(--bg); + color: var(--text); + line-height: 1.6; + padding: 2rem 1rem; +} + +.container { + max-width: 1200px; + margin: 0 auto; +} + +.header-wrapper { + max-width: 1200px; + margin: 0 auto 2rem; +} + +.header-wrapper a { + display: block; + text-decoration: none; +} + +.header-content { + display: flex; + align-items: center; + width: 100%; +} + +.header-svg { + flex-grow: 1; + flex-shrink: 1; + min-width: 0; + overflow: hidden; + height: 70px; + display: flex; + align-items: center; +} + +.header-svg svg { + height: 70px; + width: auto; + min-width: 1300px; + display: block; + pointer-events: none; +} + +.heartbit-svg { + flex-shrink: 0; + width: 70px; + flex-basis: 70px; + margin-left: 1rem; +} + +.heartbit-svg svg { + width: 100%; + height: auto; + display: block; +} + +.header-info { + margin-bottom: 2rem; + font-size: 0.875rem; + color: var(--hazy); + font-family: "JetBrains Mono", "SF Mono", Consolas, monospace; +} + +.stats-grid { + display: flex; + flex-wrap: wrap; + gap: 1rem; + margin-bottom: 2rem; + width: 100%; +} + +.stat-card { + background: var(--bg-secondary); + border-radius: 12px; + padding: 1.5rem; + flex: 1 1 150px; + max-width: calc((100% - 5rem) / 6); +} + +@media (prefers-color-scheme: light) { + .stat-card { + background: var(--butter); + } +} + +@media (max-width: 1024px) { + .stat-card { + max-width: calc((100% - 2rem) / 3); + } +} + +@media (max-width: 600px) { + .stat-card { + max-width: calc((100% - 1rem) / 2); + } +} + +.stat-card h3 { + font-size: 0.75rem; + color: var(--text-muted); + text-transform: uppercase; + letter-spacing: 0.05em; + margin-bottom: 0.5rem; +} + +.stat-card .value { + font-size: 2rem; + font-weight: 700; + color: var(--butter); + white-space: nowrap; +} + +@media (prefers-color-scheme: light) { + .stat-card .value { + color: var(--pepper); + } +} + +.charts-grid { + display: flex; + flex-direction: column; + gap: 1.5rem; + margin-bottom: 2rem; + width: 100%; +} + +.chart-card { + background: var(--bg-secondary); + border-radius: 12px; + padding: 1.5rem; + width: 100%; + box-sizing: border-box; +} + +@media (prefers-color-scheme: light) { + .chart-card { + background: var(--butter); + } +} + +.chart-card.full-width { + width: 100%; +} + +.chart-row { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 1.5rem; + width: 100%; +} + +.chart-row .chart-card { + width: 100%; +} + +@media (max-width: 1024px) { + .chart-row { + grid-template-columns: 1fr; + } +} + +.chart-card h2 { + font-size: 1.25rem; + margin-bottom: 1rem; + color: var(--text); +} + +.chart-container { + position: relative; + height: 300px; +} + +.chart-container.tall { + height: 400px; +} + +table { + width: 100%; + border-collapse: collapse; + margin-top: 1rem; +} + +th, +td { + text-align: left; + padding: 0.75rem; + border-bottom: 1px solid var(--border); +} + +th { + color: var(--text-muted); + font-weight: 500; + font-size: 0.875rem; +} + +td { + font-family: "JetBrains Mono", "SF Mono", Consolas, monospace; +} + +.model-tag { + background: var(--bg); + padding: 0.25rem 0.5rem; + border-radius: 4px; + font-size: 0.875rem; +} + +.footer-container { + max-width: 1200px; + margin: 2rem auto 0; +} + +.footer-container svg { + width: 100%; + height: auto; + display: block; +} + +/* Override charm brand colors in footer */ +.footer-container .st2 { + fill: #fffaf1 !important; +} + +@media (prefers-color-scheme: light) { + + /* Override charm brand colors in footer */ + .footer-container .st2 { + fill: #644ced !important; + } +} diff --git a/internal/cmd/stats/index.html b/internal/cmd/stats/index.html new file mode 100644 index 0000000000000000000000000000000000000000..4b25831f86c76f86bf405d3c9e77ddb2b7d1821e --- /dev/null +++ b/internal/cmd/stats/index.html @@ -0,0 +1,136 @@ + + + + + + Crush Usage Statistics + + + + + + + + +
+ + +
+ Generated by {{.Username}} for {{.ProjectName}} in {{.GeneratedAt}}. +
+ +
+
+

Total Sessions

+
+
+
+

Total Messages

+
+
+
+

Total Tokens

+
+
+
+

Total Cost

+
+
+
+

Tokens/Session

+
+
+
+

Response Time

+
+
+
+ +
+
+

Activity Heatmap

+
+ +
+
+ +
+

Activity (Last 30 Days)

+
+ +
+
+ +
+

Tool Usage

+
+ +
+
+ +
+
+

Messages by Provider

+
+ +
+
+ +
+

Token Distribution

+
+ +
+
+
+ +
+

Usage by Model

+
+ +
+
+ +
+

Daily Usage History

+
+ + + + + + + + + + + + +
DateSessionsPrompt TokensCompletion TokensTotal TokensCost
+
+
+
+
+ + + + + + diff --git a/internal/cmd/stats/index.js b/internal/cmd/stats/index.js new file mode 100644 index 0000000000000000000000000000000000000000..3007322881e458312a31702f735c1c3257bcfb6d --- /dev/null +++ b/internal/cmd/stats/index.js @@ -0,0 +1,356 @@ +// Get all charmtone colors once from computed styles +const rootStyles = getComputedStyle(document.documentElement); +const colors = { + charple: rootStyles.getPropertyValue("--charple").trim(), + cherry: rootStyles.getPropertyValue("--cherry").trim(), + julep: rootStyles.getPropertyValue("--julep").trim(), + urchin: rootStyles.getPropertyValue("--urchin").trim(), + butter: rootStyles.getPropertyValue("--butter").trim(), + squid: rootStyles.getPropertyValue("--squid").trim(), + pepper: rootStyles.getPropertyValue("--pepper").trim(), + tuna: rootStyles.getPropertyValue("--tuna").trim(), + uni: rootStyles.getPropertyValue("--uni").trim(), + coral: rootStyles.getPropertyValue("--coral").trim(), + violet: rootStyles.getPropertyValue("--violet").trim(), + malibu: rootStyles.getPropertyValue("--malibu").trim(), +}; + +const easeDuration = 500; +const easeType = "easeOutQuart"; + +// Helper functions +function formatNumber(n) { + return new Intl.NumberFormat().format(Math.round(n)); +} + +function formatCompact(n) { + if (n >= 1000000) return (n / 1000000).toFixed(1) + "M"; + if (n >= 1000) return (n / 1000).toFixed(1) + "k"; + return Math.round(n).toString(); +} + +function formatCost(n) { + return "$" + n.toFixed(2); +} + +function formatTime(ms) { + if (ms < 1000) return Math.round(ms) + "ms"; + return (ms / 1000).toFixed(1) + "s"; +} + +const charpleColor = { r: 107, g: 80, b: 255 }; +const tunaColor = { r: 255, g: 109, b: 170 }; + +function interpolateColor(ratio, alpha = 1) { + const r = Math.round(charpleColor.r + (tunaColor.r - charpleColor.r) * ratio); + const g = Math.round(charpleColor.g + (tunaColor.g - charpleColor.g) * ratio); + const b = Math.round(charpleColor.b + (tunaColor.b - charpleColor.b) * ratio); + if (alpha < 1) { + return `rgba(${r}, ${g}, ${b}, ${alpha})`; + } + return `rgb(${r}, ${g}, ${b})`; +} + +function getTopItemsWithOthers(items, countKey, labelKey, topN = 10) { + const topItems = items.slice(0, topN); + const otherItems = items.slice(topN); + const otherCount = otherItems.reduce((sum, item) => sum + item[countKey], 0); + const displayItems = [...topItems]; + if (otherItems.length > 0) { + const otherItem = { [countKey]: otherCount, [labelKey]: "others" }; + displayItems.push(otherItem); + } + return displayItems; +} + +// Populate summary cards +document.getElementById("total-sessions").textContent = formatNumber( + stats.total.total_sessions, +); +document.getElementById("total-messages").textContent = formatCompact( + stats.total.total_messages, +); +document.getElementById("total-tokens").textContent = formatCompact( + stats.total.total_tokens, +); +document.getElementById("total-cost").textContent = formatCost( + stats.total.total_cost, +); +document.getElementById("avg-tokens").innerHTML = + ' ' + + formatCompact(stats.total.avg_tokens_per_session); +document.getElementById("avg-response").innerHTML = + ' ' + formatTime(stats.avg_response_time_ms); + +// Chart defaults +Chart.defaults.color = colors.squid; +Chart.defaults.borderColor = colors.squid; + +if (stats.recent_activity?.length > 0) { + new Chart(document.getElementById("recentActivityChart"), { + type: "bar", + data: { + labels: stats.recent_activity.map((d) => d.day), + datasets: [ + { + label: "Sessions", + data: stats.recent_activity.map((d) => d.session_count), + backgroundColor: colors.charple, + borderRadius: 4, + yAxisID: "y", + }, + { + label: "Tokens (K)", + data: stats.recent_activity.map((d) => d.total_tokens / 1000), + backgroundColor: colors.julep, + borderRadius: 4, + yAxisID: "y1", + }, + ], + }, + options: { + responsive: true, + maintainAspectRatio: false, + animation: { duration: 800, easing: easeType }, + interaction: { mode: "index", intersect: false }, + scales: { + y: { position: "left", title: { display: true, text: "Sessions" } }, + y1: { + position: "right", + title: { display: true, text: "Tokens (K)" }, + grid: { drawOnChartArea: false }, + }, + }, + }, + }); +} + +// Heatmap (Hour × Day of Week) - Bubble Chart +const dayLabels = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]; + +let maxCount = + stats.hour_day_heatmap?.length > 0 + ? Math.max(...stats.hour_day_heatmap.map((h) => h.session_count)) + : 0; +if (maxCount === 0) maxCount = 1; +const scaleFactor = 20 / Math.sqrt(maxCount); + +if (stats.hour_day_heatmap?.length > 0) { + new Chart(document.getElementById("heatmapChart"), { + type: "bubble", + data: { + datasets: [ + { + label: "Sessions", + data: stats.hour_day_heatmap + .filter((h) => h.session_count > 0) + .map((h) => ({ + x: h.hour, + y: h.day_of_week, + r: Math.sqrt(h.session_count) * scaleFactor, + count: h.session_count, + })), + backgroundColor: (ctx) => { + const count = + ctx.raw?.count || ctx.dataset.data[ctx.dataIndex]?.count || 0; + const ratio = count / maxCount; + return interpolateColor(ratio); + }, + borderWidth: 0, + }, + ], + }, + options: { + responsive: true, + maintainAspectRatio: false, + animation: false, + scales: { + x: { + min: 0, + max: 23, + grid: { display: false }, + title: { display: true, text: "Hour of Day" }, + ticks: { + stepSize: 1, + callback: (v) => (Number.isInteger(v) ? v : ""), + }, + }, + y: { + min: 0, + max: 6, + reverse: true, + grid: { display: false }, + title: { display: true, text: "Day of Week" }, + ticks: { stepSize: 1, callback: (v) => dayLabels[v] || "" }, + }, + }, + plugins: { + legend: { display: false }, + tooltip: { + callbacks: { + label: (ctx) => + dayLabels[ctx.raw.y] + + " " + + ctx.raw.x + + ":00 - " + + ctx.raw.count + + " sessions", + }, + }, + }, + }, + }); +} + +if (stats.tool_usage?.length > 0) { + const displayTools = getTopItemsWithOthers( + stats.tool_usage, + "call_count", + "tool_name", + ); + const maxValue = Math.max(...displayTools.map((t) => t.call_count)); + new Chart(document.getElementById("toolChart"), { + type: "bar", + data: { + labels: displayTools.map((t) => t.tool_name), + datasets: [ + { + label: "Calls", + data: displayTools.map((t) => t.call_count), + backgroundColor: (ctx) => { + const value = ctx.raw; + const ratio = value / maxValue; + return interpolateColor(ratio); + }, + borderRadius: 4, + }, + ], + }, + options: { + indexAxis: "y", + responsive: true, + maintainAspectRatio: false, + animation: { duration: easeDuration, easing: easeType }, + plugins: { legend: { display: false } }, + }, + }); +} + +// Token Distribution Pie +new Chart(document.getElementById("tokenPieChart"), { + type: "doughnut", + data: { + labels: ["Prompt Tokens", "Completion Tokens"], + datasets: [ + { + data: [ + stats.total.total_prompt_tokens, + stats.total.total_completion_tokens, + ], + backgroundColor: [colors.charple, colors.julep], + borderWidth: 0, + }, + ], + }, + options: { + responsive: true, + maintainAspectRatio: false, + animation: { duration: easeDuration, easing: easeType }, + plugins: { + legend: { position: "bottom" }, + }, + }, +}); + +// Model Usage Chart (horizontal bar) +if (stats.usage_by_model?.length > 0) { + const displayModels = getTopItemsWithOthers( + stats.usage_by_model, + "message_count", + "model", + ); + const maxModelValue = Math.max(...displayModels.map((m) => m.message_count)); + new Chart(document.getElementById("modelChart"), { + type: "bar", + data: { + labels: displayModels.map((m) => + m.provider ? `${m.model} (${m.provider})` : m.model, + ), + datasets: [ + { + label: "Messages", + data: displayModels.map((m) => m.message_count), + backgroundColor: (ctx) => { + const value = ctx.raw; + const ratio = value / maxModelValue; + return interpolateColor(ratio); + }, + borderRadius: 4, + }, + ], + }, + options: { + indexAxis: "y", + responsive: true, + maintainAspectRatio: false, + animation: { duration: easeDuration, easing: easeType }, + plugins: { legend: { display: false } }, + }, + }); +} + +if (stats.usage_by_model?.length > 0) { + const providerData = stats.usage_by_model.reduce((acc, m) => { + acc[m.provider] = (acc[m.provider] || 0) + m.message_count; + return acc; + }, {}); + const providerColors = [ + colors.malibu, + colors.charple, + colors.violet, + colors.tuna, + colors.coral, + colors.uni, + ]; + new Chart(document.getElementById("providerPieChart"), { + type: "doughnut", + data: { + labels: Object.keys(providerData), + datasets: [ + { + data: Object.values(providerData), + backgroundColor: Object.keys(providerData).map( + (_, i) => providerColors[i % providerColors.length], + ), + borderWidth: 0, + }, + ], + }, + options: { + responsive: true, + maintainAspectRatio: false, + animation: { duration: easeDuration, easing: easeType }, + plugins: { + legend: { position: "bottom" }, + }, + }, + }); +} + +// Daily Usage Table +const tableBody = document.querySelector("#daily-table tbody"); +if (stats.usage_by_day?.length > 0) { + const fragment = document.createDocumentFragment(); + stats.usage_by_day.slice(0, 30).forEach((d) => { + const row = document.createElement("tr"); + row.innerHTML = `${d.day}${d.session_count}${formatNumber( + d.prompt_tokens, + )}${formatNumber( + d.completion_tokens, + )}${formatNumber(d.total_tokens)}${formatCost( + d.cost, + )}`; + fragment.appendChild(row); + }); + tableBody.appendChild(fragment); +} diff --git a/internal/db/db.go b/internal/db/db.go index 7fa2e6528743dcb5485c0de9b4a3f2b46eb39376..81c3179e22f6768b2ffa2c5b4af2e10c385d5835 100644 --- a/internal/db/db.go +++ b/internal/db/db.go @@ -48,18 +48,45 @@ func Prepare(ctx context.Context, db DBTX) (*Queries, error) { if q.deleteSessionMessagesStmt, err = db.PrepareContext(ctx, deleteSessionMessages); err != nil { return nil, fmt.Errorf("error preparing query DeleteSessionMessages: %w", err) } + if q.getAverageResponseTimeStmt, err = db.PrepareContext(ctx, getAverageResponseTime); err != nil { + return nil, fmt.Errorf("error preparing query GetAverageResponseTime: %w", err) + } if q.getFileStmt, err = db.PrepareContext(ctx, getFile); err != nil { return nil, fmt.Errorf("error preparing query GetFile: %w", err) } if q.getFileByPathAndSessionStmt, err = db.PrepareContext(ctx, getFileByPathAndSession); err != nil { return nil, fmt.Errorf("error preparing query GetFileByPathAndSession: %w", err) } + if q.getHourDayHeatmapStmt, err = db.PrepareContext(ctx, getHourDayHeatmap); err != nil { + return nil, fmt.Errorf("error preparing query GetHourDayHeatmap: %w", err) + } if q.getMessageStmt, err = db.PrepareContext(ctx, getMessage); err != nil { return nil, fmt.Errorf("error preparing query GetMessage: %w", err) } + if q.getRecentActivityStmt, err = db.PrepareContext(ctx, getRecentActivity); err != nil { + return nil, fmt.Errorf("error preparing query GetRecentActivity: %w", err) + } if q.getSessionByIDStmt, err = db.PrepareContext(ctx, getSessionByID); err != nil { return nil, fmt.Errorf("error preparing query GetSessionByID: %w", err) } + if q.getToolUsageStmt, err = db.PrepareContext(ctx, getToolUsage); err != nil { + return nil, fmt.Errorf("error preparing query GetToolUsage: %w", err) + } + if q.getTotalStatsStmt, err = db.PrepareContext(ctx, getTotalStats); err != nil { + return nil, fmt.Errorf("error preparing query GetTotalStats: %w", err) + } + if q.getUsageByDayStmt, err = db.PrepareContext(ctx, getUsageByDay); err != nil { + return nil, fmt.Errorf("error preparing query GetUsageByDay: %w", err) + } + if q.getUsageByDayOfWeekStmt, err = db.PrepareContext(ctx, getUsageByDayOfWeek); err != nil { + return nil, fmt.Errorf("error preparing query GetUsageByDayOfWeek: %w", err) + } + if q.getUsageByHourStmt, err = db.PrepareContext(ctx, getUsageByHour); err != nil { + return nil, fmt.Errorf("error preparing query GetUsageByHour: %w", err) + } + if q.getUsageByModelStmt, err = db.PrepareContext(ctx, getUsageByModel); err != nil { + return nil, fmt.Errorf("error preparing query GetUsageByModel: %w", err) + } if q.listFilesByPathStmt, err = db.PrepareContext(ctx, listFilesByPath); err != nil { return nil, fmt.Errorf("error preparing query ListFilesByPath: %w", err) } @@ -132,6 +159,11 @@ func (q *Queries) Close() error { err = fmt.Errorf("error closing deleteSessionMessagesStmt: %w", cerr) } } + if q.getAverageResponseTimeStmt != nil { + if cerr := q.getAverageResponseTimeStmt.Close(); cerr != nil { + err = fmt.Errorf("error closing getAverageResponseTimeStmt: %w", cerr) + } + } if q.getFileStmt != nil { if cerr := q.getFileStmt.Close(); cerr != nil { err = fmt.Errorf("error closing getFileStmt: %w", cerr) @@ -142,16 +174,56 @@ func (q *Queries) Close() error { err = fmt.Errorf("error closing getFileByPathAndSessionStmt: %w", cerr) } } + if q.getHourDayHeatmapStmt != nil { + if cerr := q.getHourDayHeatmapStmt.Close(); cerr != nil { + err = fmt.Errorf("error closing getHourDayHeatmapStmt: %w", cerr) + } + } if q.getMessageStmt != nil { if cerr := q.getMessageStmt.Close(); cerr != nil { err = fmt.Errorf("error closing getMessageStmt: %w", cerr) } } + if q.getRecentActivityStmt != nil { + if cerr := q.getRecentActivityStmt.Close(); cerr != nil { + err = fmt.Errorf("error closing getRecentActivityStmt: %w", cerr) + } + } if q.getSessionByIDStmt != nil { if cerr := q.getSessionByIDStmt.Close(); cerr != nil { err = fmt.Errorf("error closing getSessionByIDStmt: %w", cerr) } } + if q.getToolUsageStmt != nil { + if cerr := q.getToolUsageStmt.Close(); cerr != nil { + err = fmt.Errorf("error closing getToolUsageStmt: %w", cerr) + } + } + if q.getTotalStatsStmt != nil { + if cerr := q.getTotalStatsStmt.Close(); cerr != nil { + err = fmt.Errorf("error closing getTotalStatsStmt: %w", cerr) + } + } + if q.getUsageByDayStmt != nil { + if cerr := q.getUsageByDayStmt.Close(); cerr != nil { + err = fmt.Errorf("error closing getUsageByDayStmt: %w", cerr) + } + } + if q.getUsageByDayOfWeekStmt != nil { + if cerr := q.getUsageByDayOfWeekStmt.Close(); cerr != nil { + err = fmt.Errorf("error closing getUsageByDayOfWeekStmt: %w", cerr) + } + } + if q.getUsageByHourStmt != nil { + if cerr := q.getUsageByHourStmt.Close(); cerr != nil { + err = fmt.Errorf("error closing getUsageByHourStmt: %w", cerr) + } + } + if q.getUsageByModelStmt != nil { + if cerr := q.getUsageByModelStmt.Close(); cerr != nil { + err = fmt.Errorf("error closing getUsageByModelStmt: %w", cerr) + } + } if q.listFilesByPathStmt != nil { if cerr := q.listFilesByPathStmt.Close(); cerr != nil { err = fmt.Errorf("error closing listFilesByPathStmt: %w", cerr) @@ -244,10 +316,19 @@ type Queries struct { deleteSessionStmt *sql.Stmt deleteSessionFilesStmt *sql.Stmt deleteSessionMessagesStmt *sql.Stmt + getAverageResponseTimeStmt *sql.Stmt getFileStmt *sql.Stmt getFileByPathAndSessionStmt *sql.Stmt + getHourDayHeatmapStmt *sql.Stmt getMessageStmt *sql.Stmt + getRecentActivityStmt *sql.Stmt getSessionByIDStmt *sql.Stmt + getToolUsageStmt *sql.Stmt + getTotalStatsStmt *sql.Stmt + getUsageByDayStmt *sql.Stmt + getUsageByDayOfWeekStmt *sql.Stmt + getUsageByHourStmt *sql.Stmt + getUsageByModelStmt *sql.Stmt listFilesByPathStmt *sql.Stmt listFilesBySessionStmt *sql.Stmt listLatestSessionFilesStmt *sql.Stmt @@ -271,10 +352,19 @@ func (q *Queries) WithTx(tx *sql.Tx) *Queries { deleteSessionStmt: q.deleteSessionStmt, deleteSessionFilesStmt: q.deleteSessionFilesStmt, deleteSessionMessagesStmt: q.deleteSessionMessagesStmt, + getAverageResponseTimeStmt: q.getAverageResponseTimeStmt, getFileStmt: q.getFileStmt, getFileByPathAndSessionStmt: q.getFileByPathAndSessionStmt, + getHourDayHeatmapStmt: q.getHourDayHeatmapStmt, getMessageStmt: q.getMessageStmt, + getRecentActivityStmt: q.getRecentActivityStmt, getSessionByIDStmt: q.getSessionByIDStmt, + getToolUsageStmt: q.getToolUsageStmt, + getTotalStatsStmt: q.getTotalStatsStmt, + getUsageByDayStmt: q.getUsageByDayStmt, + getUsageByDayOfWeekStmt: q.getUsageByDayOfWeekStmt, + getUsageByHourStmt: q.getUsageByHourStmt, + getUsageByModelStmt: q.getUsageByModelStmt, listFilesByPathStmt: q.listFilesByPathStmt, listFilesBySessionStmt: q.listFilesBySessionStmt, listLatestSessionFilesStmt: q.listLatestSessionFilesStmt, diff --git a/internal/db/querier.go b/internal/db/querier.go index dfa6d722535b4265f3f54331d1904523a648f562..c70386690c6c42aca53a2b6682ddca0f3a0262ba 100644 --- a/internal/db/querier.go +++ b/internal/db/querier.go @@ -17,10 +17,19 @@ type Querier interface { DeleteSession(ctx context.Context, id string) error DeleteSessionFiles(ctx context.Context, sessionID string) error DeleteSessionMessages(ctx context.Context, sessionID string) error + GetAverageResponseTime(ctx context.Context) (int64, error) GetFile(ctx context.Context, id string) (File, error) GetFileByPathAndSession(ctx context.Context, arg GetFileByPathAndSessionParams) (File, error) + GetHourDayHeatmap(ctx context.Context) ([]GetHourDayHeatmapRow, error) GetMessage(ctx context.Context, id string) (Message, error) + GetRecentActivity(ctx context.Context) ([]GetRecentActivityRow, error) GetSessionByID(ctx context.Context, id string) (Session, error) + GetToolUsage(ctx context.Context) ([]GetToolUsageRow, error) + GetTotalStats(ctx context.Context) (GetTotalStatsRow, error) + GetUsageByDay(ctx context.Context) ([]GetUsageByDayRow, error) + GetUsageByDayOfWeek(ctx context.Context) ([]GetUsageByDayOfWeekRow, error) + GetUsageByHour(ctx context.Context) ([]GetUsageByHourRow, error) + GetUsageByModel(ctx context.Context) ([]GetUsageByModelRow, error) ListFilesByPath(ctx context.Context, path string) ([]File, error) ListFilesBySession(ctx context.Context, sessionID string) ([]File, error) ListLatestSessionFiles(ctx context.Context, sessionID string) ([]File, error) diff --git a/internal/db/sql/stats.sql b/internal/db/sql/stats.sql new file mode 100644 index 0000000000000000000000000000000000000000..02f2c33425b299870827b2d05f458106b82b599c --- /dev/null +++ b/internal/db/sql/stats.sql @@ -0,0 +1,93 @@ +-- name: GetUsageByDay :many +SELECT + date(created_at, 'unixepoch') as day, + SUM(prompt_tokens) as prompt_tokens, + SUM(completion_tokens) as completion_tokens, + SUM(cost) as cost, + COUNT(*) as session_count +FROM sessions +WHERE parent_session_id IS NULL +GROUP BY date(created_at, 'unixepoch') +ORDER BY day DESC; + +-- name: GetUsageByModel :many +SELECT + COALESCE(model, 'unknown') as model, + COALESCE(provider, 'unknown') as provider, + COUNT(*) as message_count +FROM messages +WHERE role = 'assistant' +GROUP BY model, provider +ORDER BY message_count DESC; + +-- name: GetUsageByHour :many +SELECT + CAST(strftime('%H', created_at, 'unixepoch') AS INTEGER) as hour, + COUNT(*) as session_count +FROM sessions +WHERE parent_session_id IS NULL +GROUP BY hour +ORDER BY hour; + +-- name: GetUsageByDayOfWeek :many +SELECT + CAST(strftime('%w', created_at, 'unixepoch') AS INTEGER) as day_of_week, + COUNT(*) as session_count, + SUM(prompt_tokens) as prompt_tokens, + SUM(completion_tokens) as completion_tokens +FROM sessions +WHERE parent_session_id IS NULL +GROUP BY day_of_week +ORDER BY day_of_week; + +-- name: GetTotalStats :one +SELECT + COUNT(*) as total_sessions, + COALESCE(SUM(prompt_tokens), 0) as total_prompt_tokens, + COALESCE(SUM(completion_tokens), 0) as total_completion_tokens, + COALESCE(SUM(cost), 0) as total_cost, + COALESCE(SUM(message_count), 0) as total_messages, + COALESCE(AVG(prompt_tokens + completion_tokens), 0) as avg_tokens_per_session, + COALESCE(AVG(message_count), 0) as avg_messages_per_session +FROM sessions +WHERE parent_session_id IS NULL; + +-- name: GetRecentActivity :many +SELECT + date(created_at, 'unixepoch') as day, + COUNT(*) as session_count, + SUM(prompt_tokens + completion_tokens) as total_tokens, + SUM(cost) as cost +FROM sessions +WHERE parent_session_id IS NULL + AND created_at >= strftime('%s', 'now', '-30 days') +GROUP BY date(created_at, 'unixepoch') +ORDER BY day ASC; + +-- name: GetAverageResponseTime :one +SELECT + CAST(COALESCE(AVG(finished_at - created_at), 0) AS INTEGER) as avg_response_seconds +FROM messages +WHERE role = 'assistant' + AND finished_at IS NOT NULL + AND finished_at > created_at; + +-- name: GetToolUsage :many +SELECT + json_extract(value, '$.data.name') as tool_name, + COUNT(*) as call_count +FROM messages, json_each(parts) +WHERE json_extract(value, '$.type') = 'tool_call' + AND json_extract(value, '$.data.name') IS NOT NULL +GROUP BY tool_name +ORDER BY call_count DESC; + +-- name: GetHourDayHeatmap :many +SELECT + CAST(strftime('%w', created_at, 'unixepoch') AS INTEGER) as day_of_week, + CAST(strftime('%H', created_at, 'unixepoch') AS INTEGER) as hour, + COUNT(*) as session_count +FROM sessions +WHERE parent_session_id IS NULL +GROUP BY day_of_week, hour +ORDER BY day_of_week, hour; diff --git a/internal/db/stats.sql.go b/internal/db/stats.sql.go new file mode 100644 index 0000000000000000000000000000000000000000..119dd410a07c7e47a2f7369c0ee2fdca8c19b7c3 --- /dev/null +++ b/internal/db/stats.sql.go @@ -0,0 +1,367 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 +// source: stats.sql + +package db + +import ( + "context" + "database/sql" +) + +const getAverageResponseTime = `-- name: GetAverageResponseTime :one +SELECT + CAST(COALESCE(AVG(finished_at - created_at), 0) AS INTEGER) as avg_response_seconds +FROM messages +WHERE role = 'assistant' + AND finished_at IS NOT NULL + AND finished_at > created_at +` + +func (q *Queries) GetAverageResponseTime(ctx context.Context) (int64, error) { + row := q.queryRow(ctx, q.getAverageResponseTimeStmt, getAverageResponseTime) + var avg_response_seconds int64 + err := row.Scan(&avg_response_seconds) + return avg_response_seconds, err +} + +const getHourDayHeatmap = `-- name: GetHourDayHeatmap :many +SELECT + CAST(strftime('%w', created_at, 'unixepoch') AS INTEGER) as day_of_week, + CAST(strftime('%H', created_at, 'unixepoch') AS INTEGER) as hour, + COUNT(*) as session_count +FROM sessions +WHERE parent_session_id IS NULL +GROUP BY day_of_week, hour +ORDER BY day_of_week, hour +` + +type GetHourDayHeatmapRow struct { + DayOfWeek int64 `json:"day_of_week"` + Hour int64 `json:"hour"` + SessionCount int64 `json:"session_count"` +} + +func (q *Queries) GetHourDayHeatmap(ctx context.Context) ([]GetHourDayHeatmapRow, error) { + rows, err := q.query(ctx, q.getHourDayHeatmapStmt, getHourDayHeatmap) + if err != nil { + return nil, err + } + defer rows.Close() + items := []GetHourDayHeatmapRow{} + for rows.Next() { + var i GetHourDayHeatmapRow + if err := rows.Scan(&i.DayOfWeek, &i.Hour, &i.SessionCount); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const getRecentActivity = `-- name: GetRecentActivity :many +SELECT + date(created_at, 'unixepoch') as day, + COUNT(*) as session_count, + SUM(prompt_tokens + completion_tokens) as total_tokens, + SUM(cost) as cost +FROM sessions +WHERE parent_session_id IS NULL + AND created_at >= strftime('%s', 'now', '-30 days') +GROUP BY date(created_at, 'unixepoch') +ORDER BY day ASC +` + +type GetRecentActivityRow struct { + Day interface{} `json:"day"` + SessionCount int64 `json:"session_count"` + TotalTokens sql.NullFloat64 `json:"total_tokens"` + Cost sql.NullFloat64 `json:"cost"` +} + +func (q *Queries) GetRecentActivity(ctx context.Context) ([]GetRecentActivityRow, error) { + rows, err := q.query(ctx, q.getRecentActivityStmt, getRecentActivity) + if err != nil { + return nil, err + } + defer rows.Close() + items := []GetRecentActivityRow{} + for rows.Next() { + var i GetRecentActivityRow + if err := rows.Scan( + &i.Day, + &i.SessionCount, + &i.TotalTokens, + &i.Cost, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const getToolUsage = `-- name: GetToolUsage :many +SELECT + json_extract(value, '$.data.name') as tool_name, + COUNT(*) as call_count +FROM messages, json_each(parts) +WHERE json_extract(value, '$.type') = 'tool_call' + AND json_extract(value, '$.data.name') IS NOT NULL +GROUP BY tool_name +ORDER BY call_count DESC +` + +type GetToolUsageRow struct { + ToolName interface{} `json:"tool_name"` + CallCount int64 `json:"call_count"` +} + +func (q *Queries) GetToolUsage(ctx context.Context) ([]GetToolUsageRow, error) { + rows, err := q.query(ctx, q.getToolUsageStmt, getToolUsage) + if err != nil { + return nil, err + } + defer rows.Close() + items := []GetToolUsageRow{} + for rows.Next() { + var i GetToolUsageRow + if err := rows.Scan(&i.ToolName, &i.CallCount); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const getTotalStats = `-- name: GetTotalStats :one +SELECT + COUNT(*) as total_sessions, + COALESCE(SUM(prompt_tokens), 0) as total_prompt_tokens, + COALESCE(SUM(completion_tokens), 0) as total_completion_tokens, + COALESCE(SUM(cost), 0) as total_cost, + COALESCE(SUM(message_count), 0) as total_messages, + COALESCE(AVG(prompt_tokens + completion_tokens), 0) as avg_tokens_per_session, + COALESCE(AVG(message_count), 0) as avg_messages_per_session +FROM sessions +WHERE parent_session_id IS NULL +` + +type GetTotalStatsRow struct { + TotalSessions int64 `json:"total_sessions"` + TotalPromptTokens interface{} `json:"total_prompt_tokens"` + TotalCompletionTokens interface{} `json:"total_completion_tokens"` + TotalCost interface{} `json:"total_cost"` + TotalMessages interface{} `json:"total_messages"` + AvgTokensPerSession interface{} `json:"avg_tokens_per_session"` + AvgMessagesPerSession interface{} `json:"avg_messages_per_session"` +} + +func (q *Queries) GetTotalStats(ctx context.Context) (GetTotalStatsRow, error) { + row := q.queryRow(ctx, q.getTotalStatsStmt, getTotalStats) + var i GetTotalStatsRow + err := row.Scan( + &i.TotalSessions, + &i.TotalPromptTokens, + &i.TotalCompletionTokens, + &i.TotalCost, + &i.TotalMessages, + &i.AvgTokensPerSession, + &i.AvgMessagesPerSession, + ) + return i, err +} + +const getUsageByDay = `-- name: GetUsageByDay :many +SELECT + date(created_at, 'unixepoch') as day, + SUM(prompt_tokens) as prompt_tokens, + SUM(completion_tokens) as completion_tokens, + SUM(cost) as cost, + COUNT(*) as session_count +FROM sessions +WHERE parent_session_id IS NULL +GROUP BY date(created_at, 'unixepoch') +ORDER BY day DESC +` + +type GetUsageByDayRow struct { + Day interface{} `json:"day"` + PromptTokens sql.NullFloat64 `json:"prompt_tokens"` + CompletionTokens sql.NullFloat64 `json:"completion_tokens"` + Cost sql.NullFloat64 `json:"cost"` + SessionCount int64 `json:"session_count"` +} + +func (q *Queries) GetUsageByDay(ctx context.Context) ([]GetUsageByDayRow, error) { + rows, err := q.query(ctx, q.getUsageByDayStmt, getUsageByDay) + if err != nil { + return nil, err + } + defer rows.Close() + items := []GetUsageByDayRow{} + for rows.Next() { + var i GetUsageByDayRow + if err := rows.Scan( + &i.Day, + &i.PromptTokens, + &i.CompletionTokens, + &i.Cost, + &i.SessionCount, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const getUsageByDayOfWeek = `-- name: GetUsageByDayOfWeek :many +SELECT + CAST(strftime('%w', created_at, 'unixepoch') AS INTEGER) as day_of_week, + COUNT(*) as session_count, + SUM(prompt_tokens) as prompt_tokens, + SUM(completion_tokens) as completion_tokens +FROM sessions +WHERE parent_session_id IS NULL +GROUP BY day_of_week +ORDER BY day_of_week +` + +type GetUsageByDayOfWeekRow struct { + DayOfWeek int64 `json:"day_of_week"` + SessionCount int64 `json:"session_count"` + PromptTokens sql.NullFloat64 `json:"prompt_tokens"` + CompletionTokens sql.NullFloat64 `json:"completion_tokens"` +} + +func (q *Queries) GetUsageByDayOfWeek(ctx context.Context) ([]GetUsageByDayOfWeekRow, error) { + rows, err := q.query(ctx, q.getUsageByDayOfWeekStmt, getUsageByDayOfWeek) + if err != nil { + return nil, err + } + defer rows.Close() + items := []GetUsageByDayOfWeekRow{} + for rows.Next() { + var i GetUsageByDayOfWeekRow + if err := rows.Scan( + &i.DayOfWeek, + &i.SessionCount, + &i.PromptTokens, + &i.CompletionTokens, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const getUsageByHour = `-- name: GetUsageByHour :many +SELECT + CAST(strftime('%H', created_at, 'unixepoch') AS INTEGER) as hour, + COUNT(*) as session_count +FROM sessions +WHERE parent_session_id IS NULL +GROUP BY hour +ORDER BY hour +` + +type GetUsageByHourRow struct { + Hour int64 `json:"hour"` + SessionCount int64 `json:"session_count"` +} + +func (q *Queries) GetUsageByHour(ctx context.Context) ([]GetUsageByHourRow, error) { + rows, err := q.query(ctx, q.getUsageByHourStmt, getUsageByHour) + if err != nil { + return nil, err + } + defer rows.Close() + items := []GetUsageByHourRow{} + for rows.Next() { + var i GetUsageByHourRow + if err := rows.Scan(&i.Hour, &i.SessionCount); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const getUsageByModel = `-- name: GetUsageByModel :many +SELECT + COALESCE(model, 'unknown') as model, + COALESCE(provider, 'unknown') as provider, + COUNT(*) as message_count +FROM messages +WHERE role = 'assistant' +GROUP BY model, provider +ORDER BY message_count DESC +` + +type GetUsageByModelRow struct { + Model string `json:"model"` + Provider string `json:"provider"` + MessageCount int64 `json:"message_count"` +} + +func (q *Queries) GetUsageByModel(ctx context.Context) ([]GetUsageByModelRow, error) { + rows, err := q.query(ctx, q.getUsageByModelStmt, getUsageByModel) + if err != nil { + return nil, err + } + defer rows.Close() + items := []GetUsageByModelRow{} + for rows.Next() { + var i GetUsageByModelRow + if err := rows.Scan(&i.Model, &i.Provider, &i.MessageCount); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +}