rails_error_dashboard 0.12.1 → 0.14.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 (106) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/rails_error_dashboard/application_controller.rb +92 -11
  3. data/app/controllers/rails_error_dashboard/errors_controller.rb +111 -34
  4. data/app/controllers/rails_error_dashboard/webhooks_controller.rb +3 -0
  5. data/app/helpers/rails_error_dashboard/application_helper.rb +46 -1
  6. data/app/helpers/rails_error_dashboard/backtrace_helper.rb +8 -0
  7. data/app/jobs/rails_error_dashboard/async_error_logging_job.rb +10 -0
  8. data/app/jobs/rails_error_dashboard/concerns/plain_channel_message.rb +71 -0
  9. data/app/jobs/rails_error_dashboard/notification_burst_summary_job.rb +55 -0
  10. data/app/jobs/rails_error_dashboard/retention_cleanup_job.rb +122 -1
  11. data/app/jobs/rails_error_dashboard/storm_flush_job.rb +7 -4
  12. data/app/jobs/rails_error_dashboard/storm_notification_job.rb +8 -44
  13. data/app/models/rails_error_dashboard/error_baseline.rb +12 -9
  14. data/app/models/rails_error_dashboard/error_comment.rb +0 -5
  15. data/app/models/rails_error_dashboard/error_log.rb +19 -3
  16. data/app/models/rails_error_dashboard/error_logs_record.rb +34 -0
  17. data/app/models/rails_error_dashboard/error_occurrence.rb +9 -1
  18. data/app/models/rails_error_dashboard/event_count.rb +132 -0
  19. data/app/models/rails_error_dashboard/event_timing_gap.rb +55 -0
  20. data/app/views/layouts/rails_error_dashboard.html.erb +58 -5
  21. data/app/views/rails_error_dashboard/errors/_discussion.html.erb +18 -11
  22. data/app/views/rails_error_dashboard/errors/_issue_section.html.erb +22 -8
  23. data/app/views/rails_error_dashboard/errors/_request_context.html.erb +2 -0
  24. data/app/views/rails_error_dashboard/errors/_sidebar_metadata.html.erb +15 -6
  25. data/app/views/rails_error_dashboard/errors/analytics.html.erb +8 -8
  26. data/app/views/rails_error_dashboard/errors/diagnostic_dumps.html.erb +1 -1
  27. data/app/views/rails_error_dashboard/errors/index.html.erb +6 -1
  28. data/app/views/rails_error_dashboard/errors/overview.html.erb +12 -0
  29. data/app/views/rails_error_dashboard/errors/platform_comparison.html.erb +7 -7
  30. data/app/views/rails_error_dashboard/errors/releases.html.erb +2 -2
  31. data/app/views/rails_error_dashboard/errors/settings.html.erb +2 -0
  32. data/app/views/rails_error_dashboard/errors/show.html.erb +3 -3
  33. data/config/locales/de.yml +30 -0
  34. data/config/locales/en.yml +37 -0
  35. data/config/locales/es.yml +30 -0
  36. data/config/locales/fr.yml +30 -0
  37. data/config/locales/it.yml +30 -0
  38. data/config/locales/ja.yml +30 -0
  39. data/config/locales/pl.yml +30 -0
  40. data/config/locales/pt-BR.yml +30 -0
  41. data/config/locales/ru.yml +30 -0
  42. data/config/locales/uk.yml +30 -0
  43. data/config/locales/zh-CN.yml +30 -0
  44. data/db/migrate/20260917000001_add_last_notified_at_to_error_logs.rb +40 -0
  45. data/db/migrate/20260919000001_create_event_counts.rb +71 -0
  46. data/db/migrate/20260920000001_add_buckets_incomplete_to_storm_events.rb +25 -0
  47. data/db/migrate/20260920000002_create_event_timing_gaps.rb +55 -0
  48. data/lib/generators/rails_error_dashboard/install/templates/initializer.rb +12 -1
  49. data/lib/rails_error_dashboard/commands/assign_error.rb +12 -2
  50. data/lib/rails_error_dashboard/commands/backfill_environments.rb +2 -0
  51. data/lib/rails_error_dashboard/commands/backfill_resolved_at.rb +42 -0
  52. data/lib/rails_error_dashboard/commands/batch_delete_errors.rb +1 -0
  53. data/lib/rails_error_dashboard/commands/batch_mute_errors.rb +2 -0
  54. data/lib/rails_error_dashboard/commands/batch_resolve_errors.rb +2 -0
  55. data/lib/rails_error_dashboard/commands/batch_unmute_errors.rb +2 -0
  56. data/lib/rails_error_dashboard/commands/find_or_increment_error.rb +109 -11
  57. data/lib/rails_error_dashboard/commands/flush_rack_attack_events.rb +3 -1
  58. data/lib/rails_error_dashboard/commands/flush_storm_counts.rb +252 -12
  59. data/lib/rails_error_dashboard/commands/flush_swallowed_exceptions.rb +5 -2
  60. data/lib/rails_error_dashboard/commands/link_existing_issue.rb +1 -0
  61. data/lib/rails_error_dashboard/commands/log_error.rb +291 -40
  62. data/lib/rails_error_dashboard/commands/mute_error.rb +1 -0
  63. data/lib/rails_error_dashboard/commands/resolve_error.rb +2 -0
  64. data/lib/rails_error_dashboard/commands/scrub_invalid_encoding.rb +104 -0
  65. data/lib/rails_error_dashboard/commands/snooze_error.rb +34 -10
  66. data/lib/rails_error_dashboard/commands/unmute_error.rb +1 -0
  67. data/lib/rails_error_dashboard/commands/update_error_priority.rb +23 -2
  68. data/lib/rails_error_dashboard/commands/update_error_status.rb +33 -6
  69. data/lib/rails_error_dashboard/configuration.rb +39 -1
  70. data/lib/rails_error_dashboard/engine.rb +28 -0
  71. data/lib/rails_error_dashboard/manual_error_reporter.rb +16 -5
  72. data/lib/rails_error_dashboard/queries/analytics_stats.rb +89 -30
  73. data/lib/rails_error_dashboard/queries/baseline_stats.rb +107 -0
  74. data/lib/rails_error_dashboard/queries/dashboard_stats.rb +216 -74
  75. data/lib/rails_error_dashboard/queries/error_correlation.rb +6 -3
  76. data/lib/rails_error_dashboard/queries/errors_list.rb +15 -2
  77. data/lib/rails_error_dashboard/queries/event_volume.rb +503 -0
  78. data/lib/rails_error_dashboard/queries/similar_errors.rb +1 -1
  79. data/lib/rails_error_dashboard/services/analytics_cache_manager.rb +43 -18
  80. data/lib/rails_error_dashboard/services/backtrace_processor.rb +3 -1
  81. data/lib/rails_error_dashboard/services/breadcrumb_collector.rb +23 -0
  82. data/lib/rails_error_dashboard/services/cause_chain_extractor.rb +3 -1
  83. data/lib/rails_error_dashboard/services/codeberg_issue_client.rb +13 -2
  84. data/lib/rails_error_dashboard/services/diagnostic_dump_generator.rb +5 -3
  85. data/lib/rails_error_dashboard/services/encoding_sanitizer.rb +80 -0
  86. data/lib/rails_error_dashboard/services/error_broadcaster.rb +180 -32
  87. data/lib/rails_error_dashboard/services/error_hash_generator.rb +9 -3
  88. data/lib/rails_error_dashboard/services/error_notification_dispatcher.rb +13 -0
  89. data/lib/rails_error_dashboard/services/exception_filter.rb +55 -0
  90. data/lib/rails_error_dashboard/services/git_head_reader.rb +102 -0
  91. data/lib/rails_error_dashboard/services/notification_throttler.rb +172 -28
  92. data/lib/rails_error_dashboard/services/sensitive_data_filter.rb +47 -1
  93. data/lib/rails_error_dashboard/services/storm_protection/circuit_breaker.rb +59 -3
  94. data/lib/rails_error_dashboard/services/storm_protection/count_buffer.rb +64 -6
  95. data/lib/rails_error_dashboard/services/storm_protection/fingerprint_buckets.rb +25 -2
  96. data/lib/rails_error_dashboard/services/storm_protection/gate.rb +32 -5
  97. data/lib/rails_error_dashboard/services/swallowed_exception_tracker.rb +99 -23
  98. data/lib/rails_error_dashboard/services/url_safety.rb +40 -0
  99. data/lib/rails_error_dashboard/services/variable_serializer.rb +125 -10
  100. data/lib/rails_error_dashboard/subscribers/breadcrumb_subscriber.rb +111 -0
  101. data/lib/rails_error_dashboard/subscribers/issue_tracker_subscriber.rb +11 -2
  102. data/lib/rails_error_dashboard/value_objects/error_context.rb +40 -3
  103. data/lib/rails_error_dashboard/version.rb +1 -1
  104. data/lib/rails_error_dashboard.rb +34 -0
  105. data/lib/tasks/error_dashboard.rake +54 -4
  106. metadata +16 -2
