rails_error_dashboard 0.5.15 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/controllers/rails_error_dashboard/application_controller.rb +37 -12
- data/app/controllers/rails_error_dashboard/errors_controller.rb +48 -26
- data/app/helpers/rails_error_dashboard/application_helper.rb +12 -5
- data/app/views/layouts/rails_error_dashboard.html.erb +1219 -1927
- data/app/views/rails_error_dashboard/errors/_breadcrumbs_group.html.erb +4 -4
- data/app/views/rails_error_dashboard/errors/_co_occurring_errors.html.erb +1 -1
- data/app/views/rails_error_dashboard/errors/_discussion.html.erb +3 -3
- data/app/views/rails_error_dashboard/errors/_error_cascades.html.erb +1 -1
- data/app/views/rails_error_dashboard/errors/_error_row.html.erb +69 -79
- data/app/views/rails_error_dashboard/errors/_instance_variables.html.erb +1 -1
- data/app/views/rails_error_dashboard/errors/_issue_section.html.erb +1 -1
- data/app/views/rails_error_dashboard/errors/_local_variables.html.erb +1 -1
- data/app/views/rails_error_dashboard/errors/_pattern_insights.html.erb +2 -2
- data/app/views/rails_error_dashboard/errors/_request_context.html.erb +1 -1
- data/app/views/rails_error_dashboard/errors/_sidebar_metadata.html.erb +1 -1
- data/app/views/rails_error_dashboard/errors/_similar_errors.html.erb +1 -1
- data/app/views/rails_error_dashboard/errors/_timeline.html.erb +4 -4
- data/app/views/rails_error_dashboard/errors/actioncable_health_summary.html.erb +6 -6
- data/app/views/rails_error_dashboard/errors/activestorage_health_summary.html.erb +6 -6
- data/app/views/rails_error_dashboard/errors/analytics.html.erb +34 -50
- data/app/views/rails_error_dashboard/errors/cache_health_summary.html.erb +7 -7
- data/app/views/rails_error_dashboard/errors/correlation.html.erb +11 -11
- data/app/views/rails_error_dashboard/errors/database_health_summary.html.erb +114 -172
- data/app/views/rails_error_dashboard/errors/deprecations.html.erb +7 -7
- data/app/views/rails_error_dashboard/errors/diagnostic_dumps.html.erb +6 -6
- data/app/views/rails_error_dashboard/errors/index.html.erb +311 -613
- data/app/views/rails_error_dashboard/errors/job_health_summary.html.erb +7 -7
- data/app/views/rails_error_dashboard/errors/n_plus_one_summary.html.erb +7 -7
- data/app/views/rails_error_dashboard/errors/overview.html.erb +192 -363
- data/app/views/rails_error_dashboard/errors/platform_comparison.html.erb +11 -11
- data/app/views/rails_error_dashboard/errors/rack_attack_summary.html.erb +6 -6
- data/app/views/rails_error_dashboard/errors/releases.html.erb +6 -6
- data/app/views/rails_error_dashboard/errors/settings.html.erb +53 -51
- data/app/views/rails_error_dashboard/errors/show.html.erb +200 -203
- data/app/views/rails_error_dashboard/errors/swallowed_exceptions.html.erb +19 -19
- data/app/views/rails_error_dashboard/errors/user_impact.html.erb +6 -6
- data/config/routes.rb +1 -0
- data/lib/rails_error_dashboard/configuration.rb +6 -0
- data/lib/rails_error_dashboard/services/error_broadcaster.rb +1 -1
- data/lib/rails_error_dashboard/services/system_health_snapshot.rb +1 -1
- data/lib/rails_error_dashboard/test_error.rb +7 -0
- data/lib/rails_error_dashboard/version.rb +1 -1
- data/lib/rails_error_dashboard.rb +1 -0
- metadata +3 -2
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<script>
|
|
4
4
|
// Dynamic chart colors based on theme
|
|
5
5
|
window.getChartColors = function() {
|
|
6
|
-
const isDark = document.
|
|
6
|
+
const isDark = document.documentElement.getAttribute('data-theme') === 'dark';
|
|
7
7
|
return {
|
|
8
8
|
textColor: isDark ? '#cdd6f4' : '#1f2937',
|
|
9
9
|
gridColor: isDark ? 'rgba(88, 91, 112, 0.2)' : 'rgba(0, 0, 0, 0.1)'
|
|
@@ -32,53 +32,37 @@
|
|
|
32
32
|
};
|
|
33
33
|
</script>
|
|
34
34
|
|
|
35
|
-
<div
|
|
36
|
-
<div
|
|
37
|
-
<
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
['Last 90 Days', 90]
|
|
46
|
-
], @days), class: "form-select", onchange: "this.form.submit()" %>
|
|
47
|
-
<% end %>
|
|
48
|
-
</div>
|
|
35
|
+
<div>
|
|
36
|
+
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: var(--space-4);">
|
|
37
|
+
<h1 style="font-size: 20px; font-weight: 700; margin: 0;">Analytics</h1>
|
|
38
|
+
</div>
|
|
39
|
+
|
|
40
|
+
<!-- Time range pills -->
|
|
41
|
+
<div style="display: flex; gap: 6px; margin-bottom: var(--space-6);">
|
|
42
|
+
<% [['7d', 7], ['14d', 14], ['30d', 30], ['60d', 60], ['90d', 90]].each do |label, days| %>
|
|
43
|
+
<%= link_to analytics_errors_path(days: days), class: "filter-pill #{@days == days ? 'active' : ''}", style: "text-decoration: none;" do %><%= label %><% end %>
|
|
44
|
+
<% end %>
|
|
49
45
|
</div>
|
|
50
46
|
|
|
51
47
|
<!-- Summary Stats -->
|
|
52
|
-
<div
|
|
53
|
-
<div class="
|
|
54
|
-
<div class="
|
|
55
|
-
|
|
56
|
-
<div class="stat-label mb-2 text-primary">Total Errors</div>
|
|
57
|
-
<div class="stat-value text-primary"><%= @error_stats[:total] %></div>
|
|
58
|
-
</div>
|
|
59
|
-
</div>
|
|
48
|
+
<div style="display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--space-4); margin-bottom: var(--space-6);">
|
|
49
|
+
<div class="card stat-card" style="border-left: 3px solid var(--accent); padding: var(--space-5) var(--space-6);">
|
|
50
|
+
<div class="stat-label" style="margin-bottom: 4px;">Total Errors</div>
|
|
51
|
+
<span class="stat-value"><%= @error_stats[:total] %></span>
|
|
60
52
|
</div>
|
|
61
|
-
<div class="
|
|
62
|
-
<div class="
|
|
63
|
-
|
|
64
|
-
<div class="stat-label mb-2 text-danger">Unresolved</div>
|
|
65
|
-
<div class="stat-value text-danger"><%= @error_stats[:unresolved] %></div>
|
|
66
|
-
</div>
|
|
67
|
-
</div>
|
|
53
|
+
<div class="card stat-card" style="border-left: 3px solid var(--status-critical); padding: var(--space-5) var(--space-6);">
|
|
54
|
+
<div class="stat-label" style="margin-bottom: 4px;">Unresolved</div>
|
|
55
|
+
<span class="stat-value" style="color: var(--status-critical);"><%= @error_stats[:unresolved] %></span>
|
|
68
56
|
</div>
|
|
69
|
-
<div class="
|
|
70
|
-
<div class="
|
|
71
|
-
|
|
72
|
-
<div class="stat-label mb-2 text-success">Resolution Rate</div>
|
|
73
|
-
<div class="stat-value text-success"><%= @resolution_rate %>%</div>
|
|
74
|
-
</div>
|
|
75
|
-
</div>
|
|
57
|
+
<div class="card stat-card" style="border-left: 3px solid var(--status-success); padding: var(--space-5) var(--space-6);">
|
|
58
|
+
<div class="stat-label" style="margin-bottom: 4px;">Resolution Rate</div>
|
|
59
|
+
<span class="stat-value" style="color: var(--status-success);"><%= @resolution_rate %>%</span>
|
|
76
60
|
</div>
|
|
77
61
|
</div>
|
|
78
62
|
|
|
79
63
|
<!-- Error Trend Chart -->
|
|
80
64
|
<div class="card mb-4">
|
|
81
|
-
<div class="card-header
|
|
65
|
+
<div class="card-header">
|
|
82
66
|
<h5 class="mb-0"><i class="bi bi-graph-up"></i> Error Trend (Last <%= @days %> Days)</h5>
|
|
83
67
|
</div>
|
|
84
68
|
<div class="card-body">
|
|
@@ -87,7 +71,7 @@
|
|
|
87
71
|
document.addEventListener('DOMContentLoaded', function() {
|
|
88
72
|
const colors = window.getChartColors();
|
|
89
73
|
new Chartkick.LineChart("errors-over-time-chart", <%= raw @errors_over_time.to_json %>, {
|
|
90
|
-
color: "#
|
|
74
|
+
color: "#DC2626",
|
|
91
75
|
curve: false,
|
|
92
76
|
points: true,
|
|
93
77
|
height: "300px",
|
|
@@ -123,7 +107,7 @@
|
|
|
123
107
|
<div class="row g-4 mb-4">
|
|
124
108
|
<div class="col-md-12">
|
|
125
109
|
<div class="card">
|
|
126
|
-
<div class="card-header
|
|
110
|
+
<div class="card-header">
|
|
127
111
|
<h5 class="mb-0"><i class="bi bi-phone"></i> Errors by Platform</h5>
|
|
128
112
|
</div>
|
|
129
113
|
<div class="card-body">
|
|
@@ -160,7 +144,7 @@
|
|
|
160
144
|
});
|
|
161
145
|
</script>
|
|
162
146
|
</div>
|
|
163
|
-
<div class="card-footer
|
|
147
|
+
<div class="card-footer border-top-0">
|
|
164
148
|
<div class="d-flex gap-2 flex-wrap">
|
|
165
149
|
<small class="text-muted me-2">Quick Links:</small>
|
|
166
150
|
<% @errors_by_platform.keys.each do |platform| %>
|
|
@@ -177,7 +161,7 @@
|
|
|
177
161
|
<div class="row g-4 mb-4">
|
|
178
162
|
<div class="col-md-12">
|
|
179
163
|
<div class="card">
|
|
180
|
-
<div class="card-header
|
|
164
|
+
<div class="card-header">
|
|
181
165
|
<h5 class="mb-0"><i class="bi bi-bug"></i> Top 10 Error Types</h5>
|
|
182
166
|
</div>
|
|
183
167
|
<div class="card-body">
|
|
@@ -219,7 +203,7 @@
|
|
|
219
203
|
<div class="row g-4 mb-4">
|
|
220
204
|
<div class="col-md-12">
|
|
221
205
|
<div class="card">
|
|
222
|
-
<div class="card-header
|
|
206
|
+
<div class="card-header">
|
|
223
207
|
<h5 class="mb-0"><i class="bi bi-clock"></i> Errors by Hour of Day</h5>
|
|
224
208
|
</div>
|
|
225
209
|
<div class="card-body">
|
|
@@ -228,7 +212,7 @@
|
|
|
228
212
|
document.addEventListener('DOMContentLoaded', function() {
|
|
229
213
|
const colors = window.getChartColors();
|
|
230
214
|
new Chartkick.ColumnChart("errors-by-hour-chart", <%= raw @errors_by_hour.to_json %>, {
|
|
231
|
-
color: "#
|
|
215
|
+
color: "#DC2626",
|
|
232
216
|
height: "300px",
|
|
233
217
|
xtitle: "Hour",
|
|
234
218
|
ytitle: "Number of Errors",
|
|
@@ -262,7 +246,7 @@
|
|
|
262
246
|
<div class="row g-4 mb-4">
|
|
263
247
|
<div class="col-md-12">
|
|
264
248
|
<div class="card">
|
|
265
|
-
<div class="card-header
|
|
249
|
+
<div class="card-header">
|
|
266
250
|
<h5 class="mb-0"><i class="bi bi-people"></i> Top 10 Affected Users</h5>
|
|
267
251
|
</div>
|
|
268
252
|
<div class="card-body p-0">
|
|
@@ -285,7 +269,7 @@
|
|
|
285
269
|
<div class="row g-4">
|
|
286
270
|
<div class="col-md-12">
|
|
287
271
|
<div class="card">
|
|
288
|
-
<div class="card-header
|
|
272
|
+
<div class="card-header d-flex justify-content-between align-items-center">
|
|
289
273
|
<h5 class="mb-0"><i class="bi bi-list-check"></i> Error Type Breakdown</h5>
|
|
290
274
|
<small class="text-muted">Last <%= @days %> days</small>
|
|
291
275
|
</div>
|
|
@@ -334,7 +318,7 @@
|
|
|
334
318
|
|
|
335
319
|
<!-- Recurring Issues Analysis -->
|
|
336
320
|
<div class="card mb-4">
|
|
337
|
-
<div class="card-header
|
|
321
|
+
<div class="card-header">
|
|
338
322
|
<h5 class="mb-0"><i class="bi bi-arrow-repeat"></i> Recurring Issues</h5>
|
|
339
323
|
</div>
|
|
340
324
|
<div class="card-body">
|
|
@@ -421,7 +405,7 @@
|
|
|
421
405
|
<!-- Errors by Version Chart -->
|
|
422
406
|
<div class="col-md-8">
|
|
423
407
|
<div class="card">
|
|
424
|
-
<div class="card-header
|
|
408
|
+
<div class="card-header">
|
|
425
409
|
<h5 class="mb-0"><i class="bi bi-git"></i> Errors by Release Version</h5>
|
|
426
410
|
</div>
|
|
427
411
|
<div class="card-body">
|
|
@@ -447,7 +431,7 @@
|
|
|
447
431
|
<!-- Release Comparison Card -->
|
|
448
432
|
<div class="col-md-4">
|
|
449
433
|
<div class="card">
|
|
450
|
-
<div class="card-header
|
|
434
|
+
<div class="card-header">
|
|
451
435
|
<h5 class="mb-0">Latest vs Previous</h5>
|
|
452
436
|
</div>
|
|
453
437
|
<div class="card-body">
|
|
@@ -510,7 +494,7 @@
|
|
|
510
494
|
<!-- MTTR (Mean Time to Resolution) -->
|
|
511
495
|
<% if @mttr_stats[:total_resolved] > 0 %>
|
|
512
496
|
<div class="card mb-4">
|
|
513
|
-
<div class="card-header
|
|
497
|
+
<div class="card-header">
|
|
514
498
|
<h5 class="mb-0"><i class="bi bi-clock-history"></i> Resolution Performance (MTTR)</h5>
|
|
515
499
|
</div>
|
|
516
500
|
<div class="card-body">
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
<% content_for :page_title, "Cache Health" %>
|
|
2
2
|
|
|
3
|
-
<div
|
|
3
|
+
<div>
|
|
4
4
|
<div class="d-flex justify-content-between align-items-center mb-4">
|
|
5
|
-
<h1
|
|
5
|
+
<h1 style="font-size: 20px; font-weight: 700; margin: 0;">
|
|
6
6
|
<i class="bi bi-lightning-charge me-2"></i>
|
|
7
7
|
Cache Health
|
|
8
8
|
</h1>
|
|
@@ -21,9 +21,9 @@
|
|
|
21
21
|
</div>
|
|
22
22
|
|
|
23
23
|
<% if @errors_with_cache == 0 %>
|
|
24
|
-
<div class="
|
|
25
|
-
<
|
|
26
|
-
<
|
|
24
|
+
<div class="red-empty-state">
|
|
25
|
+
<div class="red-empty-state-icon" style="background: var(--status-success-bg); color: var(--status-success);"><i class="bi bi-check-lg"></i></div>
|
|
26
|
+
<div class="red-empty-state-title">No Cache Activity Found</div>
|
|
27
27
|
<p class="text-muted">
|
|
28
28
|
No cache operations were detected in error breadcrumbs over the last <%= @days %> days.
|
|
29
29
|
</p>
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
</div>
|
|
74
74
|
|
|
75
75
|
<div class="card mb-4">
|
|
76
|
-
<div class="card-header
|
|
76
|
+
<div class="card-header d-flex justify-content-between align-items-center">
|
|
77
77
|
<h5 class="mb-0">
|
|
78
78
|
<i class="bi bi-lightning-charge text-info me-2"></i>
|
|
79
79
|
Cache Performance by Error
|
|
@@ -123,7 +123,7 @@
|
|
|
123
123
|
</table>
|
|
124
124
|
</div>
|
|
125
125
|
</div>
|
|
126
|
-
<div class="card-footer
|
|
126
|
+
<div class="card-footer border-top d-flex justify-content-between align-items-center">
|
|
127
127
|
<div>
|
|
128
128
|
<small class="text-muted">
|
|
129
129
|
<i class="bi bi-lightbulb text-warning"></i> Low hit rates may indicate cache keys that expire too quickly or aren't being set properly.
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
<% content_for :page_title, "Error Correlation" %>
|
|
2
2
|
|
|
3
|
-
<div
|
|
3
|
+
<div>
|
|
4
4
|
<div class="d-flex justify-content-between align-items-center mb-4">
|
|
5
|
-
<h1
|
|
5
|
+
<h1 style="font-size: 20px; font-weight: 700; margin: 0;">
|
|
6
6
|
<i class="bi bi-diagram-3 me-2"></i>
|
|
7
7
|
Error Correlation Analysis
|
|
8
8
|
</h1>
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
<!-- Period Comparison -->
|
|
24
24
|
<% if @period_comparison.present? %>
|
|
25
25
|
<div class="card mb-4">
|
|
26
|
-
<div class="card-header
|
|
26
|
+
<div class="card-header">
|
|
27
27
|
<h5 class="mb-0">
|
|
28
28
|
<i class="bi bi-graph-up-arrow me-2"></i>
|
|
29
29
|
Trend Analysis
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
<h5 class="mb-0">
|
|
70
70
|
<i class="bi bi-exclamation-triangle-fill me-2"></i>
|
|
71
71
|
Problematic Releases
|
|
72
|
-
<span class="badge
|
|
72
|
+
<span class="badge text-danger"><%= @problematic_releases.count %></span>
|
|
73
73
|
</h5>
|
|
74
74
|
<small>Versions with more than 2x the average error rate</small>
|
|
75
75
|
</div>
|
|
@@ -121,7 +121,7 @@
|
|
|
121
121
|
<% if @errors_by_version.present? && @errors_by_version.any? %>
|
|
122
122
|
<div class="col-lg-6 mb-4">
|
|
123
123
|
<div class="card h-100">
|
|
124
|
-
<div class="card-header
|
|
124
|
+
<div class="card-header">
|
|
125
125
|
<h5 class="mb-0">
|
|
126
126
|
<i class="bi bi-tag me-2"></i>
|
|
127
127
|
Errors by App Version
|
|
@@ -165,7 +165,7 @@
|
|
|
165
165
|
<% if @errors_by_git_sha.present? && @errors_by_git_sha.any? %>
|
|
166
166
|
<div class="col-lg-6 mb-4">
|
|
167
167
|
<div class="card h-100">
|
|
168
|
-
<div class="card-header
|
|
168
|
+
<div class="card-header">
|
|
169
169
|
<h5 class="mb-0">
|
|
170
170
|
<i class="bi bi-git me-2"></i>
|
|
171
171
|
Errors by Git SHA
|
|
@@ -207,7 +207,7 @@
|
|
|
207
207
|
<!-- Multi-Error Users -->
|
|
208
208
|
<% if @multi_error_users.present? && @multi_error_users.any? %>
|
|
209
209
|
<div class="card mb-4">
|
|
210
|
-
<div class="card-header
|
|
210
|
+
<div class="card-header">
|
|
211
211
|
<h5 class="mb-0">
|
|
212
212
|
<i class="bi bi-people-fill me-2"></i>
|
|
213
213
|
Users Affected by Multiple Error Types
|
|
@@ -239,7 +239,7 @@
|
|
|
239
239
|
<!-- Time-Correlated Errors -->
|
|
240
240
|
<% if @time_correlated_errors.present? && @time_correlated_errors.any? %>
|
|
241
241
|
<div class="card mb-4">
|
|
242
|
-
<div class="card-header
|
|
242
|
+
<div class="card-header">
|
|
243
243
|
<h5 class="mb-0">
|
|
244
244
|
<i class="bi bi-clock-history me-2"></i>
|
|
245
245
|
Time-Correlated Errors
|
|
@@ -300,7 +300,7 @@
|
|
|
300
300
|
<!-- Platform-Specific Errors -->
|
|
301
301
|
<% if @platform_specific_errors.present? && @platform_specific_errors.any? %>
|
|
302
302
|
<div class="card mb-4">
|
|
303
|
-
<div class="card-header
|
|
303
|
+
<div class="card-header">
|
|
304
304
|
<h5 class="mb-0">
|
|
305
305
|
<i class="bi bi-phone me-2"></i>
|
|
306
306
|
Platform-Specific vs Cross-Platform Errors
|
|
@@ -344,9 +344,9 @@
|
|
|
344
344
|
|
|
345
345
|
<!-- Empty State -->
|
|
346
346
|
<% if @errors_by_version.blank? && @multi_error_users.blank? && @time_correlated_errors.blank? %>
|
|
347
|
-
<div class="
|
|
347
|
+
<div class="red-empty-state">
|
|
348
348
|
<i class="bi bi-diagram-3 display-1 text-muted mb-3"></i>
|
|
349
|
-
<
|
|
349
|
+
<div class="red-empty-state-title">Not Enough Data for Correlation Analysis</div>
|
|
350
350
|
<p class="text-muted">
|
|
351
351
|
Correlation analysis requires more error data to identify patterns.
|
|
352
352
|
</p>
|