rails_error_dashboard 0.10.0 → 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 +3 -0
- 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/views/layouts/rails_error_dashboard.html.erb +30 -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 +51 -1
- 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/settings.html.erb +2 -0
- data/config/locales/de.yml +19 -2
- data/config/locales/en.yml +17 -0
- data/config/locales/es.yml +18 -2
- data/config/locales/fr.yml +19 -2
- data/config/locales/it.yml +27 -3
- data/config/locales/ja.yml +17 -3
- data/config/locales/pl.yml +19 -2
- data/config/locales/pt-BR.yml +18 -2
- data/config/locales/ru.yml +18 -2
- data/config/locales/uk.yml +18 -2
- data/config/locales/zh-CN.yml +15 -3
- data/db/migrate/20260826000001_add_environment_to_error_logs.rb +26 -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_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/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/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/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/version.rb +1 -1
- data/lib/rails_error_dashboard.rb +1 -0
- data/lib/tasks/rails_error_dashboard_tasks.rake +6 -0
- metadata +4 -2
|
@@ -29,6 +29,29 @@ module RailsErrorDashboard
|
|
|
29
29
|
true
|
|
30
30
|
end
|
|
31
31
|
|
|
32
|
+
# Does this error's environment pass config.notification_environments?
|
|
33
|
+
#
|
|
34
|
+
# nil list → everything notifies (the pre-0.11 behaviour). Accepts an
|
|
35
|
+
# ErrorLog, a bare environment name, or nothing (the process
|
|
36
|
+
# environment) — the storm and baseline paths have no row to hand over.
|
|
37
|
+
# A legacy row with a NULL environment is judged as the process
|
|
38
|
+
# environment, so upgrading never silences an error that was notifying
|
|
39
|
+
# before. Fails open: an allowlist bug must not lose a page.
|
|
40
|
+
#
|
|
41
|
+
# @param subject [ErrorLog, String, nil]
|
|
42
|
+
# @return [Boolean]
|
|
43
|
+
def environment_allowed?(subject = nil)
|
|
44
|
+
allowed = RailsErrorDashboard.configuration.notification_environments
|
|
45
|
+
return true if allowed.nil?
|
|
46
|
+
|
|
47
|
+
name = subject.respond_to?(:environment) ? subject.environment : subject
|
|
48
|
+
name = RailsErrorDashboard.configuration.current_environment if name.blank?
|
|
49
|
+
allowed.include?(name.to_s)
|
|
50
|
+
rescue => e
|
|
51
|
+
RailsErrorDashboard::Logger.debug("[RailsErrorDashboard] NotificationThrottler.environment_allowed? failed: #{e.message}")
|
|
52
|
+
true
|
|
53
|
+
end
|
|
54
|
+
|
|
32
55
|
# Does the error's severity meet the configured minimum?
|
|
33
56
|
# @param error_log [ErrorLog] The error to check
|
|
34
57
|
# @return [Boolean] true if severity is at or above minimum
|
|
@@ -46,6 +46,7 @@ module RailsErrorDashboard
|
|
|
46
46
|
controller: error_log.controller_name,
|
|
47
47
|
action: error_log.action_name,
|
|
48
48
|
platform: error_log.platform,
|
|
49
|
+
environment: error_log.environment,
|
|
49
50
|
occurrences: error_log.occurrence_count,
|
|
50
51
|
first_seen_at: error_log.first_seen_at&.iso8601,
|
|
51
52
|
last_seen_at: error_log.last_seen_at&.iso8601,
|
|
@@ -64,6 +64,7 @@ module RailsErrorDashboard
|
|
|
64
64
|
locale
|
|
65
65
|
)
|
|
66
66
|
},
|
|
67
|
+
*environment_fields(error_log, locale),
|
|
67
68
|
{
|
|
68
69
|
type: "mrkdwn",
|
|
69
70
|
text: NotificationHelpers.field(
|
|
@@ -74,6 +75,14 @@ module RailsErrorDashboard
|
|
|
74
75
|
}
|
|
75
76
|
end
|
|
76
77
|
|
|
78
|
+
# One field when the error carries an environment, none for a legacy
|
|
79
|
+
# row — so pre-0.11 notifications render exactly as they did.
|
|
80
|
+
def self.environment_fields(error_log, locale)
|
|
81
|
+
return [] unless error_log.respond_to?(:environment) && error_log.environment.present?
|
|
82
|
+
|
|
83
|
+
[ { type: "mrkdwn", text: NotificationHelpers.field(:environment, error_log.environment, locale) } ]
|
|
84
|
+
end
|
|
85
|
+
|
|
77
86
|
def self.message_block(error_log, locale)
|
|
78
87
|
{
|
|
79
88
|
type: "section",
|
|
@@ -232,6 +232,8 @@ module RailsErrorDashboard
|
|
|
232
232
|
def maybe_storm_notification(state)
|
|
233
233
|
return if state == :closed
|
|
234
234
|
return unless RailsErrorDashboard.configuration.storm_notification
|
|
235
|
+
# A storm on staging should not page whoever is on call for production.
|
|
236
|
+
return unless RailsErrorDashboard::Services::NotificationThrottler.environment_allowed?
|
|
235
237
|
|
|
236
238
|
episode = breaker.episode_snapshot
|
|
237
239
|
return unless episode
|
|
@@ -37,6 +37,7 @@ module RailsErrorDashboard
|
|
|
37
37
|
message: error_log.message,
|
|
38
38
|
severity: error_log.severity.to_s,
|
|
39
39
|
platform: error_log.platform,
|
|
40
|
+
environment: error_log.environment,
|
|
40
41
|
controller: error_log.controller_name,
|
|
41
42
|
action: error_log.action_name,
|
|
42
43
|
occurrence_count: error_log.occurrence_count,
|
|
@@ -109,6 +109,7 @@ require "rails_error_dashboard/commands/resolve_error"
|
|
|
109
109
|
require "rails_error_dashboard/commands/create_issue"
|
|
110
110
|
require "rails_error_dashboard/commands/link_existing_issue"
|
|
111
111
|
require "rails_error_dashboard/commands/flush_storm_counts"
|
|
112
|
+
require "rails_error_dashboard/commands/backfill_environments"
|
|
112
113
|
require "rails_error_dashboard/services/issue_body_formatter"
|
|
113
114
|
require "rails_error_dashboard/commands/batch_resolve_errors"
|
|
114
115
|
require "rails_error_dashboard/commands/batch_delete_errors"
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
namespace :rails_error_dashboard do
|
|
4
|
+
desc "Fill in environment on error logs captured before the column existed (from environment_info.rails_env)"
|
|
5
|
+
task backfill_environments: :environment do
|
|
6
|
+
updated = RailsErrorDashboard::Commands::BackfillEnvironments.call
|
|
7
|
+
puts "rails_error_dashboard: backfilled environment on #{updated} error log(s)."
|
|
8
|
+
end
|
|
9
|
+
|
|
4
10
|
namespace :db do
|
|
5
11
|
desc "Drop all Rails Error Dashboard database tables (⚠️ DESTRUCTIVE - deletes all error data)"
|
|
6
12
|
task drop: :environment do
|
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.
|
|
4
|
+
version: 0.11.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Anjan Jagirdar
|
|
@@ -392,6 +392,7 @@ files:
|
|
|
392
392
|
- db/migrate/20260613000001_create_storm_events.rb
|
|
393
393
|
- db/migrate/20260730000001_create_rails_error_dashboard_rack_attack_events.rb
|
|
394
394
|
- db/migrate/20260824000001_add_user_agent_to_rack_attack_events.rb
|
|
395
|
+
- db/migrate/20260826000001_add_environment_to_error_logs.rb
|
|
395
396
|
- lib/generators/rails_error_dashboard/install/install_generator.rb
|
|
396
397
|
- lib/generators/rails_error_dashboard/install/templates/README
|
|
397
398
|
- lib/generators/rails_error_dashboard/install/templates/initializer.rb
|
|
@@ -401,6 +402,7 @@ files:
|
|
|
401
402
|
- lib/rails_error_dashboard.rb
|
|
402
403
|
- lib/rails_error_dashboard/commands/add_error_comment.rb
|
|
403
404
|
- lib/rails_error_dashboard/commands/assign_error.rb
|
|
405
|
+
- lib/rails_error_dashboard/commands/backfill_environments.rb
|
|
404
406
|
- lib/rails_error_dashboard/commands/batch_delete_errors.rb
|
|
405
407
|
- lib/rails_error_dashboard/commands/batch_mute_errors.rb
|
|
406
408
|
- lib/rails_error_dashboard/commands/batch_resolve_errors.rb
|
|
@@ -559,7 +561,7 @@ metadata:
|
|
|
559
561
|
funding_uri: https://github.com/sponsors/AnjanJ
|
|
560
562
|
post_install_message: |
|
|
561
563
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
562
|
-
RED (Rails Error Dashboard) v0.
|
|
564
|
+
RED (Rails Error Dashboard) v0.11.0
|
|
563
565
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
564
566
|
|
|
565
567
|
First install:
|