@@ -603,6 +603,7 @@ en:
603
603
  issue_section:
604
604
  title: "Issue Tracker"
605
605
  view_issue: "View Issue"
606
+ unsafe_link: "This issue link is not an http(s) URL, so it is shown as text and cannot be opened."
606
607
  # Shown instead of a provider name when the provider is unknown.
607
608
  linked: "Linked"
608
609
  # %{provider} is a display name, %{number} the issue number.
@@ -820,6 +821,7 @@ en:
820
821
  # but no backtrace or context was ever captured for it.
821
822
  snapshot_fidelity_lite: "reduced capture (storm protection shed the context payloads)"
822
823
  snapshot_fidelity_minimal: "counted during a storm — no context was captured"
824
+ snapshot_fidelity_partial: "mixed snapshot — some fields are kept from an earlier occurrence"
823
825
  snapshot_unknown: "captured before RED recorded snapshot provenance"
824
826
 
825
827
  similar_errors:
@@ -1329,6 +1331,7 @@ en:
1329
1331
  # Zero errors and "the dashboard could not read its data" are
1330
1332
  # different states. This banner says which one you are looking at.
1331
1333
  data_unavailable: "Statistics are currently unavailable — the figures below are not a measurement."
1334
+ event_timing_incomplete: "Event timing is incomplete — storm protection dropped per-event timestamps; the totals are still exact."
1332
1335
  unresolved: "Unresolved"
1333
1336
  unresolved_hint: "Pending resolution"
1334
1337
  resolution_rate: "Resolution Rate"
@@ -1376,6 +1379,16 @@ en:
1376
1379
  one: "%{count} type"
1377
1380
  other: "%{count} types"
1378
1381
 
1382
+ errors_page:
1383
+ csrf:
1384
+ title: "Your session token has expired"
1385
+ message: "Go back, reload the page and try again. Nothing was changed."
1386
+ bad_request:
1387
+ title: "This request could not be understood"
1388
+ message: "A required value was missing or malformed. Go back and try again."
1389
+ not_acceptable:
1390
+ title: "This format is not available"
1391
+ message: "The dashboard cannot produce the format this request asked for."
1379
1392
  settings:
1380
1393
  title: "Settings"
1381
1394
  # %{version} is the gem version. The "v" prefix is a sigil, not a word.
@@ -1525,6 +1538,8 @@ en:
1525
1538
  sampling_rate: "Percentage of errors captured"
1526
1539
  application_name: "Name of this application (auto-detected if not set)"
1527
1540
  environment: "Environment errors are attributed to (Rails.env if not set)"
1541
+ notification_burst_limit: "New-error notifications per window, per process (0 = no cap)"
1542
+ notification_burst_window_seconds: "Length of the new-error notification window"
1528
1543
  notification_environments: "Only notify for these environments (all if not set)"
1529
1544
  database: "Active database for error logs"
1530
1545
  use_separate_database: "Use dedicated DB for error logs"
