rails_error_dashboard 0.5.14 → 0.6.0

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.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/rails_error_dashboard/errors_controller.rb +31 -26
  3. data/app/helpers/rails_error_dashboard/application_helper.rb +12 -5
  4. data/app/views/layouts/rails_error_dashboard.html.erb +1218 -1936
  5. data/app/views/rails_error_dashboard/errors/_breadcrumbs_group.html.erb +4 -4
  6. data/app/views/rails_error_dashboard/errors/_co_occurring_errors.html.erb +1 -1
  7. data/app/views/rails_error_dashboard/errors/_discussion.html.erb +3 -3
  8. data/app/views/rails_error_dashboard/errors/_error_cascades.html.erb +1 -1
  9. data/app/views/rails_error_dashboard/errors/_error_row.html.erb +69 -79
  10. data/app/views/rails_error_dashboard/errors/_instance_variables.html.erb +1 -1
  11. data/app/views/rails_error_dashboard/errors/_issue_section.html.erb +1 -1
  12. data/app/views/rails_error_dashboard/errors/_local_variables.html.erb +1 -1
  13. data/app/views/rails_error_dashboard/errors/_pattern_insights.html.erb +2 -2
  14. data/app/views/rails_error_dashboard/errors/_request_context.html.erb +1 -1
  15. data/app/views/rails_error_dashboard/errors/_sidebar_metadata.html.erb +1 -1
  16. data/app/views/rails_error_dashboard/errors/_similar_errors.html.erb +1 -1
  17. data/app/views/rails_error_dashboard/errors/_timeline.html.erb +1 -1
  18. data/app/views/rails_error_dashboard/errors/actioncable_health_summary.html.erb +6 -6
  19. data/app/views/rails_error_dashboard/errors/activestorage_health_summary.html.erb +6 -6
  20. data/app/views/rails_error_dashboard/errors/analytics.html.erb +34 -50
  21. data/app/views/rails_error_dashboard/errors/cache_health_summary.html.erb +7 -7
  22. data/app/views/rails_error_dashboard/errors/correlation.html.erb +11 -11
  23. data/app/views/rails_error_dashboard/errors/database_health_summary.html.erb +114 -172
  24. data/app/views/rails_error_dashboard/errors/deprecations.html.erb +7 -7
  25. data/app/views/rails_error_dashboard/errors/diagnostic_dumps.html.erb +6 -6
  26. data/app/views/rails_error_dashboard/errors/index.html.erb +294 -622
  27. data/app/views/rails_error_dashboard/errors/job_health_summary.html.erb +7 -7
  28. data/app/views/rails_error_dashboard/errors/n_plus_one_summary.html.erb +7 -7
  29. data/app/views/rails_error_dashboard/errors/overview.html.erb +192 -363
  30. data/app/views/rails_error_dashboard/errors/platform_comparison.html.erb +11 -11
  31. data/app/views/rails_error_dashboard/errors/rack_attack_summary.html.erb +6 -6
  32. data/app/views/rails_error_dashboard/errors/releases.html.erb +6 -6
  33. data/app/views/rails_error_dashboard/errors/settings.html.erb +32 -52
  34. data/app/views/rails_error_dashboard/errors/show.html.erb +200 -203
  35. data/app/views/rails_error_dashboard/errors/swallowed_exceptions.html.erb +7 -7
  36. data/app/views/rails_error_dashboard/errors/user_impact.html.erb +6 -6
  37. data/lib/rails_error_dashboard/commands/log_error.rb +14 -3
  38. data/lib/rails_error_dashboard/configuration.rb +6 -0
  39. data/lib/rails_error_dashboard/error_reporter.rb +11 -1
  40. data/lib/rails_error_dashboard/services/backtrace_parser.rb +10 -4
  41. data/lib/rails_error_dashboard/services/backtrace_processor.rb +44 -2
  42. data/lib/rails_error_dashboard/services/error_broadcaster.rb +19 -4
  43. data/lib/rails_error_dashboard/services/notification_helpers.rb +9 -2
  44. data/lib/rails_error_dashboard/subscribers/issue_tracker_subscriber.rb +21 -0
  45. data/lib/rails_error_dashboard/version.rb +1 -1
  46. metadata +2 -2
@@ -1,8 +1,8 @@
1
1
  <% content_for :page_title, "Platform Comparison" %>
2
2
 
3
- <div class="container-fluid py-4">
3
+ <div>
4
4
  <div class="d-flex justify-content-between align-items-center mb-4">
