rails_error_dashboard 0.9.1 → 0.11.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.
- checksums.yaml +4 -4
- data/README.md +16 -3
- data/app/controllers/rails_error_dashboard/errors_controller.rb +9 -0
- data/app/helpers/rails_error_dashboard/i18n_helper.rb +26 -0
- data/app/jobs/rails_error_dashboard/rack_attack_flush_job.rb +7 -3
- data/app/mailers/rails_error_dashboard/error_notification_mailer.rb +8 -1
- data/app/models/rails_error_dashboard/error_log.rb +1 -0
- data/app/models/rails_error_dashboard/rack_attack_event.rb +6 -2
- data/app/views/layouts/rails_error_dashboard.html.erb +85 -0
- data/app/views/rails_error_dashboard/error_notification_mailer/error_alert.html.erb +5 -0
- data/app/views/rails_error_dashboard/error_notification_mailer/error_alert.text.erb +1 -0
- data/app/views/rails_error_dashboard/errors/_error_row.html.erb +8 -0
- data/app/views/rails_error_dashboard/errors/_sidebar_metadata.html.erb +9 -0
- data/app/views/rails_error_dashboard/errors/analytics.html.erb +58 -13
- data/app/views/rails_error_dashboard/errors/correlation.html.erb +4 -4
- data/app/views/rails_error_dashboard/errors/database_health_summary.html.erb +1 -1
- data/app/views/rails_error_dashboard/errors/index.html.erb +8 -1
- data/app/views/rails_error_dashboard/errors/overview.html.erb +2 -2
- data/app/views/rails_error_dashboard/errors/platform_comparison.html.erb +1 -1
- data/app/views/rails_error_dashboard/errors/rack_attack_summary.html.erb +36 -3
- data/app/views/rails_error_dashboard/errors/settings.html.erb +2 -0
- data/config/locales/de.yml +22 -0
- data/config/locales/en.yml +24 -0
- data/config/locales/es.yml +21 -0
- data/config/locales/fr.yml +22 -0
- data/config/locales/it.yml +30 -1
- data/config/locales/ja.yml +19 -0
- data/config/locales/pl.yml +22 -0
- data/config/locales/pt-BR.yml +21 -0
- data/config/locales/ru.yml +21 -0
- data/config/locales/uk.yml +21 -0
- data/config/locales/zh-CN.yml +17 -0
- data/db/migrate/20260824000001_add_user_agent_to_rack_attack_events.rb +19 -0
- data/db/migrate/20260826000001_add_environment_to_error_logs.rb +26 -0
- data/lib/generators/rails_error_dashboard/install/install_generator.rb +12 -0
- data/lib/generators/rails_error_dashboard/install/templates/initializer.rb +11 -0
- data/lib/rails_error_dashboard/commands/backfill_environments.rb +58 -0
- data/lib/rails_error_dashboard/commands/find_or_increment_error.rb +55 -29
- data/lib/rails_error_dashboard/commands/flush_rack_attack_events.rb +12 -3
- data/lib/rails_error_dashboard/commands/flush_storm_counts.rb +40 -9
- data/lib/rails_error_dashboard/commands/log_error.rb +17 -0
- data/lib/rails_error_dashboard/configuration.rb +52 -0
- data/lib/rails_error_dashboard/engine.rb +7 -0
- data/lib/rails_error_dashboard/queries/analytics_stats.rb +9 -0
- data/lib/rails_error_dashboard/queries/errors_list.rb +8 -0
- data/lib/rails_error_dashboard/queries/filter_options.rb +9 -0
- data/lib/rails_error_dashboard/queries/rack_attack_summary.rb +31 -5
- data/lib/rails_error_dashboard/services/ai_agent_classifier.rb +154 -0
- data/lib/rails_error_dashboard/services/discord_payload_builder.rb +8 -0
- data/lib/rails_error_dashboard/services/error_broadcaster.rb +6 -2
- data/lib/rails_error_dashboard/services/issue_body_formatter.rb +1 -0
- data/lib/rails_error_dashboard/services/markdown_error_formatter.rb +1 -0
- data/lib/rails_error_dashboard/services/notification_throttler.rb +23 -0
- data/lib/rails_error_dashboard/services/pagerduty_payload_builder.rb +1 -0
- data/lib/rails_error_dashboard/services/rack_attack_tracker.rb +91 -9
- data/lib/rails_error_dashboard/services/slack_payload_builder.rb +9 -0
- data/lib/rails_error_dashboard/services/storm_protection/gate.rb +2 -0
- data/lib/rails_error_dashboard/services/webhook_payload_builder.rb +1 -0
- data/lib/rails_error_dashboard/subscribers/rack_attack_subscriber.rb +40 -2
- data/lib/rails_error_dashboard/version.rb +1 -1
- data/lib/rails_error_dashboard.rb +2 -0
- data/lib/tasks/rails_error_dashboard_tasks.rake +6 -0
- metadata +6 -2
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
</div>
|
|
50
50
|
<% else %>
|
|
51
51
|
<div class="row mb-4">
|
|
52
|
-
<div class="col-md-
|
|
52
|
+
<div class="col-md-3">
|
|
53
53
|
<div class="card text-center">
|
|
54
54
|
<div class="card-body">
|
|
55
55
|
<div class="display-6 text-warning"><%= @unique_rules %></div>
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
</div>
|
|
58
58
|
</div>
|
|
59
59
|
</div>
|
|
60
|
-
<div class="col-md-
|
|
60
|
+
<div class="col-md-3">
|
|
61
61
|
<div class="card text-center">
|
|
62
62
|
<div class="card-body">
|
|
63
63
|
<div class="display-6 text-danger"><%= @total_events %></div>
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
</div>
|
|
66
66
|
</div>
|
|
67
67
|
</div>
|
|
68
|
-
<div class="col-md-
|
|
68
|
+
<div class="col-md-3">
|
|
69
69
|
<div class="card text-center">
|
|
70
70
|
<div class="card-body">
|
|
71
71
|
<div class="display-6 text-info"><%= @unique_ips %></div>
|
|
@@ -73,8 +73,27 @@
|
|
|
73
73
|
</div>
|
|
74
74
|
</div>
|
|
75
75
|
</div>
|
|
76
|
+
<div class="col-md-3">
|
|
77
|
+
<div class="card text-center">
|
|
78
|
+
<div class="card-body">
|
|
79
|
+
<div class="display-6 text-primary"><%= @ai_events %></div>
|
|
80
|
+
<small class="text-muted"><%= red_t("red.errors.rack_attack_page.ai_events") %></small>
|
|
81
|
+
</div>
|
|
82
|
+
</div>
|
|
83
|
+
</div>
|
|
76
84
|
</div>
|
|
77
85
|
|
|
86
|
+
<% if @overflow_count.to_i.positive? %>
|
|
87
|
+
<div class="alert alert-warning d-flex align-items-start" role="alert">
|
|
88
|
+
<i class="bi bi-exclamation-triangle me-2"></i>
|
|
89
|
+
<div>
|
|
90
|
+
<%= red_t("red.errors.rack_attack_page.overflow_notice_html",
|
|
91
|
+
count: @overflow_count,
|
|
92
|
+
option: content_tag(:code, "rack_attack_max_cache_size")) %>
|
|
93
|
+
</div>
|
|
94
|
+
</div>
|
|
95
|
+
<% end %>
|
|
96
|
+
|
|
78
97
|
<div class="card mb-4">
|
|
79
98
|
<div class="card-header d-flex justify-content-between align-items-center">
|
|
80
99
|
<h5 class="mb-0">
|
|
@@ -94,6 +113,7 @@
|
|
|
94
113
|
<th width="80"><%= red_t("red.errors.rack_attack_page.column_count") %></th>
|
|
95
114
|
<th width="80"><%= red_t("red.errors.rack_attack_page.column_ips") %></th>
|
|
96
115
|
<th><%= red_t("red.errors.rack_attack_page.column_top_path") %></th>
|
|
116
|
+
<th width="160"><%= red_t("red.errors.rack_attack_page.column_top_agent") %></th>
|
|
97
117
|
<th width="140"><%= red_t("red.errors.pages.column_last_seen") %></th>
|
|
98
118
|
</tr>
|
|
99
119
|
</thead>
|
|
@@ -115,6 +135,19 @@
|
|
|
115
135
|
<td><strong><%= event[:count] %></strong></td>
|
|
116
136
|
<td><%= event[:unique_ips] %></td>
|
|
117
137
|
<td><code><%= event[:top_path] %></code></td>
|
|
138
|
+
<td>
|
|
139
|
+
<% if event[:top_agent].present? %>
|
|
140
|
+
<%# AI agents are highlighted because "which agent" is the
|
|
141
|
+
question IP counts cannot answer — one agent is a fleet. %>
|
|
142
|
+
<span class="badge <%= event[:ai_count].to_i.positive? ? "bg-primary" : "bg-light text-dark" %>"
|
|
143
|
+
title="<%= event[:top_agent] %>"><%= truncate(event[:top_agent], length: 22) %></span>
|
|
144
|
+
<% if event[:unique_agents].to_i > 1 %>
|
|
145
|
+
<small class="text-muted">+<%= event[:unique_agents].to_i - 1 %></small>
|
|
146
|
+
<% end %>
|
|
147
|
+
<% else %>
|
|
148
|
+
<span class="text-muted">—</span>
|
|
149
|
+
<% end %>
|
|
150
|
+
</td>
|
|
118
151
|
<td><%= local_time_ago(event[:last_seen]) %></td>
|
|
119
152
|
</tr>
|
|
120
153
|
<% end %>
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
color: "info",
|
|
20
20
|
settings: {
|
|
21
21
|
application_name: { type: :application_name },
|
|
22
|
+
environment: { type: :string },
|
|
22
23
|
database: { type: :database_name },
|
|
23
24
|
use_separate_database: { type: :boolean }
|
|
24
25
|
}
|
|
@@ -45,6 +46,7 @@
|
|
|
45
46
|
icon: "bi-bell",
|
|
46
47
|
color: "info",
|
|
47
48
|
settings: {
|
|
49
|
+
notification_environments: { type: :array },
|
|
48
50
|
enable_slack_notifications: { type: :boolean },
|
|
49
51
|
slack_webhook_url: { type: :url, show_if: :enable_slack_notifications },
|
|
50
52
|
enable_email_notifications: { type: :boolean },
|
data/config/locales/de.yml
CHANGED
|
@@ -144,6 +144,7 @@ de:
|
|
|
144
144
|
any: Beliebiger Schweregrad
|
|
145
145
|
all_apps: Alle Anwendungen
|
|
146
146
|
all_platforms: Alle Plattformen
|
|
147
|
+
all_environments: Alle Umgebungen
|
|
147
148
|
all_types: Alle Typen
|
|
148
149
|
all_timeframes: Gesamter Zeitraum
|
|
149
150
|
all_frequencies: Alle Häufigkeiten
|
|
@@ -172,6 +173,7 @@ de:
|
|
|
172
173
|
search: 'Suche: %{value}'
|
|
173
174
|
application: 'Anwendung: %{value}'
|
|
174
175
|
platform: 'Plattform: %{value}'
|
|
176
|
+
environment: 'Umgebung: %{value}'
|
|
175
177
|
error_type: 'Typ: %{value}'
|
|
176
178
|
severity: 'Schweregrad: %{value}'
|
|
177
179
|
timeframe: 'Zeitraum: %{value}'
|
|
@@ -187,6 +189,7 @@ de:
|
|
|
187
189
|
last_seen: Zuletzt gesehen
|
|
188
190
|
application: Anwendung
|
|
189
191
|
platform: Plattform
|
|
192
|
+
environment: Umgebung
|
|
190
193
|
select_all: Alle Fehler auswählen
|
|
191
194
|
batch:
|
|
192
195
|
selected:
|
|
@@ -625,6 +628,7 @@ de:
|
|
|
625
628
|
low: NIEDRIG
|
|
626
629
|
platform: Plattform
|
|
627
630
|
view_all_platform: Alle %{platform}-Fehler ansehen
|
|
631
|
+
view_all_environment: Alle Fehler aus %{environment} ansehen
|
|
628
632
|
user: Benutzer
|
|
629
633
|
view_user_errors: Alle Fehler dieses Benutzers ansehen
|
|
630
634
|
user_id: 'ID: %{id}'
|
|
@@ -833,12 +837,17 @@ de:
|
|
|
833
837
|
unique_rules: Eindeutige Regeln
|
|
834
838
|
total_events: Ereignisse gesamt
|
|
835
839
|
unique_ips: Eindeutige IPs
|
|
840
|
+
ai_events: KI-Agent-Anfragen
|
|
836
841
|
all_title: Rate-Limit-Ereignisse nach Regel
|
|
837
842
|
column_rule: Regel
|
|
838
843
|
column_type: Typ
|
|
839
844
|
column_count: Anzahl
|
|
840
845
|
column_ips: IPs
|
|
841
846
|
column_top_path: Häufigster Pfad
|
|
847
|
+
column_top_agent: Häufigster Agent
|
|
848
|
+
overflow_notice_html: "%{count} Ereignisse konnten keiner Regel zugeordnet
|
|
849
|
+
werden, da der Puffer des Trackers voll war. Erhöhen Sie %{option}, um mehr
|
|
850
|
+
zu erfassen."
|
|
842
851
|
match_type:
|
|
843
852
|
blocklist: blocklist
|
|
844
853
|
throttle: throttle
|
|
@@ -1066,6 +1075,10 @@ de:
|
|
|
1066
1075
|
sampling_rate: Anteil der erfassten Fehler
|
|
1067
1076
|
application_name: Name dieser Anwendung (wird automatisch erkannt, wenn nicht
|
|
1068
1077
|
gesetzt)
|
|
1078
|
+
environment: Umgebung, der Fehler zugeordnet werden (Rails.env, falls nicht
|
|
1079
|
+
gesetzt)
|
|
1080
|
+
notification_environments: Nur für diese Umgebungen benachrichtigen (alle,
|
|
1081
|
+
falls nicht gesetzt)
|
|
1069
1082
|
database: Aktive Datenbank für Fehlerprotokolle
|
|
1070
1083
|
use_separate_database: Eigene Datenbank für Fehlerprotokolle verwenden
|
|
1071
1084
|
user_model: Modellname für Benutzerzuordnungen (wird automatisch erkannt,
|
|
@@ -1233,11 +1246,14 @@ de:
|
|
|
1233
1246
|
unknown_application: Unbekannt
|
|
1234
1247
|
error_alert:
|
|
1235
1248
|
subject: "\U0001F6A8 [%{application}] %{error_type}: %{message}"
|
|
1249
|
+
subject_with_environment: "\U0001F6A8 [%{application} · %{environment}] %{error_type}:
|
|
1250
|
+
%{message}"
|
|
1236
1251
|
heading: "\U0001F6A8 Fehlermeldung"
|
|
1237
1252
|
labels:
|
|
1238
1253
|
application: Anwendung
|
|
1239
1254
|
error_type: Fehlertyp
|
|
1240
1255
|
platform: Plattform
|
|
1256
|
+
environment: Umgebung
|
|
1241
1257
|
occurred_at: Aufgetreten am
|
|
1242
1258
|
user_id: Benutzer-ID
|
|
1243
1259
|
ip_address: IP-Adresse
|
|
@@ -1303,6 +1319,7 @@ de:
|
|
|
1303
1319
|
application: Anwendung
|
|
1304
1320
|
error_type: Fehlertyp
|
|
1305
1321
|
platform: Plattform
|
|
1322
|
+
environment: Umgebung
|
|
1306
1323
|
occurred: Aufgetreten
|
|
1307
1324
|
message: Meldung
|
|
1308
1325
|
user: Benutzer
|
|
@@ -1637,6 +1654,10 @@ de:
|
|
|
1637
1654
|
platform_chart:
|
|
1638
1655
|
title: Fehler nach Plattform
|
|
1639
1656
|
quick_links: 'Schnellzugriff:'
|
|
1657
|
+
environment_chart:
|
|
1658
|
+
title: Fehler nach Umgebung
|
|
1659
|
+
quick_links: 'Schnellzugriff:'
|
|
1660
|
+
unknown: Unbekannt
|
|
1640
1661
|
type_chart:
|
|
1641
1662
|
title: Top 10 Fehlertypen
|
|
1642
1663
|
hour_chart:
|
|
@@ -2003,5 +2024,6 @@ de:
|
|
|
2003
2024
|
axis_count: Anzahl
|
|
2004
2025
|
axis_number_of_errors: Anzahl der Fehler
|
|
2005
2026
|
axis_hours: Stunden
|
|
2027
|
+
suffix_hours: " Stunden"
|
|
2006
2028
|
series_total_errors: Fehler gesamt
|
|
2007
2029
|
series_hours_to_resolve: Stunden bis zur Behebung
|
data/config/locales/en.yml
CHANGED
|
@@ -249,6 +249,7 @@ en:
|
|
|
249
249
|
# noun — languages differ on agreement between the two.
|
|
250
250
|
all_apps: "All Apps"
|
|
251
251
|
all_platforms: "All Platforms"
|
|
252
|
+
all_environments: "All Environments"
|
|
252
253
|
all_types: "All Types"
|
|
253
254
|
all_timeframes: "All Time"
|
|
254
255
|
all_frequencies: "All Frequencies"
|
|
@@ -290,6 +291,7 @@ en:
|
|
|
290
291
|
search: "Search: %{value}"
|
|
291
292
|
application: "App: %{value}"
|
|
292
293
|
platform: "Platform: %{value}"
|
|
294
|
+
environment: "Environment: %{value}"
|
|
293
295
|
error_type: "Type: %{value}"
|
|
294
296
|
severity: "Severity: %{value}"
|
|
295
297
|
timeframe: "Timeframe: %{value}"
|
|
@@ -306,6 +308,7 @@ en:
|
|
|
306
308
|
last_seen: "Last seen"
|
|
307
309
|
application: "App"
|
|
308
310
|
platform: "Platform"
|
|
311
|
+
environment: "Environment"
|
|
309
312
|
select_all: "Select all errors"
|
|
310
313
|
|
|
311
314
|
batch:
|
|
@@ -876,6 +879,8 @@ en:
|
|
|
876
879
|
platform: "Platform"
|
|
877
880
|
# %{platform} is a platform name (iOS, Android, Web) and is not translated.
|
|
878
881
|
view_all_platform: "View all %{platform} errors"
|
|
882
|
+
# %{environment} is an environment name (production, staging, uat) and is not translated.
|
|
883
|
+
view_all_environment: "View all %{environment} errors"
|
|
879
884
|
|
|
880
885
|
user: "User"
|
|
881
886
|
view_user_errors: "View all errors for this user"
|
|
@@ -1172,12 +1177,16 @@ en:
|
|
|
1172
1177
|
unique_rules: "Unique Rules"
|
|
1173
1178
|
total_events: "Total Events"
|
|
1174
1179
|
unique_ips: "Unique IPs"
|
|
1180
|
+
ai_events: "AI Agent Requests"
|
|
1175
1181
|
all_title: "Rate Limit Events by Rule"
|
|
1176
1182
|
column_rule: "Rule"
|
|
1177
1183
|
column_type: "Type"
|
|
1178
1184
|
column_count: "Count"
|
|
1179
1185
|
column_ips: "IPs"
|
|
1180
1186
|
column_top_path: "Top Path"
|
|
1187
|
+
column_top_agent: "Top Agent"
|
|
1188
|
+
overflow_notice_html: >-
|
|
1189
|
+
%{count} events could not be attributed to a rule because the tracker's buffer was full. Raise %{option} to capture more.
|
|
1181
1190
|
# Rack Attack match types. These are machine values the view also
|
|
1182
1191
|
# compares by string equality, so the display is a lookup and the
|
|
1183
1192
|
# comparison keeps the English literal.
|
|
@@ -1480,6 +1489,8 @@ en:
|
|
|
1480
1489
|
max_backtrace_lines: "Stack trace depth limit"
|
|
1481
1490
|
sampling_rate: "Percentage of errors captured"
|
|
1482
1491
|
application_name: "Name of this application (auto-detected if not set)"
|
|
1492
|
+
environment: "Environment errors are attributed to (Rails.env if not set)"
|
|
1493
|
+
notification_environments: "Only notify for these environments (all if not set)"
|
|
1483
1494
|
database: "Active database for error logs"
|
|
1484
1495
|
use_separate_database: "Use dedicated DB for error logs"
|
|
1485
1496
|
user_model: "Model name for user associations (auto-detected if not set)"
|
|
@@ -1698,11 +1709,15 @@ en:
|
|
|
1698
1709
|
# an exception class name and %{message} is its message — both are
|
|
1699
1710
|
# verbatim error content and are not translated.
|
|
1700
1711
|
subject: "🚨 [%{application}] %{error_type}: %{message}"
|
|
1712
|
+
# Used instead of `subject` when the error carries an environment.
|
|
1713
|
+
# %{environment} is an environment name and is not translated.
|
|
1714
|
+
subject_with_environment: "🚨 [%{application} · %{environment}] %{error_type}: %{message}"
|
|
1701
1715
|
heading: "🚨 Error Alert"
|
|
1702
1716
|
labels:
|
|
1703
1717
|
application: "Application"
|
|
1704
1718
|
error_type: "Error Type"
|
|
1705
1719
|
platform: "Platform"
|
|
1720
|
+
environment: "Environment"
|
|
1706
1721
|
occurred_at: "Occurred At"
|
|
1707
1722
|
user_id: "User ID"
|
|
1708
1723
|
ip_address: "IP Address"
|
|
@@ -1802,6 +1817,7 @@ en:
|
|
|
1802
1817
|
application: "Application"
|
|
1803
1818
|
error_type: "Error Type"
|
|
1804
1819
|
platform: "Platform"
|
|
1820
|
+
environment: "Environment"
|
|
1805
1821
|
occurred: "Occurred"
|
|
1806
1822
|
message: "Message"
|
|
1807
1823
|
user: "User"
|
|
@@ -2211,6 +2227,11 @@ en:
|
|
|
2211
2227
|
platform_chart:
|
|
2212
2228
|
title: "Errors by Platform"
|
|
2213
2229
|
quick_links: "Quick Links:"
|
|
2230
|
+
environment_chart:
|
|
2231
|
+
title: "Errors by Environment"
|
|
2232
|
+
quick_links: "Quick Links:"
|
|
2233
|
+
# Label for errors captured before the environment column existed.
|
|
2234
|
+
unknown: "Unknown"
|
|
2214
2235
|
|
|
2215
2236
|
type_chart:
|
|
2216
2237
|
title: "Top 10 Error Types"
|
|
@@ -2715,5 +2736,8 @@ en:
|
|
|
2715
2736
|
axis_count: "Count"
|
|
2716
2737
|
axis_number_of_errors: "Number of Errors"
|
|
2717
2738
|
axis_hours: "Hours"
|
|
2739
|
+
# Chartkick concatenates this after a number on the MTTR charts, so it
|
|
2740
|
+
# carries its own leading space and is a bare unit, not a sentence.
|
|
2741
|
+
suffix_hours: " hours"
|
|
2718
2742
|
series_total_errors: "Total Errors"
|
|
2719
2743
|
series_hours_to_resolve: "Hours to Resolve"
|
data/config/locales/es.yml
CHANGED
|
@@ -147,6 +147,7 @@ es:
|
|
|
147
147
|
any: Cualquier gravedad
|
|
148
148
|
all_apps: Todas las aplicaciones
|
|
149
149
|
all_platforms: Todas las plataformas
|
|
150
|
+
all_environments: Todos los entornos
|
|
150
151
|
all_types: Todos los tipos
|
|
151
152
|
all_timeframes: Todo el periodo
|
|
152
153
|
all_frequencies: Todas las frecuencias
|
|
@@ -175,6 +176,7 @@ es:
|
|
|
175
176
|
search: 'Búsqueda: %{value}'
|
|
176
177
|
application: 'Aplicación: %{value}'
|
|
177
178
|
platform: 'Plataforma: %{value}'
|
|
179
|
+
environment: 'Entorno: %{value}'
|
|
178
180
|
error_type: 'Tipo: %{value}'
|
|
179
181
|
severity: 'Gravedad: %{value}'
|
|
180
182
|
timeframe: 'Periodo: %{value}'
|
|
@@ -190,6 +192,7 @@ es:
|
|
|
190
192
|
last_seen: Última aparición
|
|
191
193
|
application: Aplicación
|
|
192
194
|
platform: Plataforma
|
|
195
|
+
environment: Entorno
|
|
193
196
|
select_all: Seleccionar todos los errores
|
|
194
197
|
batch:
|
|
195
198
|
selected:
|
|
@@ -652,6 +655,7 @@ es:
|
|
|
652
655
|
low: BAJA
|
|
653
656
|
platform: Plataforma
|
|
654
657
|
view_all_platform: Ver todos los errores de %{platform}
|
|
658
|
+
view_all_environment: Ver todos los errores de %{environment}
|
|
655
659
|
user: Usuario
|
|
656
660
|
view_user_errors: Ver todos los errores de este usuario
|
|
657
661
|
user_id: 'ID: %{id}'
|
|
@@ -862,12 +866,17 @@ es:
|
|
|
862
866
|
unique_rules: Reglas únicas
|
|
863
867
|
total_events: Total de eventos
|
|
864
868
|
unique_ips: IP únicas
|
|
869
|
+
ai_events: Solicitudes de agentes de IA
|
|
865
870
|
all_title: Eventos de límite de tasa por regla
|
|
866
871
|
column_rule: Regla
|
|
867
872
|
column_type: Tipo
|
|
868
873
|
column_count: Cantidad
|
|
869
874
|
column_ips: IP
|
|
870
875
|
column_top_path: Ruta principal
|
|
876
|
+
column_top_agent: Agente principal
|
|
877
|
+
overflow_notice_html: No se pudieron atribuir %{count} eventos a ninguna regla
|
|
878
|
+
porque el búfer del rastreador estaba lleno. Aumente %{option} para capturar
|
|
879
|
+
más.
|
|
871
880
|
match_type:
|
|
872
881
|
blocklist: blocklist
|
|
873
882
|
throttle: throttle
|
|
@@ -1108,6 +1117,9 @@ es:
|
|
|
1108
1117
|
sampling_rate: Porcentaje de errores capturados
|
|
1109
1118
|
application_name: Nombre de esta aplicación (se detecta automáticamente si
|
|
1110
1119
|
no se define)
|
|
1120
|
+
environment: Entorno al que se atribuyen los errores (Rails.env si no se define)
|
|
1121
|
+
notification_environments: Notificar solo para estos entornos (todos si no
|
|
1122
|
+
se define)
|
|
1111
1123
|
database: Base de datos activa para los registros de errores
|
|
1112
1124
|
use_separate_database: Usar una base de datos dedicada para los registros
|
|
1113
1125
|
de errores
|
|
@@ -1283,11 +1295,14 @@ es:
|
|
|
1283
1295
|
unknown_application: Desconocida
|
|
1284
1296
|
error_alert:
|
|
1285
1297
|
subject: "\U0001F6A8 [%{application}] %{error_type}: %{message}"
|
|
1298
|
+
subject_with_environment: "\U0001F6A8 [%{application} · %{environment}] %{error_type}:
|
|
1299
|
+
%{message}"
|
|
1286
1300
|
heading: "\U0001F6A8 Alerta de error"
|
|
1287
1301
|
labels:
|
|
1288
1302
|
application: Aplicación
|
|
1289
1303
|
error_type: Tipo de error
|
|
1290
1304
|
platform: Plataforma
|
|
1305
|
+
environment: Entorno
|
|
1291
1306
|
occurred_at: Ocurrió el
|
|
1292
1307
|
user_id: ID de usuario
|
|
1293
1308
|
ip_address: Dirección IP
|
|
@@ -1356,6 +1371,7 @@ es:
|
|
|
1356
1371
|
application: Aplicación
|
|
1357
1372
|
error_type: Tipo de error
|
|
1358
1373
|
platform: Plataforma
|
|
1374
|
+
environment: Entorno
|
|
1359
1375
|
occurred: Ocurrió
|
|
1360
1376
|
message: Mensaje
|
|
1361
1377
|
user: Usuario
|
|
@@ -1692,6 +1708,10 @@ es:
|
|
|
1692
1708
|
platform_chart:
|
|
1693
1709
|
title: Errores por plataforma
|
|
1694
1710
|
quick_links: 'Enlaces rápidos:'
|
|
1711
|
+
environment_chart:
|
|
1712
|
+
title: Errores por entorno
|
|
1713
|
+
quick_links: 'Enlaces rápidos:'
|
|
1714
|
+
unknown: Desconocido
|
|
1695
1715
|
type_chart:
|
|
1696
1716
|
title: Los 10 tipos de error más frecuentes
|
|
1697
1717
|
hour_chart:
|
|
@@ -2075,5 +2095,6 @@ es:
|
|
|
2075
2095
|
axis_count: Cantidad
|
|
2076
2096
|
axis_number_of_errors: Número de errores
|
|
2077
2097
|
axis_hours: Horas
|
|
2098
|
+
suffix_hours: " horas"
|
|
2078
2099
|
series_total_errors: Total de errores
|
|
2079
2100
|
series_hours_to_resolve: Horas hasta la resolución
|
data/config/locales/fr.yml
CHANGED
|
@@ -147,6 +147,7 @@ fr:
|
|
|
147
147
|
any: Toutes gravités
|
|
148
148
|
all_apps: Toutes les applications
|
|
149
149
|
all_platforms: Toutes les plateformes
|
|
150
|
+
all_environments: Tous les environnements
|
|
150
151
|
all_types: Tous les types
|
|
151
152
|
all_timeframes: Toute la période
|
|
152
153
|
all_frequencies: Toutes les fréquences
|
|
@@ -175,6 +176,7 @@ fr:
|
|
|
175
176
|
search: 'Recherche : %{value}'
|
|
176
177
|
application: 'Application : %{value}'
|
|
177
178
|
platform: 'Plateforme : %{value}'
|
|
179
|
+
environment: 'Environnement : %{value}'
|
|
178
180
|
error_type: 'Type : %{value}'
|
|
179
181
|
severity: 'Gravité : %{value}'
|
|
180
182
|
timeframe: 'Période : %{value}'
|
|
@@ -190,6 +192,7 @@ fr:
|
|
|
190
192
|
last_seen: Dernière occurrence
|
|
191
193
|
application: Application
|
|
192
194
|
platform: Plateforme
|
|
195
|
+
environment: Environnement
|
|
193
196
|
select_all: Sélectionner toutes les erreurs
|
|
194
197
|
batch:
|
|
195
198
|
selected:
|
|
@@ -651,6 +654,7 @@ fr:
|
|
|
651
654
|
low: FAIBLE
|
|
652
655
|
platform: Plateforme
|
|
653
656
|
view_all_platform: Voir toutes les erreurs %{platform}
|
|
657
|
+
view_all_environment: Voir toutes les erreurs de %{environment}
|
|
654
658
|
user: Utilisateur
|
|
655
659
|
view_user_errors: Voir toutes les erreurs de cet utilisateur
|
|
656
660
|
user_id: 'ID : %{id}'
|
|
@@ -861,12 +865,17 @@ fr:
|
|
|
861
865
|
unique_rules: Règles uniques
|
|
862
866
|
total_events: Total des événements
|
|
863
867
|
unique_ips: IP uniques
|
|
868
|
+
ai_events: Requêtes d'agents IA
|
|
864
869
|
all_title: Événements de limitation de débit par règle
|
|
865
870
|
column_rule: Règle
|
|
866
871
|
column_type: Type
|
|
867
872
|
column_count: Nombre
|
|
868
873
|
column_ips: IP
|
|
869
874
|
column_top_path: Chemin principal
|
|
875
|
+
column_top_agent: Agent principal
|
|
876
|
+
overflow_notice_html: "%{count} événements n'ont pas pu être attribués à une
|
|
877
|
+
règle car la mémoire tampon du traceur était pleine. Augmentez %{option}
|
|
878
|
+
pour en capturer davantage."
|
|
870
879
|
match_type:
|
|
871
880
|
blocklist: blocklist
|
|
872
881
|
throttle: throttle
|
|
@@ -1109,6 +1118,10 @@ fr:
|
|
|
1109
1118
|
sampling_rate: Pourcentage d'erreurs capturées
|
|
1110
1119
|
application_name: Nom de cette application (détecté automatiquement si non
|
|
1111
1120
|
défini)
|
|
1121
|
+
environment: Environnement auquel les erreurs sont attribuées (Rails.env si
|
|
1122
|
+
non défini)
|
|
1123
|
+
notification_environments: Ne notifier que pour ces environnements (tous si
|
|
1124
|
+
non défini)
|
|
1112
1125
|
database: Base de données active pour les journaux d'erreurs
|
|
1113
1126
|
use_separate_database: Utiliser une base de données dédiée aux journaux d'erreurs
|
|
1114
1127
|
user_model: Nom du modèle pour les associations utilisateur (détecté automatiquement
|
|
@@ -1281,11 +1294,14 @@ fr:
|
|
|
1281
1294
|
unknown_application: Inconnue
|
|
1282
1295
|
error_alert:
|
|
1283
1296
|
subject: "\U0001F6A8 [%{application}] %{error_type} : %{message}"
|
|
1297
|
+
subject_with_environment: "\U0001F6A8 [%{application} · %{environment}] %{error_type}
|
|
1298
|
+
: %{message}"
|
|
1284
1299
|
heading: "\U0001F6A8 Alerte d'erreur"
|
|
1285
1300
|
labels:
|
|
1286
1301
|
application: Application
|
|
1287
1302
|
error_type: Type d'erreur
|
|
1288
1303
|
platform: Plateforme
|
|
1304
|
+
environment: Environnement
|
|
1289
1305
|
occurred_at: Survenue le
|
|
1290
1306
|
user_id: ID utilisateur
|
|
1291
1307
|
ip_address: Adresse IP
|
|
@@ -1355,6 +1371,7 @@ fr:
|
|
|
1355
1371
|
application: Application
|
|
1356
1372
|
error_type: Type d'erreur
|
|
1357
1373
|
platform: Plateforme
|
|
1374
|
+
environment: Environnement
|
|
1358
1375
|
occurred: Survenue
|
|
1359
1376
|
message: Message
|
|
1360
1377
|
user: Utilisateur
|
|
@@ -1694,6 +1711,10 @@ fr:
|
|
|
1694
1711
|
platform_chart:
|
|
1695
1712
|
title: Erreurs par plateforme
|
|
1696
1713
|
quick_links: 'Liens rapides :'
|
|
1714
|
+
environment_chart:
|
|
1715
|
+
title: Erreurs par environnement
|
|
1716
|
+
quick_links: 'Liens rapides :'
|
|
1717
|
+
unknown: Inconnu
|
|
1697
1718
|
type_chart:
|
|
1698
1719
|
title: Top 10 des types d'erreurs
|
|
1699
1720
|
hour_chart:
|
|
@@ -2078,5 +2099,6 @@ fr:
|
|
|
2078
2099
|
axis_count: Nombre
|
|
2079
2100
|
axis_number_of_errors: Nombre d'erreurs
|
|
2080
2101
|
axis_hours: Heures
|
|
2102
|
+
suffix_hours: " heures"
|
|
2081
2103
|
series_total_errors: Total des erreurs
|
|
2082
2104
|
series_hours_to_resolve: Heures avant résolution
|
data/config/locales/it.yml
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
|
-
|
|
1
|
+
# RED dashboard translations — it
|
|
2
|
+
#
|
|
3
|
+
# MACHINE-TRANSLATED AND NOT REVIEWED BY A NATIVE SPEAKER.
|
|
4
|
+
# See docs/guides/TRANSLATIONS.md. Corrections are welcome, and a one-key
|
|
5
|
+
# pull request is a perfectly good pull request.
|
|
6
|
+
#
|
|
7
|
+
# Structure is derived from en.yml, which is authoritative. Do not add keys
|
|
8
|
+
# here that do not exist there — run bin/i18n-check after editing.
|
|
2
9
|
it:
|
|
3
10
|
red:
|
|
4
11
|
common:
|
|
@@ -139,6 +146,7 @@ it:
|
|
|
139
146
|
any: Qualsiasi gravità
|
|
140
147
|
all_apps: Tutte le app
|
|
141
148
|
all_platforms: Tutte le piattaforme
|
|
149
|
+
all_environments: Tutti gli ambienti
|
|
142
150
|
all_types: Tutti i tipi
|
|
143
151
|
all_timeframes: Da sempre
|
|
144
152
|
all_frequencies: Tutte le frequenze
|
|
@@ -167,6 +175,7 @@ it:
|
|
|
167
175
|
search: 'Ricerca: %{value}'
|
|
168
176
|
application: 'App: %{value}'
|
|
169
177
|
platform: 'Piattaforma: %{value}'
|
|
178
|
+
environment: 'Ambiente: %{value}'
|
|
170
179
|
error_type: 'Tipo: %{value}'
|
|
171
180
|
severity: 'Gravità: %{value}'
|
|
172
181
|
timeframe: 'Periodo: %{value}'
|
|
@@ -182,6 +191,7 @@ it:
|
|
|
182
191
|
last_seen: Ultima occorrenza
|
|
183
192
|
application: App
|
|
184
193
|
platform: Piattaforma
|
|
194
|
+
environment: Ambiente
|
|
185
195
|
select_all: Seleziona tutti gli errori
|
|
186
196
|
batch:
|
|
187
197
|
selected:
|
|
@@ -637,6 +647,7 @@ it:
|
|
|
637
647
|
low: BASSO
|
|
638
648
|
platform: Piattaforma
|
|
639
649
|
view_all_platform: Vedi tutti gli errori di %{platform}
|
|
650
|
+
view_all_environment: Vedi tutti gli errori di %{environment}
|
|
640
651
|
user: Utente
|
|
641
652
|
view_user_errors: Vedi tutti gli errori di questo utente
|
|
642
653
|
user_id: 'ID: %{id}'
|
|
@@ -847,12 +858,17 @@ it:
|
|
|
847
858
|
unique_rules: Regole uniche
|
|
848
859
|
total_events: Eventi totali
|
|
849
860
|
unique_ips: IP unici
|
|
861
|
+
ai_events: Richieste di agenti IA
|
|
850
862
|
all_title: Eventi di limite di richieste per regola
|
|
851
863
|
column_rule: Regola
|
|
852
864
|
column_type: Tipo
|
|
853
865
|
column_count: Conteggio
|
|
854
866
|
column_ips: Indirizzi IP
|
|
855
867
|
column_top_path: Percorso principale
|
|
868
|
+
column_top_agent: Agente principale
|
|
869
|
+
overflow_notice_html: "%{count} eventi non sono stati attribuiti a nessuna
|
|
870
|
+
regola perché il buffer del tracker era pieno. Aumenta %{option} per acquisirne
|
|
871
|
+
di più."
|
|
856
872
|
match_type:
|
|
857
873
|
blocklist: blocklist
|
|
858
874
|
throttle: throttle
|
|
@@ -1092,6 +1108,10 @@ it:
|
|
|
1092
1108
|
sampling_rate: Percentuale di errori acquisiti
|
|
1093
1109
|
application_name: Nome di questa applicazione (rilevato automaticamente se
|
|
1094
1110
|
non impostato)
|
|
1111
|
+
environment: Ambiente a cui vengono attribuiti gli errori (Rails.env se non
|
|
1112
|
+
impostato)
|
|
1113
|
+
notification_environments: Notifica solo per questi ambienti (tutti se non
|
|
1114
|
+
impostato)
|
|
1095
1115
|
database: Database attivo per i registri degli errori
|
|
1096
1116
|
use_separate_database: Usa un DB dedicato per i registri degli errori
|
|
1097
1117
|
user_model: Nome del modello per le associazioni con gli utenti (rilevato
|
|
@@ -1264,11 +1284,14 @@ it:
|
|
|
1264
1284
|
unknown_application: Sconosciuta
|
|
1265
1285
|
error_alert:
|
|
1266
1286
|
subject: "\U0001F6A8 [%{application}] %{error_type}: %{message}"
|
|
1287
|
+
subject_with_environment: "\U0001F6A8 [%{application} · %{environment}] %{error_type}:
|
|
1288
|
+
%{message}"
|
|
1267
1289
|
heading: "\U0001F6A8 Avviso di errore"
|
|
1268
1290
|
labels:
|
|
1269
1291
|
application: Applicazione
|
|
1270
1292
|
error_type: Tipo di errore
|
|
1271
1293
|
platform: Piattaforma
|
|
1294
|
+
environment: Ambiente
|
|
1272
1295
|
occurred_at: Data e ora
|
|
1273
1296
|
user_id: ID utente
|
|
1274
1297
|
ip_address: Indirizzo IP
|
|
@@ -1337,6 +1360,7 @@ it:
|
|
|
1337
1360
|
application: Applicazione
|
|
1338
1361
|
error_type: Tipo di errore
|
|
1339
1362
|
platform: Piattaforma
|
|
1363
|
+
environment: Ambiente
|
|
1340
1364
|
occurred: Verificatosi
|
|
1341
1365
|
message: Messaggio
|
|
1342
1366
|
user: Utente
|
|
@@ -1672,6 +1696,10 @@ it:
|
|
|
1672
1696
|
platform_chart:
|
|
1673
1697
|
title: Errori per piattaforma
|
|
1674
1698
|
quick_links: 'Collegamenti rapidi:'
|
|
1699
|
+
environment_chart:
|
|
1700
|
+
title: Errori per ambiente
|
|
1701
|
+
quick_links: 'Collegamenti rapidi:'
|
|
1702
|
+
unknown: Sconosciuto
|
|
1675
1703
|
type_chart:
|
|
1676
1704
|
title: I 10 tipi di errore più frequenti
|
|
1677
1705
|
hour_chart:
|
|
@@ -2056,5 +2084,6 @@ it:
|
|
|
2056
2084
|
axis_count: Conteggio
|
|
2057
2085
|
axis_number_of_errors: Numero di errori
|
|
2058
2086
|
axis_hours: Ore
|
|
2087
|
+
suffix_hours: " ore"
|
|
2059
2088
|
series_total_errors: Errori totali
|
|
2060
2089
|
series_hours_to_resolve: Ore per la risoluzione
|