@@ -1633,6 +1648,19 @@ en:
1633
1648
  create_failed: "Failed to create issue: %{reason}"
1634
1649
  link_failed: "Failed to link issue: %{reason}"
1635
1650
 
1651
+ # Result of the status workflow form. %{status}, %{from} and %{to} are the
1652
+ # translated status labels from red.errors.row.status.
1653
+ status:
1654
+ updated: "Status changed to %{status}"
1655
+ invalid_transition: "Cannot change status from %{from} to %{to}"
1656
+ unknown: "That status does not exist"
1657
+ snooze:
1658
+ invalid_hours: "Snooze time must be a whole number of hours between 1 and %{max}"
1659
+ priority:
1660
+ invalid: "That priority level does not exist"
1661
+ assign:
1662
+ blank: "Enter a name to assign this error to"
1663
+
1636
1664
  # The "X is not enabled" notice was written out eleven times with only
1637
1665
  # the feature name changing. Two keys rather than one because English
1638
1666
  # agrees the verb and pronoun with the feature name: "Breadcrumbs are
@@ -1706,6 +1734,7 @@ en:
1706
1734
  # %{url} is the existing issue's URL.
1707
1735
  already_linked: "Error already has a linked issue: %{url}"
1708
1736
  url_required: "Issue URL is required"
1737
+ url_invalid: "Issue URL must start with http:// or https://"
1709
1738
  # %{id} is the requested error's id.
1710
1739
  error_not_found: "Error not found: %{id}"
1711
1740
  # %{count} errors could not be updated in a batch operation.
@@ -1898,6 +1927,14 @@ en:
1898
1927
  other: "%{value} errors"
1899
1928
  view_in_dashboard: "View in Dashboard"
1900
1929
 
1930
+ burst:
1931
+ # Sent ONCE when more than %{limit} new errors arrive inside %{window}
1932
+ # seconds (config.notification_burst_limit). It says that suppression has
1933
+ # started, not how many were suppressed: that is not known yet.
1934
+ suppressed: "More than %{limit} new errors were reported in %{application} within %{window} seconds."
1935
+ still_recorded: "Notifications for further new errors are paused until that window ends; every error is still recorded."
1936
+ dashboard: "Dashboard: %{url}"
1937
+
1901
1938
  storm:
1902
1939
  # The single "error storm in progress" message. %{application} is the
1903
1940
  # host app's name and %{started_at} an ISO8601 timestamp.
@@ -436,6 +436,7 @@ es:
436
436
  issue_section:
437
437
  title: Gestor de issues
438
438
  view_issue: Ver la issue
439
+ unsafe_link: "Este enlace a la issue no es una URL http(s), por lo que se muestra como texto y no se puede abrir."
439
440
  linked: Vinculada
440
441
  issue_reference: "%{provider} n.º %{number}"
441
442
  states:
@@ -607,6 +608,7 @@ es:
607
608
  snapshot_stale: de una aparición anterior — las posteriores no aportaron contexto
608
609
  snapshot_fidelity_lite: captura reducida (la protección ante storms descartó los payloads de contexto)
609
610
  snapshot_fidelity_minimal: contabilizado durante un storm — no se capturó ningún contexto
611
+ snapshot_fidelity_partial: instantánea mixta — algunos campos provienen de una aparición anterior
610
612
  snapshot_unknown: capturada antes de que RED registrara la procedencia de las instantáneas
611
613
  similar_errors:
612
614
  title: Errores similares
@@ -969,6 +971,7 @@ es:
969
971
  rate_per_hour: "%{value}/h"
970
972
  affected_users_incomplete: al menos — la protección ante storms descartó el detalle por evento
971
973
  data_unavailable: Las estadísticas no están disponibles por ahora — las cifras siguientes no son una medición.
974
+ event_timing_incomplete: "Las marcas de tiempo están incompletas — la protección contra tormentas las descartó; los totales siguen siendo exactos."
972
975
  unresolved: Sin resolver
973
976
  unresolved_hint: Pendientes de resolución
974
977
  resolution_rate: Tasa de resolución
@@ -1005,6 +1008,16 @@ es:
1005
1008
  one: "%{count} tipo"
1006
1009
  other: "%{count} tipos"
1007
1010
  many: "%{count} tipos"
1011
+ errors_page:
1012
+ csrf:
1013
+ title: "El token de tu sesión ha caducado"
1014
+ message: "Vuelve atrás, recarga la página e inténtalo de nuevo. No se ha modificado nada."
1015
+ bad_request:
1016
+ title: "No se ha podido interpretar esta solicitud"
1017
+ message: "Faltaba un valor obligatorio o tenía un formato incorrecto. Vuelve atrás e inténtalo de nuevo."
1018
+ not_acceptable:
1019
+ title: "Este formato no está disponible"
1020
+ message: "El panel no puede generar el formato que pedía esta solicitud."
1008
1021
  settings:
1009
1022
  title: Configuración
1010
1023
  version: v%{version}
@@ -1127,6 +1140,8 @@ es:
1127
1140
  application_name: Nombre de esta aplicación (se detecta automáticamente si
1128
1141
  no se define)
1129
1142
  environment: Entorno al que se atribuyen los errores (Rails.env si no se define)
1143
+ notification_burst_limit: "Notificaciones de errores nuevos por intervalo y por proceso (0 = sin límite)"
1144
+ notification_burst_window_seconds: "Duración del intervalo de notificaciones de errores nuevos"
1130
1145
  notification_environments: Notificar solo para estos entornos (todos si no
1131
1146
  se define)
1132
1147
  database: Base de datos activa para los registros de errores
@@ -1241,6 +1256,16 @@ es:
1241
1256
  linked: Issue vinculada correctamente
1242
1257
  create_failed: 'No se pudo crear la issue: %{reason}'
1243
1258
  link_failed: 'No se pudo vincular la issue: %{reason}'