5
- <h1 class="h3 mb-0">
5
+ <h1 style="font-size: 20px; font-weight: 700; margin: 0;">
6
6
  <i class="bi bi-phone me-2"></i>
7
7
  Platform Health Comparison
8
8
  </h1>
@@ -21,9 +21,9 @@
21
21
  </div>
22
22
 
23
23
  <% if @platform_health.empty? %>
24
- <div class="text-center py-5">
24
+ <div class="red-empty-state">
25
25
  <i class="bi bi-phone display-1 text-muted mb-3"></i>
26
- <h4 class="text-muted">No Platform Data Available</h4>
26
+ <div class="red-empty-state-title">No Platform Data Available</div>
27
27
  <p class="text-muted">
28
28
  No errors were logged for the selected time period (<%= @days %> days).
29
29
  </p>
@@ -87,7 +87,7 @@
87
87
  </div>
88
88
  </div>
89
89
  </div>
90
- <div class="card-footer bg-white border-top">
90
+ <div class="card-footer border-top">
91
91
  <%= link_to "View #{platform} Errors", errors_path(platform: platform), class: "btn btn-sm btn-outline-primary w-100" %>
92
92
  </div>
93
93
  </div>
@@ -97,7 +97,7 @@
97
97
 
98
98
  <!-- Error Rate Comparison Chart -->
99
99
  <div class="card mb-4">
100
- <div class="card-header bg-white">
100
+ <div class="card-header">
101
101
  <h5 class="mb-0">
102
102
  <i class="bi bi-bar-chart me-2"></i>
103
103
  Error Rate by Platform
@@ -110,7 +110,7 @@
110
110
 
111
111
  <!-- Daily Trend Charts -->
112
112
  <div class="card mb-4">
113
- <div class="card-header bg-white">
113
+ <div class="card-header">
114
114
  <h5 class="mb-0">
115
115
  <i class="bi bi-graph-up me-2"></i>
116
116
  Daily Error Trends
@@ -125,7 +125,7 @@
125
125
  <!-- Severity Distribution -->
126
126
  <div class="col-lg-6 mb-4">
127
127
  <div class="card h-100">
128
- <div class="card-header bg-white">
128
+ <div class="card-header">
129
129
  <h5 class="mb-0">
130
130
  <i class="bi bi-exclamation-triangle me-2"></i>
131
131
  Severity Distribution
@@ -189,7 +189,7 @@
189
189
  <!-- Resolution Time Comparison -->
190
190
  <div class="col-lg-6 mb-4">
191
191
  <div class="card h-100">
192
- <div class="card-header bg-white">
192
+ <div class="card-header">
193
193
  <h5 class="mb-0">
194
194
  <i class="bi bi-clock-history me-2"></i>
195
195
  Average Resolution Time
@@ -205,7 +205,7 @@
205
205
  <!-- Cross-Platform Errors -->
206
206
  <% if @cross_platform_errors.any? %>
207
207
  <div class="card mb-4">
208
- <div class="card-header bg-white">
208
+ <div class="card-header">
209
209
  <h5 class="mb-0">
210
210
  <i class="bi bi-layers me-2"></i>
211
211
  Cross-Platform Errors
@@ -256,7 +256,7 @@
256
256
  <% @top_errors_by_platform.each do |platform, errors| %>
257
257
  <div class="col-lg-6 mb-4">
258
258
  <div class="card h-100">
259
- <div class="card-header bg-white">
259
+ <div class="card-header">
260
260
  <h5 class="mb-0 text-capitalize">
261
261
  <i class="bi bi-bug me-2"></i>
262
262
  Top Errors - <%= platform || 'Unknown' %>
@@ -1,8 +1,8 @@
1
1
  <% content_for :page_title, "Rate Limit Events" %>
2
2
 
3
- <div class="container-fluid py-4">
3
+ <div>
4
4
  <div class="d-flex justify-content-between align-items-center mb-4">
5
- <h1 class="h3 mb-0">
5
+ <h1 style="font-size: 20px; font-weight: 700; margin: 0;">
6
6
  <i class="bi bi-shield-exclamation me-2"></i>
7
7
  Rate Limit Events
8
8
  </h1>
@@ -21,9 +21,9 @@
21
21
  </div>
22
22
 
23
23
  <% if @unique_rules == 0 %>
24
- <div class="text-center py-5">
24
+ <div class="red-empty-state">
25
25
  <i class="bi bi-shield-check display-1 text-success mb-3"></i>
26
- <h4 class="text-muted">No Rate Limit Events Found</h4>
26
+ <div class="red-empty-state-title">No Rate Limit Events Found</div>
27
27
  <p class="text-muted">
