rails_error_dashboard 0.1.4 → 0.1.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 02ab8f17c0d721f6b566dcabeb1a8369c140320ae315db0edadfce2bcc9333c5
4
- data.tar.gz: 3190853a7e1e227cf9c7d2013725b7724ea9619bafc781929f8d569f01cf2edd
3
+ metadata.gz: b5816698be86b60cae1725d9eb625774a2db53079e03d8e06c1a8c9483c0304a
4
+ data.tar.gz: 9965cd007e9f8edf7a862041c78ac0ca3439903a0fa317505e6a0f92e88e8a42
5
5
  SHA512:
6
- metadata.gz: 02251a76108671319e1377c85e726b5bfb0ee0fe2f1716d2b778a12d9190a3d293393dce154c4c9ac813a066d5ec8277a8ed8a44b88cb9072cae02528d6fd530
7
- data.tar.gz: 519514fbcc8d96ff28f742faa9b4eeadd00f2f12b07c54db8011cb8177582d92f8e01f16fe7f00f2b53ed620e7c316ef7e6554f524946ebbfdbf590ad70a0105
6
+ metadata.gz: 559930e583de1f79fb8bbb7de0365bc7c0f20206f3fbccd9379de80d132965cd244d01f1d44f75ec13950a6dff6a75bab9af5202a06f38d74063d1c9d65a944b
7
+ data.tar.gz: a51dcf0157a89b858019b65e53901f65a430f20e3483d31de521d4846eac29661cb530379f1d0c136c29e0d25e199480e2fbdbd0a98fc5ed42187f20a8057360
@@ -235,6 +235,10 @@ module RailsErrorDashboard
235
235
  @platform_specific_errors = correlation.platform_specific_errors
236
236
  end
237
237
 
238
+ def settings
239
+ @config = RailsErrorDashboard.configuration
240
+ end
241
+
238
242
  private
239
243
 
240
244
  def calculate_release_comparison
@@ -1,7 +1,7 @@
1
1
  <!DOCTYPE html>
2
2
  <html>
3
3
  <head>
4
- <title>Error Dashboard</title>
4
+ <title><%= Rails.application.class.module_parent_name %> - Error Dashboard</title>
5
5
  <meta name="viewport" content="width=device-width,initial-scale=1">
6
6
  <%= csrf_meta_tags %>
7
7
  <%= csp_meta_tag %>
@@ -736,7 +736,10 @@
736
736
  <i class="bi bi-list fs-4"></i>
737
737
  </button>
738
738
  <a class="navbar-brand" href="<%= root_path %>">
739
- <i class="bi bi-bug-fill"></i> Error Dashboard
739
+ <i class="bi bi-bug-fill"></i>
740
+ <span class="d-none d-sm-inline"><%= Rails.application.class.module_parent_name %></span>
741
+ <span class="d-none d-md-inline text-white-50 mx-2">|</span>
742
+ <span class="d-none d-md-inline">Error Dashboard</span>
740
743
  </a>
741
744
  </div>
742
745
  <div class="d-flex align-items-center gap-3">
@@ -771,6 +774,11 @@
771
774
  <i class="bi bi-graph-up"></i> Analytics
772
775
  <% end %>
773
776
  </li>
777
+ <li class="nav-item">
778
+ <%= link_to settings_path, class: "nav-link #{request.path == settings_path ? 'active' : ''}" do %>
779
+ <i class="bi bi-gear"></i> Settings
780
+ <% end %>
781
+ </li>
774
782
  </ul>
775
783
 
776
784
  <h6 class="mt-4">QUICK FILTERS</h6>
@@ -780,6 +788,16 @@
780
788
  <i class="bi bi-exclamation-circle"></i> Unresolved
781
789
  <% end %>
782
790
  </li>