1259
+ status:
1260
+ updated: "Estado cambiado a %{status}"
1261
+ invalid_transition: "No se puede cambiar el estado de %{from} a %{to}"
1262
+ unknown: "Ese estado no existe"
1263
+ snooze:
1264
+ invalid_hours: "El tiempo de posposición debe ser un número entero de horas entre 1 y %{max}"
1265
+ priority:
1266
+ invalid: "Ese nivel de prioridad no existe"
1267
+ assign:
1268
+ blank: "Introduce un nombre para asignar este error"
1244
1269
  not_enabled: "%{feature} no está activado. Actívelo en %{file}"
1245
1270
  not_enabled_plural: "%{feature} no están activados. Actívelos en %{file}"
1246
1271
  not_enabled_options: "%{feature} no está activado. Active %{options} en %{file}"
@@ -1284,6 +1309,7 @@ es:
1284
1309
  not_configured: El seguimiento de issues no está configurado
1285
1310
  already_linked: 'El error ya tiene una issue vinculada: %{url}'
1286
1311
  url_required: La URL de la issue es obligatoria
1312
+ url_invalid: La URL de la issue debe empezar por http:// o https://
1287
1313
  error_not_found: 'Error no encontrado: %{id}'
1288
1314
  batch_failed:
1289
1315
  mute:
@@ -1415,6 +1441,10 @@ es:
1415
1441
  other: "%{value} errores"
1416
1442
  many: "%{value} errores"
1417
1443
  view_in_dashboard: Ver en el panel
1444
+ burst:
1445
+ suppressed: "Se han registrado más de %{limit} errores nuevos en %{application} en %{window} segundos."
1446
+ still_recorded: "Las notificaciones de nuevos errores adicionales quedan en pausa hasta que termine ese intervalo; todos los errores se siguen registrando."
1447
+ dashboard: "Panel: %{url}"
1418
1448
  storm:
1419
1449
  detected: Se detectó una tormenta de errores en %{application} a las %{started_at}.
1420
1450
  mode:
@@ -438,6 +438,7 @@ fr:
438
438
  issue_section:
439
439
  title: Gestionnaire d'issues
440
440
  view_issue: Voir l'issue
441
+ unsafe_link: "Ce lien vers l'issue n'est pas une URL http(s) : il est affiché sous forme de texte et ne peut pas être ouvert."
441
442
  linked: Liée
442
443
  issue_reference: "%{provider} n°%{number}"
443
444
  states:
@@ -606,6 +607,7 @@ fr:
606
607
  snapshot_stale: issu d'une occurrence antérieure — les suivantes n'ont apporté aucun contexte
607
608
  snapshot_fidelity_lite: capture réduite (la protection contre les storms a écarté les payloads de contexte)
608
609
  snapshot_fidelity_minimal: comptabilisé pendant un storm — aucun contexte n'a été capturé
610
+ snapshot_fidelity_partial: instantané mixte — certains champs proviennent d'une occurrence antérieure
609
611
  snapshot_unknown: capturé avant que RED n'enregistre la provenance des instantanés
610
612
  similar_errors:
611
613
  title: Erreurs similaires
@@ -970,6 +972,7 @@ fr:
970
972
  rate_per_hour: "%{value}/h"
971
973
  affected_users_incomplete: au moins — la protection contre les storms a écarté le détail par événement
972
974
  data_unavailable: Les statistiques sont indisponibles pour le moment — les chiffres ci-dessous ne sont pas une mesure.
975
+ event_timing_incomplete: "L'horodatage est incomplet — la protection anti-tempête a supprimé les horodatages ; les totaux restent exacts."
973
976
  unresolved: Non résolues
974
977
  unresolved_hint: En attente de résolution
975
978
  resolution_rate: Taux de résolution
@@ -1006,6 +1009,16 @@ fr:
1006
1009
  one: "%{count} type"
1007
1010
  other: "%{count} types"
1008
1011
  many: "%{count} types"
1012
+ errors_page:
1013
+ csrf:
1014
+ title: "Votre jeton de session a expiré"
1015
+ message: "Revenez en arrière, rechargez la page et réessayez. Rien n'a été modifié."
1016
+ bad_request:
1017
+ title: "Cette requête n'a pas pu être interprétée"
1018
+ message: "Une valeur requise était absente ou mal formée. Revenez en arrière et réessayez."
1019
+ not_acceptable:
1020
+ title: "Ce format n'est pas disponible"
1021
+ message: "Le tableau de bord ne peut pas produire le format demandé par cette requête."
1009
1022
  settings:
1010
1023
  title: Paramètres
1011
1024
  version: v%{version}
@@ -1129,6 +1142,8 @@ fr:
1129
1142
  défini)
1130
1143
  environment: Environnement auquel les erreurs sont attribuées (Rails.env si
1131
1144
  non défini)
1145
+ notification_burst_limit: "Notifications de nouvelles erreurs par intervalle et par processus (0 = sans limite)"
1146
+ notification_burst_window_seconds: "Durée de l'intervalle des notifications de nouvelles erreurs"
1132
1147
  notification_environments: Ne notifier que pour ces environnements (tous si
1133
1148
  non défini)
1134
1149
  database: Base de données active pour les journaux d'erreurs
@@ -1241,6 +1256,16 @@ fr:
1241
1256
  linked: Issue liée avec succès
1242
1257
  create_failed: 'Échec de la création de l''issue : %{reason}'
1243
1258
  link_failed: 'Échec de la liaison de l''issue : %{reason}'
1259
+ status:
1260
+ updated: "Statut changé en %{status}"
1261
+ invalid_transition: "Impossible de passer le statut de %{from} à %{to}"
1262
+ unknown: "Ce statut n'existe pas"
1263
+ snooze:
1264
+ invalid_hours: "La durée de mise en veille doit être un nombre entier d'heures compris entre 1 et %{max}"
1265
+ priority:
1266
+ invalid: "Ce niveau de priorité n'existe pas"
1267
+ assign:
1268
+ blank: "Saisissez un nom auquel assigner cette erreur"
1244
1269
  not_enabled: "%{feature} n'est pas activé. Activez-le dans %{file}"
