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 +4 -4
- data/app/controllers/rails_error_dashboard/errors_controller.rb +4 -0
- data/app/views/layouts/rails_error_dashboard.html.erb +20 -2
- data/app/views/rails_error_dashboard/errors/analytics.html.erb +16 -0
- data/app/views/rails_error_dashboard/errors/correlation.html.erb +8 -0
- data/app/views/rails_error_dashboard/errors/platform_comparison.html.erb +3 -0
- data/app/views/rails_error_dashboard/errors/settings.html.erb +575 -0
- data/config/routes.rb +3 -0
- data/lib/rails_error_dashboard/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: b5816698be86b60cae1725d9eb625774a2db53079e03d8e06c1a8c9483c0304a
|
|
4
|
+
data.tar.gz: 9965cd007e9f8edf7a862041c78ac0ca3439903a0fa317505e6a0f92e88e8a42
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 559930e583de1f79fb8bbb7de0365bc7c0f20206f3fbccd9379de80d132965cd244d01f1d44f75ec13950a6dff6a75bab9af5202a06f38d74063d1c9d65a944b
|
|
7
|
+
data.tar.gz: a51dcf0157a89b858019b65e53901f65a430f20e3483d31de521d4846eac29661cb530379f1d0c136c29e0d25e199480e2fbdbd0a98fc5ed42187f20a8057360
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<!DOCTYPE html>
|
|
2
2
|
<html>
|
|
3
3
|
<head>
|
|
4
|
-
<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>
|
|
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>
|
|
@@ -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
|
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
|
+
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
|