791
+ <li class="nav-item">
792
+ <%= link_to errors_path(severity: 'critical'), class: "nav-link" do %>
793
+ <i class="bi bi-exclamation-triangle-fill text-danger"></i> Critical
794
+ <% end %>
795
+ </li>
796
+ <li class="nav-item">
797
+ <%= link_to errors_path(priority_level: 'high'), class: "nav-link" do %>
798
+ <i class="bi bi-flag-fill text-warning"></i> High Priority
799
+ <% end %>
800
+ </li>
783
801
  <li class="nav-item">
784
802
  <%= link_to errors_path(platform: 'iOS'), class: "nav-link" do %>
785
803
  <i class="bi bi-phone"></i> iOS Errors
@@ -143,6 +143,14 @@
143
143
  });
144
144
  </script>
145
145
  </div>
146
+ <div class="card-footer bg-white border-top-0">
147
+ <div class="d-flex gap-2 flex-wrap">
148
+ <small class="text-muted me-2">Quick Links:</small>
149
+ <% @errors_by_platform.keys.each do |platform| %>
150
+ <%= link_to platform, errors_path(platform: platform), class: "btn btn-sm btn-outline-secondary" %>
151
+ <% end %>
152
+ </div>
153
+ </div>
146
154
  </div>
147
155
  </div>
148
156
  </div>
@@ -249,6 +257,7 @@
249
257
  <th>User</th>
250
258
  <th>Error Count</th>
251
259
  <th>Percentage</th>
260
+ <th>Actions</th>
252
261
  </tr>
253
262
  </thead>
254
263
  <tbody>
@@ -269,6 +278,9 @@
269
278
  </div>
270
279
  </div>
271
280
  </td>
281
+ <td>
282
+ <%= link_to "View Errors", errors_path(search: email), class: "btn btn-sm btn-outline-primary" %>
283
+ </td>
272
284
  </tr>
273
285
  <% end %>
274
286
  </tbody>
@@ -589,6 +601,7 @@
589
601
  <tr>
590
602
  <th>Severity</th>
591
603
  <th>Average Time to Resolution</th>
604
+ <th>Actions</th>
592
605
  </tr>
593
606
  </thead>
594
607
  <tbody>
@@ -600,6 +613,9 @@
600
613
  </span>
601
614
  </td>
602
615
  <td><strong><%= hours %> hours</strong></td>
616
+ <td>
617
+ <%= link_to "View", errors_path(severity: severity), class: "btn btn-sm btn-outline-primary" %>
618
+ </td>
603
619
  </tr>
604
620
  <% end %>
605
621
  </tbody>
@@ -82,6 +82,7 @@
82
82
  <th>Critical Errors</th>
83
83
  <th>Unique Error Types</th>
84
84
  <th>Platforms</th>
85
+ <th>Actions</th>
85
86
  </tr>
86
87
  </thead>
87
88
  <tbody>
@@ -101,6 +102,9 @@
101
102
  <span class="badge bg-secondary text-capitalize me-1"><%= platform %></span>
102
103
  <% end %>
103
104
  </td>
105
+ <td>
106
+ <%= link_to "View", errors_path(search: release[:version]), class: "btn btn-sm btn-outline-primary" %>
107
+ </td>
104
108
  </tr>
105
109
  <% end %>
106
110
  </tbody>
@@ -218,6 +222,7 @@
218
222
  <th>Different Error Types</th>
219
223
  <th>Total Errors</th>
220
224
  <th>Error Types</th>
225
+ <th>Actions</th>
221
226
  </tr>
222
227
  </thead>
223
228
  <tbody>
@@ -238,6 +243,9 @@
238
243
  <span class="text-muted small">+<%= user_data[:error_types].count - 3 %> more</span>
239
244
  <% end %>
240
245
  </td>
246
+ <td>
247
+ <%= link_to "View", errors_path(search: user_data[:user_email]), class: "btn btn-sm btn-outline-primary" %>
248
+ </td>
241
249
  </tr>
242
250
  <% end %>
243
251
  </tbody>
@@ -79,6 +79,9 @@
79
79
  </div>
80
80
  </div>
81
81
  </div>