1245
1270
  not_enabled_plural: "%{feature} ne sont pas activés. Activez-les dans %{file}"
1246
1271
  not_enabled_options: "%{feature} n'est pas activé. Activez %{options} dans %{file}"
@@ -1283,6 +1308,7 @@ fr:
1283
1308
  not_configured: Le suivi des issues n'est pas configuré
1284
1309
  already_linked: 'L''erreur a déjà une issue liée : %{url}'
1285
1310
  url_required: L'URL de l'issue est requise
1311
+ url_invalid: L'URL de l'issue doit commencer par http:// ou https://
1286
1312
  error_not_found: 'Erreur introuvable : %{id}'
1287
1313
  batch_failed:
1288
1314
  mute:
@@ -1415,6 +1441,10 @@ fr:
1415
1441
  other: "%{value} erreurs"
1416
1442
  many: "%{value} erreurs"
1417
1443
  view_in_dashboard: Voir dans le tableau de bord
1444
+ burst:
1445
+ suppressed: "Plus de %{limit} nouvelles erreurs ont été signalées dans %{application} en %{window} secondes."
1446
+ still_recorded: "Les notifications pour les nouvelles erreurs suivantes sont suspendues jusqu'à la fin de cet intervalle ; chaque erreur reste enregistrée."
1447
+ dashboard: "Tableau de bord : %{url}"
1418
1448
  storm:
1419
1449
  detected: Tempête d'erreurs détectée dans %{application} à %{started_at}.
1420
1450
  mode:
@@ -431,6 +431,7 @@ it:
431
431
  issue_section:
432
432
  title: Sistema di segnalazioni
433
433
  view_issue: Vedi la segnalazione
434
+ unsafe_link: "Questo link alla segnalazione non è un URL http(s), quindi viene mostrato come testo e non può essere aperto."
434
435
  linked: Collegata
435
436
  issue_reference: "%{provider} #%{number}"
436
437
  states:
@@ -600,6 +601,7 @@ it:
600
601
  snapshot_stale: da un'occorrenza precedente — quelle successive non hanno fornito contesto
601
602
  snapshot_fidelity_lite: acquisizione ridotta (la protezione dagli storm ha scartato i payload di contesto)
602
603
  snapshot_fidelity_minimal: conteggiato durante uno storm — non è stato acquisito alcun contesto
604
+ snapshot_fidelity_partial: snapshot misto — alcuni campi provengono da un'occorrenza precedente
603
605
  snapshot_unknown: acquisita prima che RED registrasse la provenienza delle istantanee
604
606
  similar_errors:
605
607
  title: Errori simili
@@ -961,6 +963,7 @@ it:
961
963
  rate_per_hour: "%{value}/h"
962
964
  affected_users_incomplete: almeno — la protezione dagli storm ha scartato il dettaglio per evento
963
965
  data_unavailable: Le statistiche non sono al momento disponibili — i valori seguenti non sono una misurazione.
966
+ event_timing_incomplete: "Le marche temporali sono incomplete — la protezione tempeste le ha scartate; i totali restano esatti."
964
967
  unresolved: Non risolti
965
968
  unresolved_hint: In attesa di risoluzione
966
969
  resolution_rate: Tasso di risoluzione
@@ -996,6 +999,16 @@ it:
996
999
  one: "%{count} tipo"
997
1000
  other: "%{count} tipi"
998
1001
  many: "%{count} tipi"
1002
+ errors_page:
1003
+ csrf:
1004
+ title: "Il token di sessione è scaduto"
1005
+ message: "Torna indietro, ricarica la pagina e riprova. Non è stato modificato nulla."
1006
+ bad_request:
1007
+ title: "Impossibile interpretare questa richiesta"
1008
+ message: "Un valore obbligatorio era assente o non valido. Torna indietro e riprova."
1009
+ not_acceptable:
1010
+ title: "Questo formato non è disponibile"
1011
+ message: "La dashboard non può produrre il formato richiesto."
999
1012
  settings:
1000
1013
  title: Impostazioni
1001
1014
  version: v%{version}
@@ -1119,6 +1132,8 @@ it:
1119
1132
  non impostato)
1120
1133
  environment: Ambiente a cui vengono attribuiti gli errori (Rails.env se non
1121
1134
  impostato)
1135
+ notification_burst_limit: "Notifiche di nuovi errori per intervallo e per processo (0 = nessun limite)"
1136
+ notification_burst_window_seconds: "Durata dell'intervallo delle notifiche di nuovi errori"
1122
1137
  notification_environments: Notifica solo per questi ambienti (tutti se non
1123
1138
  impostato)
1124
1139
  database: Database attivo per i registri degli errori
@@ -1231,6 +1246,16 @@ it:
1231
1246
  linked: Segnalazione collegata correttamente
1232
1247
  create_failed: 'Impossibile creare la segnalazione: %{reason}'
1233
1248
  link_failed: 'Impossibile collegare la segnalazione: %{reason}'
1249
+ status:
1250
+ updated: "Stato modificato in %{status}"
1251
+ invalid_transition: "Impossibile cambiare lo stato da %{from} a %{to}"
1252
+ unknown: "Questo stato non esiste"
1253
+ snooze:
1254
+ invalid_hours: "La durata del rinvio deve essere un numero intero di ore compreso tra 1 e %{max}"
1255
+ priority:
1256
+ invalid: "Questo livello di priorità non esiste"
1257
+ assign:
1258
+ blank: "Inserisci un nome a cui assegnare questo errore"
1234
1259
  not_enabled: "%{feature} non è abilitato. Abilitalo in %{file}"
1235
1260
  not_enabled_plural: "%{feature} non sono abilitati. Abilitali in %{file}"
1236
1261
  not_enabled_options: "%{feature} non è abilitato. Abilita %{options} in %{file}"
@@ -1273,6 +1298,7 @@ it:
1273
1298
  not_configured: Il tracciamento delle segnalazioni non è configurato