28
28
  No Rack Attack throttle, blocklist, or track events were detected in error breadcrumbs over the last <%= @days %> days.
29
29
  </p>
@@ -68,7 +68,7 @@
68
68
  </div>
69
69
 
70
70
  <div class="card mb-4">
71
- <div class="card-header bg-white d-flex justify-content-between align-items-center">
71
+ <div class="card-header d-flex justify-content-between align-items-center">
72
72
  <h5 class="mb-0">
73
73
  <i class="bi bi-shield-exclamation text-warning me-2"></i>
74
74
  Rate Limit Events by Rule
@@ -113,7 +113,7 @@
113
113
  </table>
114
114
  </div>
115
115
  </div>
116
- <div class="card-footer bg-white border-top d-flex justify-content-between align-items-center">
116
+ <div class="card-footer border-top d-flex justify-content-between align-items-center">
117
117
  <div>
118
118
  <small class="text-muted">
119
119
  <i class="bi bi-lightbulb text-warning"></i> Rate limit events are captured when they coincide with errors. High counts may indicate abuse or misconfigured rules.
@@ -1,8 +1,8 @@
1
1
  <% content_for :page_title, "Releases" %>
2
2
 
3
- <div class="container-fluid py-4">
3
+ <div>
4
4
  <div class="d-flex justify-content-between align-items-center mb-4">
5
- <h1 class="h3 mb-0">
5
+ <h1 style="font-size: 20px; font-weight: 700; margin: 0;">
6
6
  <i class="bi bi-rocket-takeoff me-2"></i>
7
7
  Releases
8
8
  </h1>
@@ -21,9 +21,9 @@
21
21
  </div>
22
22
 
23
23
  <% if @releases.empty? %>
24
- <div class="text-center py-5">
24
+ <div class="red-empty-state">
25
25
  <i class="bi bi-rocket-takeoff display-1 text-muted mb-3"></i>
26
- <h4 class="text-muted">No Release Data Found</h4>
26
+ <div class="red-empty-state-title">No Release Data Found</div>
27
27
  <p class="text-muted">
28
28
  No version data was detected in errors over the last <%= @days %> days.
29
29
  </p>
@@ -158,7 +158,7 @@
158
158
 
159
159
  <!-- Release Timeline Table -->
160
160
  <div class="card mb-4">
161
- <div class="card-header bg-white d-flex justify-content-between align-items-center">
161
+ <div class="card-header d-flex justify-content-between align-items-center">
162
162
  <h5 class="mb-0">
163
163
  <i class="bi bi-clock-history text-primary me-2"></i>
164
164
  Release Timeline
@@ -267,7 +267,7 @@
267
267
  </table>
268
268
  </div>
269
269
  </div>
270
- <div class="card-footer bg-white border-top d-flex justify-content-between align-items-center">
270
+ <div class="card-footer border-top d-flex justify-content-between align-items-center">
271
271
  <small class="text-muted">
272
272
  <i class="bi bi-info-circle"></i>
273
273
  Stability: <span class="badge bg-success">Green</span> &le; avg errors,
@@ -168,68 +168,48 @@
168
168
  }
169
169
  %>
170
170
 
171
- <div class="container-fluid py-4">
172
- <!-- Page Header -->
173
- <div class="d-flex justify-content-between align-items-center mb-4">
174
- <h1 class="h3 mb-0">
175
- <i class="bi bi-gear me-2"></i>
176
- Configuration Settings
177
- </h1>
178
- <div>
179
- <%= link_to root_path, class: "btn btn-outline-secondary btn-sm" do %>
180
- <i class="bi bi-arrow-left"></i> Back to Dashboard
181
- <% end %>
182
- </div>
183
- </div>
171
+ <div>
172
+ <h1 style="font-size: 20px; font-weight: 700; margin-bottom: var(--space-4);">Settings</h1>
184
173
 
185
- <div class="alert alert-info mb-4">
186
- <i class="bi bi-info-circle me-2"></i>
187
- <strong>Read-only view</strong> - These settings are configured in your initializer file:
188
- <code>config/initializers/rails_error_dashboard.rb</code>
189
- </div>
174
+ <p style="font-size: 13px; color: var(--text-tertiary); margin-bottom: var(--space-6);">
175
+ Read-only view of current configuration. Edit via <code>config/initializers/rails_error_dashboard.rb</code> or environment variables.
176
+ </p>
190
177
 
191
178
  <!-- Dynamically render setting groups -->
192
179
  <% setting_groups.each do |group_name, group_config| %>