82
+ <div class="card-footer bg-white border-top">
83
+ <%= link_to "View #{platform} Errors", errors_path(platform: platform), class: "btn btn-sm btn-outline-primary w-100" %>
84
+ </div>
82
85
  </div>
83
86
  </div>
84
87
  <% end %>
@@ -0,0 +1,575 @@
1
+ <div class="container-fluid py-4">
2
+ <!-- Page Header -->
3
+ <div class="d-flex justify-content-between align-items-center mb-4">
4
+ <h1 class="h3 mb-0">
5
+ <i class="bi bi-gear me-2"></i>
6
+ Configuration Settings
7
+ </h1>
8
+ <div>
9
+ <%= link_to root_path, class: "btn btn-outline-secondary btn-sm" do %>
10
+ <i class="bi bi-arrow-left"></i> Back to Dashboard
11
+ <% end %>
12
+ </div>
13
+ </div>
14
+
15
+ <div class="alert alert-info mb-4">
16
+ <i class="bi bi-info-circle me-2"></i>
17
+ <strong>Read-only view</strong> - These settings are configured in your initializer file:
18
+ <code>config/initializers/rails_error_dashboard.rb</code>
19
+ </div>
20
+
21
+ <!-- Core Features -->
22
+ <div class="card mb-4">
23
+ <div class="card-header bg-primary text-white">
24
+ <h5 class="mb-0">
25
+ <i class="bi bi-shield-check"></i> Core Features
26
+ </h5>
27
+ </div>
28
+ <div class="card-body">
29
+ <div class="row">
30
+ <div class="col-md-6 mb-3">
31
+ <div class="d-flex justify-content-between align-items-center">
32
+ <div>
33
+ <strong>Error Middleware</strong>
34
+ <br><small class="text-muted">Catches unhandled exceptions</small>
35
+ </div>
36
+ <% if @config.enable_middleware %>
37
+ <span class="badge bg-success fs-6">
38
+ <i class="bi bi-check-circle"></i> Enabled
39
+ </span>
40
+ <% else %>
41
+ <span class="badge bg-secondary fs-6">
42
+ <i class="bi bi-x-circle"></i> Disabled
43
+ </span>
44
+ <% end %>
45
+ </div>
46
+ </div>
47
+
48
+ <div class="col-md-6 mb-3">
49
+ <div class="d-flex justify-content-between align-items-center">
50
+ <div>
51
+ <strong>Rails.error Subscriber</strong>
52
+ <br><small class="text-muted">Subscribes to Rails error events</small>
53
+ </div>
54
+ <% if @config.enable_error_subscriber %>
55
+ <span class="badge bg-success fs-6">
56
+ <i class="bi bi-check-circle"></i> Enabled
57
+ </span>
58
+ <% else %>
59
+ <span class="badge bg-secondary fs-6">
60
+ <i class="bi bi-x-circle"></i> Disabled
61
+ </span>
62
+ <% end %>
63
+ </div>
64
+ </div>
65
+
66
+ <div class="col-md-6 mb-3">
67
+ <div class="d-flex justify-content-between align-items-center">
68
+ <div>
69
+ <strong>Authentication</strong>
70
+ <br><small class="text-muted">HTTP Basic Auth protection</small>
71
+ </div>
72
+ <% if @config.require_authentication %>
73
+ <span class="badge bg-success fs-6">
74
+ <i class="bi bi-lock"></i> Required
75
+ </span>
76
+ <% else %>
77
+ <span class="badge bg-warning text-dark fs-6">
78
+ <i class="bi bi-unlock"></i> Disabled
79
+ </span>
80
+ <% end %>
81
+ </div>
82
+ </div>
83
+
84
+ <div class="col-md-6 mb-3">
85
+ <div class="d-flex justify-content-between align-items-center">
86
+ <div>
87
+ <strong>Data Retention</strong>
88
+ <br><small class="text-muted">How long errors are kept</small>
89
+ </div>
90
+ <span class="badge bg-info fs-6">
91
+ <%= @config.retention_days %> days
92
+ </span>
93
+ </div>
94
+ </div>
95
+
96
+ <div class="col-md-6 mb-3">
97
+ <div class="d-flex justify-content-between align-items-center">
98
+ <div>
99
+ <strong>Max Backtrace Lines</strong>
100
+ <br><small class="text-muted">Stack trace depth limit</small>
101
+ </div>
102
+ <span class="badge bg-info fs-6">
103
+ <%= @config.max_backtrace_lines %> lines
104
+ </span>
105
+ </div>
106
+ </div>
107
+
108
+ <div class="col-md-6 mb-3">
109
+ <div class="d-flex justify-content-between align-items-center">
110
+ <div>
111
+ <strong>Sampling Rate</strong>
112
+ <br><small class="text-muted">Percentage of errors captured</small>
113
+ </div>
114
+ <span class="badge bg-info fs-6">
115
+ <%= (@config.sampling_rate * 100).to_i %>%
116
+ </span>
117
+ </div>
118
+ </div>
119
+ </div>
120
+ </div>
121
+ </div>
122
+
123
+ <!-- Performance Settings -->
124
+ <div class="card mb-4">
125
+ <div class="card-header bg-warning text-dark">
126
+ <h5 class="mb-0">
127
+ <i class="bi bi-lightning-charge"></i> Performance Settings
128
+ </h5>
129
+ </div>
130
+ <div class="card-body">
131
+ <div class="row">
132
+ <div class="col-md-6 mb-3">
133
+ <div class="d-flex justify-content-between align-items-center">
134
+ <div>
135
+ <strong>Async Logging</strong>
136
+ <br><small class="text-muted">Background job processing</small>
137
+ </div>
138
+ <% if @config.async_logging %>
139
+ <span class="badge bg-success fs-6">
140
+ <i class="bi bi-check-circle"></i> Enabled
141
+ <% if @config.async_adapter %>
142
+ (<%= @config.async_adapter %>)
143
+ <% end %>
144
+ </span>
145
+ <% else %>
146
+ <span class="badge bg-secondary fs-6">
147
+ <i class="bi bi-x-circle"></i> Disabled
148
+ </span>
149
+ <% end %>
150
+ </div>
151
+ </div>
152
+
153
+ <div class="col-md-6 mb-3">
154
+ <div class="d-flex justify-content-between align-items-center">
155
+ <div>
156
+ <strong>Separate Database</strong>
157
+ <br><small class="text-muted">Dedicated DB for error logs</small>
158
+ </div>
159
+ <% if @config.use_separate_database %>
160
+ <span class="badge bg-success fs-6">
161
+ <i class="bi bi-check-circle"></i> Enabled
162
+ </span>
163
+ <% else %>
164
+ <span class="badge bg-secondary fs-6">
165
+ <i class="bi bi-x-circle"></i> Disabled
166
+ </span>
167
+ <% end %>
168
+ </div>
169
+ </div>
170
+ </div>
171
+ </div>
172
+ </div>
173
+
174
+ <!-- Notification Channels -->
175
+ <div class="card mb-4">
176
+ <div class="card-header bg-info text-white">
177
+ <h5 class="mb-0">
178
+ <i class="bi bi-bell"></i> Notification Channels
179
+ </h5>
180
+ </div>
181
+ <div class="card-body">
182
+ <div class="row">
183
+ <div class="col-md-6 mb-3">
184
+ <div class="d-flex justify-content-between align-items-center">
185
+ <div>
186
+ <strong>Slack</strong>
187
+ <br><small class="text-muted">Real-time notifications</small>
188
+ </div>
189
+ <% if @config.enable_slack_notifications %>
190
+ <span class="badge bg-success fs-6">
191
+ <i class="bi bi-check-circle"></i> Enabled
192
+ </span>
193
+ <% else %>
194
+ <span class="badge bg-secondary fs-6">
195
+ <i class="bi bi-x-circle"></i> Disabled
196
+ </span>
197
+ <% end %>
198
+ </div>
199
+ </div>
200
+
201
+ <div class="col-md-6 mb-3">
202
+ <div class="d-flex justify-content-between align-items-center">
203
+ <div>
204
+ <strong>Email</strong>
205
+ <br><small class="text-muted">Email alerts</small>
206
+ </div>
207
+ <% if @config.enable_email_notifications %>
208
+ <span class="badge bg-success fs-6">
209
+ <i class="bi bi-check-circle"></i> Enabled
210
+ <% if @config.notification_email_recipients&.any? %>
211
+ (<%= @config.notification_email_recipients.count %> recipient<%= @config.notification_email_recipients.count != 1 ? 's' : '' %>)
212
+ <% end %>
213
+ </span>
214
+ <% else %>
215
+ <span class="badge bg-secondary fs-6">
216
+ <i class="bi bi-x-circle"></i> Disabled
217
+ </span>
218
+ <% end %>
219
+ </div>
220
+ </div>
221
+
222
+ <div class="col-md-6 mb-3">
223
+ <div class="d-flex justify-content-between align-items-center">
224
+ <div>
225
+ <strong>Discord</strong>
226
+ <br><small class="text-muted">Discord webhook notifications</small>
227
+ </div>
228
+ <% if @config.enable_discord_notifications %>
229
+ <span class="badge bg-success fs-6">
230
+ <i class="bi bi-check-circle"></i> Enabled
231
+ </span>
232
+ <% else %>
233
+ <span class="badge bg-secondary fs-6">
234
+ <i class="bi bi-x-circle"></i> Disabled
235
+ </span>
236
+ <% end %>
237
+ </div>
238
+ </div>
239
+
240
+ <div class="col-md-6 mb-3">
241
+ <div class="d-flex justify-content-between align-items-center">
242
+ <div>
243
+ <strong>PagerDuty</strong>
244
+ <br><small class="text-muted">Critical error escalation</small>
245
+ </div>
246
+ <% if @config.enable_pagerduty_notifications %>
247
+ <span class="badge bg-success fs-6">
248
+ <i class="bi bi-check-circle"></i> Enabled
249
+ </span>
250
+ <% else %>
251
+ <span class="badge bg-secondary fs-6">
252
+ <i class="bi bi-x-circle"></i> Disabled
253
+ </span>
254
+ <% end %>
255
+ </div>
256
+ </div>
257
+
258
+ <div class="col-md-6 mb-3">
259
+ <div class="d-flex justify-content-between align-items-center">
260
+ <div>
261
+ <strong>Custom Webhooks</strong>
262
+ <br><small class="text-muted">Generic webhook endpoints</small>
263
+ </div>
264
+ <% if @config.enable_webhook_notifications %>
265
+ <span class="badge bg-success fs-6">
266
+ <i class="bi bi-check-circle"></i> Enabled
267
+ <% if @config.webhook_urls&.any? %>
268
+ (<%= @config.webhook_urls.count %> URL<%= @config.webhook_urls.count != 1 ? 's' : '' %>)
269
+ <% end %>
270
+ </span>
271
+ <% else %>
272
+ <span class="badge bg-secondary fs-6">
273
+ <i class="bi bi-x-circle"></i> Disabled
274
+ </span>
275
+ <% end %>
276
+ </div>
277
+ </div>
278
+ </div>
279
+ </div>
280
+ </div>
281
+
282
+ <!-- Advanced Analytics Features -->
283
+ <div class="card mb-4">
284
+ <div class="card-header bg-success text-white">
285
+ <h5 class="mb-0">
286
+ <i class="bi bi-graph-up"></i> Advanced Analytics Features
287
+ </h5>
288
+ </div>
289
+ <div class="card-body">
290
+ <div class="row">
291
+ <div class="col-md-6 mb-3">
292
+ <div class="d-flex justify-content-between align-items-center">
293
+ <div>
294
+ <strong>Similar Errors (Fuzzy Matching)</strong>
295
+ <br><small class="text-muted">Find related errors by similarity</small>
296
+ </div>
297
+ <% if @config.enable_similar_errors %>
298
+ <span class="badge bg-success fs-6">
299
+ <i class="bi bi-check-circle"></i> Enabled
300
+ </span>
301
+ <% else %>
302
+ <span class="badge bg-secondary fs-6">
303
+ <i class="bi bi-x-circle"></i> Disabled
304
+ </span>
305
+ <% end %>
306
+ </div>
307
+ </div>
308
+
309
+ <div class="col-md-6 mb-3">
310
+ <div class="d-flex justify-content-between align-items-center">
311
+ <div>
312
+ <strong>Co-occurring Errors</strong>
313
+ <br><small class="text-muted">Errors happening together</small>
314
+ </div>
315
+ <% if @config.enable_co_occurring_errors %>
316
+ <span class="badge bg-success fs-6">
317
+ <i class="bi bi-check-circle"></i> Enabled
318
+ </span>
319
+ <% else %>
320
+ <span class="badge bg-secondary fs-6">
321
+ <i class="bi bi-x-circle"></i> Disabled
322
+ </span>
323
+ <% end %>
324
+ </div>
325
+ </div>
326
+
327
+ <div class="col-md-6 mb-3">
328
+ <div class="d-flex justify-content-between align-items-center">
329
+ <div>
330
+ <strong>Error Cascades</strong>
331
+ <br><small class="text-muted">Parent→child error chains</small>
332
+ </div>
333
+ <% if @config.enable_error_cascades %>
334
+ <span class="badge bg-success fs-6">
335
+ <i class="bi bi-check-circle"></i> Enabled
336
+ </span>
337
+ <% else %>
338
+ <span class="badge bg-secondary fs-6">
339
+ <i class="bi bi-x-circle"></i> Disabled
340
+ </span>
341
+ <% end %>
342
+ </div>
343
+ </div>
344
+
345
+ <div class="col-md-6 mb-3">
346
+ <div class="d-flex justify-content-between align-items-center">
347
+ <div>
348
+ <strong>Error Correlation</strong>
349
+ <br><small class="text-muted">Version/user/time analysis</small>
350
+ </div>
351
+ <% if @config.enable_error_correlation %>
352
+ <span class="badge bg-success fs-6">
353
+ <i class="bi bi-check-circle"></i> Enabled
354
+ </span>
355
+ <% else %>
356
+ <span class="badge bg-secondary fs-6">
357
+ <i class="bi bi-x-circle"></i> Disabled
358
+ </span>
359
+ <% end %>
360
+ </div>
361
+ </div>
362
+
363
+ <div class="col-md-6 mb-3">
364
+ <div class="d-flex justify-content-between align-items-center">
365
+ <div>
366
+ <strong>Platform Comparison</strong>
367
+ <br><small class="text-muted">iOS vs Android analytics</small>
368
+ </div>
369
+ <% if @config.enable_platform_comparison %>
370
+ <span class="badge bg-success fs-6">
371
+ <i class="bi bi-check-circle"></i> Enabled
372
+ </span>
373
+ <% else %>
374
+ <span class="badge bg-secondary fs-6">
375
+ <i class="bi bi-x-circle"></i> Disabled
376
+ </span>
377
+ <% end %>
378
+ </div>
379
+ </div>
380
+
381
+ <div class="col-md-6 mb-3">
382
+ <div class="d-flex justify-content-between align-items-center">
383
+ <div>
384
+ <strong>Occurrence Patterns</strong>
385
+ <br><small class="text-muted">Cyclical/burst detection</small>
386
+ </div>
387
+ <% if @config.enable_occurrence_patterns %>
388
+ <span class="badge bg-success fs-6">
389
+ <i class="bi bi-check-circle"></i> Enabled
390
+ </span>
391
+ <% else %>
392
+ <span class="badge bg-secondary fs-6">
393
+ <i class="bi bi-x-circle"></i> Disabled
394
+ </span>
395
+ <% end %>
396
+ </div>
397
+ </div>
398
+
399
+ <div class="col-md-6 mb-3">
400
+ <div class="d-flex justify-content-between align-items-center">
401
+ <div>
402
+ <strong>Baseline Alerts</strong>
403
+ <br><small class="text-muted">Anomaly detection</small>
404
+ </div>
405
+ <% if @config.enable_baseline_alerts %>
406
+ <span class="badge bg-success fs-6">
407
+ <i class="bi bi-check-circle"></i> Enabled
408
+ (± <%= @config.baseline_alert_threshold_std_devs %>σ)
409
+ </span>
410
+ <% else %>
411
+ <span class="badge bg-secondary fs-6">
412
+ <i class="bi bi-x-circle"></i> Disabled
413
+ </span>
414
+ <% end %>
415
+ </div>
416
+ </div>
417
+ </div>
418
+ </div>
419
+ </div>
420
+
421
+ <!-- Active Plugins -->
422
+ <div class="card mb-4">
423
+ <div class="card-header bg-dark text-white">
424
+ <h5 class="mb-0">
425
+ <i class="bi bi-puzzle"></i> Active Plugins
426
+ </h5>
427
+ </div>
428
+ <div class="card-body">
429
+ <% if RailsErrorDashboard::PluginRegistry.any? %>
430
+ <div class="table-responsive">
431
+ <table class="table table-hover">
432
+ <thead>
433
+ <tr>
434
+ <th>Plugin Name</th>
435
+ <th>Version</th>
436
+ <th>Description</th>
437
+ <th>Status</th>
438
+ </tr>
439
+ </thead>
440
+ <tbody>
441
+ <% RailsErrorDashboard::PluginRegistry.info.each do |plugin| %>
442
+ <tr>
443
+ <td><strong><%= plugin[:name] %></strong></td>
444
+ <td><code><%= plugin[:version] %></code></td>
445
+ <td><%= plugin[:description] %></td>
446
+ <td>
447
+ <% if plugin[:enabled] %>
448
+ <span class="badge bg-success">
449
+ <i class="bi bi-check-circle"></i> Active
450
+ </span>
451
+ <% else %>
452
+ <span class="badge bg-secondary">
453
+ <i class="bi bi-pause-circle"></i> Inactive
454
+ </span>
455
+ <% end %>
456
+ </td>
457
+ </tr>
458
+ <% end %>
459
+ </tbody>
460
+ </table>
461
+ </div>
462
+ <% else %>
463
+ <div class="alert alert-secondary mb-0">
464
+ <i class="bi bi-info-circle me-2"></i>
465
+ No plugins are currently registered. You can create custom plugins to extend functionality.
466
+ </div>
467
+ <% end %>
468
+ </div>
469
+ </div>
470
+
471
+ <!-- Enhanced Metrics -->
472
+ <% if @config.app_version || @config.git_sha || @config.total_users_for_impact %>
473
+ <div class="card mb-4">
474
+ <div class="card-header bg-secondary text-white">
475
+ <h5 class="mb-0">
476
+ <i class="bi bi-speedometer"></i> Enhanced Metrics
477
+ </h5>
478
+ </div>
479
+ <div class="card-body">
480
+ <div class="row">
481
+ <% if @config.app_version %>
482
+ <div class="col-md-4 mb-3">
483
+ <div class="d-flex justify-content-between align-items-center">
484
+ <div>
485
+ <strong>App Version</strong>
486
+ <br><small class="text-muted">Current application version</small>
487
+ </div>
488
+ <code class="fs-6"><%= @config.app_version %></code>
489
+ </div>
490
+ </div>
491
+ <% end %>
492
+
493
+ <% if @config.git_sha %>
494
+ <div class="col-md-4 mb-3">
495
+ <div class="d-flex justify-content-between align-items-center">
496
+ <div>
497
+ <strong>Git SHA</strong>
498
+ <br><small class="text-muted">Deployed commit</small>
499
+ </div>
500
+ <code class="fs-6"><%= @config.git_sha[0..7] %></code>
501
+ </div>
502
+ </div>
503
+ <% end %>
504
+
505
+ <% if @config.total_users_for_impact %>
506
+ <div class="col-md-4 mb-3">
507
+ <div class="d-flex justify-content-between align-items-center">
508
+ <div>
509
+ <strong>Total Users</strong>
510
+ <br><small class="text-muted">For impact % calculation</small>
511
+ </div>
512
+ <span class="badge bg-info fs-6"><%= @config.total_users_for_impact %></span>
513
+ </div>
514
+ </div>
515
+ <% end %>
516
+ </div>
517
+ </div>
518
+ </div>
519
+ <% end %>
520
+
521
+ <!-- Internal Logging -->
522
+ <div class="card mb-4">
523
+ <div class="card-header bg-light">
524
+ <h5 class="mb-0">
525
+ <i class="bi bi-terminal"></i> Internal Logging
526
+ </h5>
527
+ </div>
528
+ <div class="card-body">
529
+ <div class="row">
530
+ <div class="col-md-6 mb-3">
531
+ <div class="d-flex justify-content-between align-items-center">
532
+ <div>
533
+ <strong>Internal Logging</strong>
534
+ <br><small class="text-muted">Gem debugging output</small>
535
+ </div>
536
+ <% if @config.enable_internal_logging %>
537
+ <span class="badge bg-warning text-dark fs-6">
538
+ <i class="bi bi-check-circle"></i> Enabled
539
+ </span>
540
+ <% else %>
541
+ <span class="badge bg-secondary fs-6">
542
+ <i class="bi bi-x-circle"></i> Disabled
543
+ </span>
544
+ <% end %>
545
+ </div>
546
+ </div>
547
+
548
+ <div class="col-md-6 mb-3">
549
+ <div class="d-flex justify-content-between align-items-center">
550
+ <div>
551
+ <strong>Log Level</strong>
552
+ <br><small class="text-muted">Verbosity level</small>
553
+ </div>
554
+ <span class="badge bg-info fs-6">
555
+ <%= @config.log_level.to_s.upcase %>
556
+ </span>
557
+ </div>
558
+ </div>
559
+ </div>
560
+ </div>
561
+ </div>
562
+
563
+ <!-- Help Text -->
564
+ <div class="alert alert-light border">
565
+ <h6 class="alert-heading">
566
+ <i class="bi bi-question-circle me-2"></i>
567
+ Need to change these settings?
568
+ </h6>
569
+ <p class="mb-0">
570
+ Edit your configuration in <code>config/initializers/rails_error_dashboard.rb</code> and restart your application.
571
+ <br>
572
+ See the <a href="https://github.com/AnjanJ/rails_error_dashboard" target="_blank" class="alert-link">documentation</a> for more information.
573
+ </p>
574
+ </div>
575
+ </div>
data/config/routes.rb CHANGED
@@ -4,6 +4,9 @@ RailsErrorDashboard::Engine.routes.draw do
4
4
  # Dashboard overview
5
5
  get "overview", to: "errors#overview", as: :overview
6
6
 
7
+ # Settings page
8
+ get "settings", to: "errors#settings", as: :settings
9
+
7
10
  resources :errors, only: [ :index, :show ] do
8
11
  member do
9
12
  post :resolve
@@ -1,3 +1,3 @@
1
1
  module RailsErrorDashboard
2
- VERSION = "0.1.4"
2
+ VERSION = "0.1.5"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_error_dashboard
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anjan Jagirdar
@@ -310,6 +310,7 @@ files:
310
310
  - app/views/rails_error_dashboard/errors/index.html.erb
311
311
  - app/views/rails_error_dashboard/errors/overview.html.erb
312
312
  - app/views/rails_error_dashboard/errors/platform_comparison.html.erb
313
+ - app/views/rails_error_dashboard/errors/settings.html.erb
313
314
  - app/views/rails_error_dashboard/errors/show.html.erb
314
315
  - config/routes.rb
315
316
  - db/migrate/20251224000001_create_rails_error_dashboard_error_logs.rb