1274
1299
  already_linked: 'L''errore ha già una segnalazione collegata: %{url}'
1275
1300
  url_required: L'URL della segnalazione è obbligatorio
1301
+ url_invalid: L'URL della segnalazione deve iniziare con http:// o https://
1276
1302
  error_not_found: 'Errore non trovato: %{id}'
1277
1303
  batch_failed:
1278
1304
  mute:
@@ -1404,6 +1430,10 @@ it:
1404
1430
  other: "%{value} errori"
1405
1431
  many: "%{value} errori"
1406
1432
  view_in_dashboard: Vedi nel pannello
1433
+ burst:
1434
+ suppressed: "In %{application} sono stati segnalati più di %{limit} nuovi errori in %{window} secondi."
1435
+ still_recorded: "Le notifiche per ulteriori nuovi errori sono sospese fino al termine di questo intervallo; ogni errore viene comunque registrato."
1436
+ dashboard: "Pannello: %{url}"
1407
1437
  storm:
1408
1438
  detected: Rilevata tempesta di errori in %{application} alle %{started_at}.
1409
1439
  mode:
@@ -382,6 +382,7 @@ ja:
382
382
  issue_section:
383
383
  title: イシュートラッカー
384
384
  view_issue: イシューを表示
385
+ unsafe_link: "このイシューのリンクは http(s) の URL ではないため、テキストとして表示され、開くことはできません。"
385
386
  linked: 連携済み
386
387
  issue_reference: "%{provider} #%{number}"
387
388
  states:
@@ -531,6 +532,7 @@ ja:
531
532
  snapshot_stale: より前の発生から取得 — それ以降の発生はコンテキストを伴いませんでした
532
533
  snapshot_fidelity_lite: 縮小された取得 (storm 保護によりコンテキストの payload が破棄されました)
533
534
  snapshot_fidelity_minimal: storm 中にカウントされました — コンテキストは取得されていません
535
+ snapshot_fidelity_partial: 混在したスナップショット — 一部のフィールドは以前の発生時のものです
534
536
  snapshot_unknown: RED がスナップショットの出所を記録する前に取得されました
535
537
  similar_errors:
536
538
  title: 類似エラー
@@ -845,6 +847,7 @@ ja:
845
847
  rate_per_hour: "%{value}/時"
846
848
  affected_users_incomplete: 最少値 — storm 保護によりイベントごとの詳細が破棄されました
847
849
  data_unavailable: 統計は現在利用できません — 以下の数値は計測値ではありません。
850
+ event_timing_incomplete: "発生時刻の記録が不完全です — ストーム保護がタイムスタンプを破棄しました。合計値は正確です。"
848
851
  unresolved: 未解決
849
852
  unresolved_hint: 解決待ち
850
853
  resolution_rate: 解決率
@@ -874,6 +877,16 @@ ja:
874
877
  user_types_html: ユーザー %{user} · %{types}
875
878
  types:
876
879
  other: "%{count}種類"
880
+ errors_page:
881
+ csrf:
882
+ title: "セッショントークンの有効期限が切れました"
883
+ message: "前のページに戻って再読み込みし、もう一度お試しください。変更は行われていません。"
884
+ bad_request:
885
+ title: "このリクエストを処理できませんでした"
886
+ message: "必須の値が不足しているか、形式が正しくありません。前のページに戻って、もう一度お試しください。"
887
+ not_acceptable:
888
+ title: "この形式は利用できません"
889
+ message: "リクエストされた形式をダッシュボードで生成することはできません。"
877
890
  settings:
878
891
  title: 設定
879
892
  version: v%{version}
@@ -968,6 +981,8 @@ ja:
968
981
  sampling_rate: エラーを記録する割合
969
982
  application_name: このアプリケーションの名前 (未設定の場合は自動検出)
970
983
  environment: エラーを紐付ける環境(未設定の場合は Rails.env)
984
+ notification_burst_limit: "時間枠ごと・プロセスごとの新規エラー通知数(0 = 上限なし)"
985
+ notification_burst_window_seconds: "新規エラー通知の時間枠の長さ"
971
986
  notification_environments: 通知する環境を限定(未設定の場合はすべて)
972
987
  database: エラーログで使用中のデータベース
973
988
  use_separate_database: エラーログ専用の DB を使用します
@@ -1055,6 +1070,16 @@ ja:
1055
1070
  linked: イシューを連携しました
1056
1071
  create_failed: 'イシューの作成に失敗しました: %{reason}'
1057
1072
  link_failed: 'イシューの連携に失敗しました: %{reason}'
1073
+ status:
1074
+ updated: "ステータスを %{status} に変更しました"
1075
+ invalid_transition: "ステータスを %{from} から %{to} に変更することはできません"
1076
+ unknown: "そのステータスは存在しません"
1077
+ snooze:
1078
+ invalid_hours: "スヌーズ時間は 1 から %{max} までの整数(時間単位)で指定してください"
1079
+ priority:
1080
+ invalid: "その優先度は存在しません"
1081
+ assign:
1082
+ blank: "このエラーの担当者の名前を入力してください"
1058
1083
  not_enabled: "%{feature}は有効になっていません。%{file}で有効にしてください"
1059
1084
  not_enabled_plural: "%{feature}は有効になっていません。%{file}で有効にしてください"
1060
1085
  not_enabled_options: "%{feature}は有効になっていません。%{file}で%{options}を有効にしてください"
@@ -1094,6 +1119,7 @@ ja:
1094
1119
  not_configured: イシュートラッキングが設定されていません
1095
1120
  already_linked: 'このエラーにはすでにイシューが連携されています: %{url}'
1096
1121
  url_required: イシューの URL を入力してください
1122
+ url_invalid: イシューの URL は http:// または https:// で始まる必要があります
1097
1123
  error_not_found: 'エラーが見つかりません: %{id}'
1098
1124
  batch_failed:
1099
1125
  mute:
@@ -1211,6 +1237,10 @@ ja:
1211
1237
  threshold_errors:
1212
1238
  other: "%{value}件のエラー"