193
- <div class="card mb-4">
194
- <div class="card-header bg-<%= group_config[:color] %> <%= group_config[:color] == 'light' ? 'text-dark' : 'text-white' %>">
195
- <h5 class="mb-0">
196
- <i class="<%= group_config[:icon] %>"></i> <%= group_name %>
197
- </h5>
198
- </div>
199
- <div class="card-body">
200
- <div class="row">
201
- <% group_config[:settings].each do |setting_key, setting_meta| %>
202
- <%
203
- # Check if this setting should be displayed based on show_if condition
204
- show_if_key = setting_meta[:show_if]
205
- should_show = show_if_key.nil? || @config.send(show_if_key)
206
- next unless should_show
207
-
208
- value = @config.send(setting_meta[:method] || setting_key)
209
- %>
210
- <div class="col-md-6 mb-3">
211
- <div class="d-flex justify-content-between align-items-center">
212
- <div>
213
- <strong><%= setting_meta[:label] %></strong>
214
- <br><small class="text-muted"><%= setting_meta[:description] %></small>
215
- </div>
216
- <div class="text-end">
217
- <%= render partial: 'rails_error_dashboard/errors/settings/value_badge',
218
- locals: { value: value, type: setting_meta[:type], unit: setting_meta[:unit] } %>
219
- </div>
220
- </div>
221
- </div>
222
- <% end %>
180
+ <div class="card" style="margin-bottom: var(--space-4);">
181
+ <button onclick="var b = this.nextElementSibling; b.style.display = b.style.display === 'none' ? 'block' : 'none'; var chev = this.querySelector('.chev'); if(chev) chev.className = b.style.display === 'none' ? 'bi bi-chevron-down chev' : 'bi bi-chevron-up chev';" style="display: flex; align-items: center; justify-content: space-between; width: 100%; padding: var(--space-4) var(--space-6); background: none; border: none; cursor: pointer; border-bottom: 1px solid var(--border-primary);">
182
+ <span style="font-size: 14px; font-weight: 600; color: var(--text-primary);"><i class="<%= group_config[:icon] %>" style="margin-right: 6px;"></i> <%= group_name %></span>
183
+ <div style="display: flex; align-items: center; gap: 8px;">
184
+ <span style="font-size: 11px; color: var(--text-tertiary);"><%= group_config[:settings].size %> options</span>
185
+ <i class="bi bi-chevron-up chev" style="font-size: 12px; color: var(--text-tertiary);"></i>
223
186
  </div>
187
+ </button>
188
+ <div>
189
+ <% group_config[:settings].each do |setting_key, setting_meta| %>
190
+ <%
191
+ show_if_key = setting_meta[:show_if]
192
+ should_show = show_if_key.nil? || @config.send(show_if_key)
193
+ next unless should_show
194
+ value = @config.send(setting_meta[:method] || setting_key)
195
+ %>
196
+ <div style="display: flex; align-items: center; gap: var(--space-4); padding: var(--space-3) var(--space-6); border-bottom: 1px solid var(--border-primary); font-size: 13px;">
197
+ <span style="font-family: var(--font-mono); font-size: 12px; color: var(--accent); font-weight: 500; width: 240px; flex-shrink: 0;"><%= setting_key %></span>
198
+ <span style="font-family: var(--font-mono); font-size: 12px; color: var(--text-primary); font-weight: 500; width: 180px; flex-shrink: 0;">
199
+ <%= render partial: 'rails_error_dashboard/errors/settings/value_badge',
200
+ locals: { value: value, type: setting_meta[:type], unit: setting_meta[:unit] } %>
201
+ </span>
202
+ <span style="color: var(--text-tertiary); font-size: 12px;"><%= setting_meta[:description] %></span>
203
+ </div>
204
+ <% end %>
224
205
  </div>
225
206
  </div>
226
207
  <% end %>
227
208
 
228
209
  <!-- Active Plugins -->
229
- <div class="card mb-4">
230
- <div class="card-header bg-dark text-white">
231
- <h5 class="mb-0">
232
- <i class="bi bi-puzzle"></i> Active Plugins
210
+ <div class="card" style="margin-bottom: var(--space-4);">
211
+ <div style="padding: var(--space-4) var(--space-6); border-bottom: 1px solid var(--border-primary);">
212
+ <span style="font-size: 14px; font-weight: 600; color: var(--text-primary);"><i class="bi bi-puzzle" style="margin-right: 6px;"></i> Active Plugins</span>
233
213
  </h5>
234
214
  </div>
235
215
  <div class="card-body">