2
0

stats.sql 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. -- name: GetUsageByDay :many
  2. SELECT
  3. date(created_at, 'unixepoch') as day,
  4. SUM(prompt_tokens) as prompt_tokens,
  5. SUM(completion_tokens) as completion_tokens,
  6. SUM(cost) as cost,
  7. COUNT(*) as session_count
  8. FROM sessions
  9. WHERE parent_session_id IS NULL
  10. GROUP BY date(created_at, 'unixepoch')
  11. ORDER BY day DESC;
  12. -- name: GetUsageByModel :many
  13. SELECT
  14. COALESCE(model, 'unknown') as model,
  15. COALESCE(provider, 'unknown') as provider,
  16. COUNT(*) as message_count
  17. FROM messages
  18. WHERE role = 'assistant'
  19. GROUP BY model, provider
  20. ORDER BY message_count DESC;
  21. -- name: GetUsageByHour :many
  22. SELECT
  23. CAST(strftime('%H', created_at, 'unixepoch') AS INTEGER) as hour,
  24. COUNT(*) as session_count
  25. FROM sessions
  26. WHERE parent_session_id IS NULL
  27. GROUP BY hour
  28. ORDER BY hour;
  29. -- name: GetUsageByDayOfWeek :many
  30. SELECT
  31. CAST(strftime('%w', created_at, 'unixepoch') AS INTEGER) as day_of_week,
  32. COUNT(*) as session_count,
  33. SUM(prompt_tokens) as prompt_tokens,
  34. SUM(completion_tokens) as completion_tokens
  35. FROM sessions
  36. WHERE parent_session_id IS NULL
  37. GROUP BY day_of_week
  38. ORDER BY day_of_week;
  39. -- name: GetTotalStats :one
  40. SELECT
  41. COUNT(*) as total_sessions,
  42. COALESCE(SUM(prompt_tokens), 0) as total_prompt_tokens,
  43. COALESCE(SUM(completion_tokens), 0) as total_completion_tokens,
  44. COALESCE(SUM(cost), 0) as total_cost,
  45. COALESCE(SUM(message_count), 0) as total_messages,
  46. COALESCE(AVG(prompt_tokens + completion_tokens), 0) as avg_tokens_per_session,
  47. COALESCE(AVG(message_count), 0) as avg_messages_per_session
  48. FROM sessions
  49. WHERE parent_session_id IS NULL;
  50. -- name: GetRecentActivity :many
  51. SELECT
  52. date(created_at, 'unixepoch') as day,
  53. COUNT(*) as session_count,
  54. SUM(prompt_tokens + completion_tokens) as total_tokens,
  55. SUM(cost) as cost
  56. FROM sessions
  57. WHERE parent_session_id IS NULL
  58. AND created_at >= strftime('%s', 'now', '-30 days')
  59. GROUP BY date(created_at, 'unixepoch')
  60. ORDER BY day ASC;
  61. -- name: GetAverageResponseTime :one
  62. SELECT
  63. CAST(COALESCE(AVG(finished_at - created_at), 0) AS INTEGER) as avg_response_seconds
  64. FROM messages
  65. WHERE role = 'assistant'
  66. AND finished_at IS NOT NULL
  67. AND finished_at > created_at;
  68. -- name: GetToolUsage :many
  69. SELECT
  70. json_extract(value, '$.data.name') as tool_name,
  71. COUNT(*) as call_count
  72. FROM messages, json_each(parts)
  73. WHERE json_extract(value, '$.type') = 'tool_call'
  74. AND json_extract(value, '$.data.name') IS NOT NULL
  75. GROUP BY tool_name
  76. ORDER BY call_count DESC;
  77. -- name: GetHourDayHeatmap :many
  78. SELECT
  79. CAST(strftime('%w', created_at, 'unixepoch') AS INTEGER) as day_of_week,
  80. CAST(strftime('%H', created_at, 'unixepoch') AS INTEGER) as hour,
  81. COUNT(*) as session_count
  82. FROM sessions
  83. WHERE parent_session_id IS NULL
  84. GROUP BY day_of_week, hour
  85. ORDER BY day_of_week, hour;