1213
1239
  view_in_dashboard: ダッシュボードで表示
1240
+ burst:
1241
+ suppressed: "%{application} で %{window} 秒以内に %{limit} 件を超える新しいエラーが報告されました。"
1242
+ still_recorded: "この時間枠が終わるまで、以降の新しいエラーの通知は一時停止されます。エラーはすべて引き続き記録されます。"
1243
+ dashboard: "ダッシュボード: %{url}"
1214
1244
  storm:
1215
1245
  detected: "%{started_at}に%{application}でエラーストームを検知しました。"
1216
1246
  mode:
@@ -438,6 +438,7 @@ pl:
438
438
  issue_section:
439
439
  title: System zgłoszeń
440
440
  view_issue: Zobacz zgłoszenie
441
+ unsafe_link: "Ten odnośnik do zgłoszenia nie jest adresem URL http(s), dlatego jest wyświetlany jako tekst i nie można go otworzyć."
441
442
  linked: Powiązane
442
443
  issue_reference: "%{provider} #%{number}"
443
444
  states:
@@ -610,6 +611,7 @@ pl:
610
611
  snapshot_stale: z wcześniejszego wystąpienia — późniejsze nie przyniosły kontekstu
611
612
  snapshot_fidelity_lite: ograniczone przechwytywanie (ochrona przed storm odrzuciła payloady kontekstu)
612
613
  snapshot_fidelity_minimal: zliczone podczas storm — nie przechwycono żadnego kontekstu
614
+ snapshot_fidelity_partial: mieszany zrzut — część pól pochodzi z wcześniejszego wystąpienia
613
615
  snapshot_unknown: przechwycono, zanim RED zaczął zapisywać pochodzenie migawek
614
616
  similar_errors:
615
617
  title: Podobne błędy
@@ -977,6 +979,7 @@ pl:
977
979
  rate_per_hour: "%{value}/godz."
978
980
  affected_users_incomplete: co najmniej — ochrona przed storm odrzuciła szczegóły poszczególnych zdarzeń
979
981
  data_unavailable: Statystyki są obecnie niedostępne — poniższe liczby nie są pomiarem.
982
+ event_timing_incomplete: "Znaczniki czasu są niepełne — ochrona przed burzą je odrzuciła; sumy pozostają dokładne."
980
983
  unresolved: Nierozwiązane
981
984
  unresolved_hint: Oczekują na rozwiązanie
982
985
  resolution_rate: Wskaźnik rozwiązań
@@ -1016,6 +1019,16 @@ pl:
1016
1019
  other: "%{count} typu"
1017
1020
  few: "%{count} typy"
1018
1021
  many: "%{count} typów"
1022
+ errors_page:
1023
+ csrf:
1024
+ title: "Token sesji wygasł"
1025
+ message: "Wróć, odśwież stronę i spróbuj ponownie. Nic nie zostało zmienione."
1026
+ bad_request:
1027
+ title: "Nie udało się zrozumieć tego żądania"
1028
+ message: "Brakowało wymaganej wartości lub była ona nieprawidłowa. Wróć i spróbuj ponownie."
1029
+ not_acceptable:
1030
+ title: "Ten format jest niedostępny"
1031
+ message: "Panel nie może wygenerować formatu, o który poproszono w tym żądaniu."
1019
1032
  settings:
1020
1033
  title: Ustawienia
1021
1034
  version: v%{version}
@@ -1149,6 +1162,8 @@ pl:
1149
1162
  ustawiono)
1150
1163
  environment: Środowisko, do którego przypisywane są błędy (Rails.env, jeśli
1151
1164
  nie ustawiono)
1165
+ notification_burst_limit: "Powiadomienia o nowych błędach na okno czasowe i proces (0 = bez limitu)"
1166
+ notification_burst_window_seconds: "Długość okna czasowego powiadomień o nowych błędach"
1152
1167
  notification_environments: Powiadamiaj tylko dla tych środowisk (wszystkie,
1153
1168
  jeśli nie ustawiono)
1154
1169
  database: Aktywna baza danych dla dzienników błędów
@@ -1262,6 +1277,16 @@ pl:
1262
1277
  linked: Zgłoszenie zostało powiązane
1263
1278
  create_failed: 'Nie udało się utworzyć zgłoszenia: %{reason}'
1264
1279
  link_failed: 'Nie udało się powiązać zgłoszenia: %{reason}'
1280
+ status:
1281
+ updated: "Status zmieniono na %{status}"
1282
+ invalid_transition: "Nie można zmienić statusu z %{from} na %{to}"
1283
+ unknown: "Taki status nie istnieje"
1284
+ snooze:
1285
+ invalid_hours: "Czas odłożenia musi być całkowitą liczbą godzin od 1 do %{max}"
1286
+ priority:
1287
+ invalid: "Taki poziom priorytetu nie istnieje"
1288
+ assign:
1289
+ blank: "Podaj nazwę osoby, do której chcesz przypisać ten błąd"
1265
1290
  not_enabled: "%{feature} nie jest włączone. Włącz w %{file}"
1266
1291
  not_enabled_plural: "%{feature} nie są włączone. Włącz je w %{file}"
1267
1292
  not_enabled_options: "%{feature} nie jest włączone. Włącz %{options} w %{file}"
@@ -1303,6 +1328,7 @@ pl:
1303
1328
  not_configured: Śledzenie zgłoszeń nie jest skonfigurowane
1304
1329
  already_linked: 'Błąd ma już powiązane zgłoszenie: %{url}'
1305
1330
  url_required: Adres URL zgłoszenia jest wymagany
1331
+ url_invalid: Adres URL zgłoszenia musi zaczynać się od http:// lub https://
1306
1332
  error_not_found: 'Nie znaleziono błędu: %{id}'
1307
1333
  batch_failed:
1308
1334
  mute:
@@ -1441,6 +1467,10 @@ pl:
1441
1467
  few: "%{value} błędy"
1442
1468
  many: "%{value} błędów"
1443
1469
  view_in_dashboard: Zobacz w panelu
