12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
# File 'lib/rails_error_dashboard/queries/dashboard_stats.rb', line 12
def call
begin
Rails.cache.fetch(cache_key, expires_in: 1.minute) do
{
total_today: ErrorLog.where("occurred_at >= ?", Time.current.beginning_of_day).count,
total_week: ErrorLog.where("occurred_at >= ?", 7.days.ago).count,
total_month: ErrorLog.where("occurred_at >= ?", 30.days.ago).count,
unresolved: ErrorLog.unresolved.count,
resolved: ErrorLog.resolved.count,
by_platform: ErrorLog.group(:platform).count,
top_errors: top_errors,
errors_trend_7d: errors_trend_7d,
errors_by_severity_7d: errors_by_severity_7d,
spike_detected: spike_detected?,
spike_info: spike_info,
error_rate: error_rate,
affected_users_today: affected_users_today,
affected_users_yesterday: affected_users_yesterday,
affected_users_change: affected_users_change,
trend_percentage: trend_percentage,
trend_direction: trend_direction,
top_errors_by_impact: top_errors_by_impact
}
end
rescue => e
Rails.logger.error("[RailsErrorDashboard] DashboardStats failed: #{e.class} - #{e.message}")
Rails.logger.debug("[RailsErrorDashboard] Backtrace: #{e.backtrace&.first(3)&.join("\n")}")
{
total_today: 0,
total_week: 0,
total_month: 0,
unresolved: 0,
resolved: 0,
by_platform: {},
top_errors: {},
errors_trend_7d: {},
errors_by_severity_7d: { critical: 0, high: 0, medium: 0, low: 0 },
spike_detected: false,
spike_info: nil,
error_rate: 0.0,
affected_users_today: 0,
affected_users_yesterday: 0,
affected_users_change: 0,
trend_percentage: 0.0,
trend_direction: :stable,
top_errors_by_impact: []
}
end
end
|