1470
+ burst:
1471
+ suppressed: "W aplikacji %{application} zgłoszono ponad %{limit} nowych błędów w ciągu %{window} sekund."
1472
+ still_recorded: "Powiadomienia o kolejnych nowych błędach są wstrzymane do końca tego okna czasowego; każdy błąd jest nadal zapisywany."
1473
+ dashboard: "Panel: %{url}"
1444
1474
  storm:
1445
1475
  detected: Wykryto sztorm błędów w %{application} o %{started_at}.
1446
1476
  mode:
@@ -436,6 +436,7 @@ pt-BR:
436
436
  issue_section:
437
437
  title: Rastreador de issues
438
438
  view_issue: Ver a issue
439
+ unsafe_link: "Este link da issue não é uma URL http(s), por isso é exibido como texto e não pode ser aberto."
439
440
  linked: Vinculada
440
441
  issue_reference: "%{provider} nº %{number}"
441
442
  states:
@@ -605,6 +606,7 @@ pt-BR:
605
606
  snapshot_stale: de uma ocorrência anterior — as posteriores não trouxeram contexto
606
607
  snapshot_fidelity_lite: captura reduzida (a proteção contra storms descartou os payloads de contexto)
607
608
  snapshot_fidelity_minimal: contabilizado durante um storm — nenhum contexto foi capturado
609
+ snapshot_fidelity_partial: snapshot misto — alguns campos vêm de uma ocorrência anterior
608
610
  snapshot_unknown: capturado antes de o RED registrar a procedência dos instantâneos
609
611
  similar_errors:
610
612
  title: Erros semelhantes
@@ -965,6 +967,7 @@ pt-BR:
965
967
  rate_per_hour: "%{value}/h"
966
968
  affected_users_incomplete: no mínimo — a proteção contra storms descartou o detalhe por evento
967
969
  data_unavailable: As estatísticas estão indisponíveis no momento — os números abaixo não são uma medição.
970
+ event_timing_incomplete: "Os horários estão incompletos — a proteção contra tempestades descartou os carimbos de tempo; os totais continuam exatos."
968
971
  unresolved: Não resolvidos
969
972
  unresolved_hint: Aguardando resolução
970
973
  resolution_rate: Taxa de resolução
@@ -1000,6 +1003,16 @@ pt-BR:
1000
1003
  one: "%{count} tipo"
1001
1004
  other: "%{count} tipos"
1002
1005
  many: "%{count} tipos"
1006
+ errors_page:
1007
+ csrf:
1008
+ title: "O token da sua sessão expirou"
1009
+ message: "Volte, recarregue a página e tente novamente. Nada foi alterado."
1010
+ bad_request:
1011
+ title: "Não foi possível interpretar esta solicitação"
1012
+ message: "Um valor obrigatório estava ausente ou malformado. Volte e tente novamente."
1013
+ not_acceptable:
1014
+ title: "Este formato não está disponível"
1015
+ message: "O painel não consegue gerar o formato pedido por esta solicitação."
1003
1016
  settings:
1004
1017
  title: Configurações
1005
1018
  version: v%{version}
@@ -1122,6 +1135,8 @@ pt-BR:
1122
1135
  application_name: Nome desta aplicação (detectado automaticamente se não for
1123
1136
  definido)
1124
1137
  environment: Ambiente ao qual os erros são atribuídos (Rails.env se não definido)
1138
+ notification_burst_limit: "Notificações de novos erros por intervalo e por processo (0 = sem limite)"
1139
+ notification_burst_window_seconds: "Duração do intervalo de notificações de novos erros"
1125
1140
  notification_environments: Notificar apenas para estes ambientes (todos se
1126
1141
  não definido)
1127
1142
  database: Banco de dados ativo para os logs de erros
@@ -1232,6 +1247,16 @@ pt-BR:
1232
1247
  linked: Issue vinculada com sucesso
1233
1248
  create_failed: 'Não foi possível criar a issue: %{reason}'
1234
1249
  link_failed: 'Não foi possível vincular a issue: %{reason}'
1250
+ status:
1251
+ updated: "Status alterado para %{status}"
1252
+ invalid_transition: "Não é possível alterar o status de %{from} para %{to}"
1253
+ unknown: "Esse status não existe"
1254
+ snooze:
1255
+ invalid_hours: "O tempo de adiamento deve ser um número inteiro de horas entre 1 e %{max}"
1256
+ priority:
1257
+ invalid: "Esse nível de prioridade não existe"
1258
+ assign:
1259
+ blank: "Informe um nome para atribuir este erro"
1235
1260
  not_enabled: "%{feature} não está ativado. Ative em %{file}"
1236
1261
  not_enabled_plural: "%{feature} não estão ativados. Ative-os em %{file}"
1237
1262
  not_enabled_options: "%{feature} não está ativado. Ative %{options} em %{file}"
@@ -1274,6 +1299,7 @@ pt-BR:
1274
1299
  not_configured: O rastreamento de issues não está configurado
1275
1300
  already_linked: 'O erro já tem uma issue vinculada: %{url}'
1276
1301
  url_required: A URL da issue é obrigatória
1302
+ url_invalid: A URL da issue deve começar com http:// ou https://
1277
1303
  error_not_found: 'Erro não encontrado: %{id}'
1278
1304
  batch_failed:
1279
1305
  mute:
@@ -1405,6 +1431,10 @@ pt-BR:
1405
1431
  other: "%{value} erros"
1406
1432
  many: "%{value} erros"
1407
1433
  view_in_dashboard: Ver no painel
1434
+ burst:
1435
+ suppressed: "Mais de %{limit} novos erros foram registrados em %{application} em %{window} segundos."
1436
+ still_recorded: "As notificações de outros novos erros ficam pausadas até o fim desse intervalo; todos os erros continuam sendo registrados."
1437
+ dashboard: "Painel: %{url}"
1408
1438
  storm:
1409
1439
  detected: Tempestade de erros detectada em %{application} às %{started_at}.
1410
1440
  mode: