-
Notifications
You must be signed in to change notification settings - Fork 151
feat: add Rails.event subscriber #734
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
ca17fab
38b0c00
d3d2767
16ed55f
c12143c
d260b79
34ee116
5acb11e
7afd2c6
22a25e9
7aa88a0
53b1add
7857ff0
607fc22
07e84b1
c7a4d7a
ff4b758
9ab46ff
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,3 +1,3 @@ | ||
| ruby_version: 3.0 | ||
| ruby_version: 3.4 | ||
| fix: true | ||
| parallel: true |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1 +1 @@ | ||
| ruby 3.5-dev | ||
| ruby 3.4.5 |
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
|
|
@@ -22,11 +22,11 @@ def finish(name, id, payload) | |||||
| end | ||||||
|
|
||||||
| def record(name, payload) | ||||||
| if Honeybadger.config.load_plugin_insights_events?(:rails) | ||||||
| if Honeybadger.config.load_plugin_insights?(:rails, feature: :active_support_events) | ||||||
| Honeybadger.event(name, payload) | ||||||
| end | ||||||
|
|
||||||
| if Honeybadger.config.load_plugin_insights_metrics?(:rails) | ||||||
| if Honeybadger.config.load_plugin_insights?(:rails, feature: :metrics) | ||||||
| metric_source "rails" | ||||||
| record_metrics(name, payload) | ||||||
| end | ||||||
|
|
@@ -164,4 +164,12 @@ def format_payload(payload) | |||||
|
|
||||||
| class ActiveStorageSubscriber < NotificationSubscriber | ||||||
| end | ||||||
|
|
||||||
| class RailsEventSubscriber | ||||||
| def emit(event) | ||||||
| return unless Honeybadger.config.load_plugin_insights?(:rails, feature: :structured_events) | ||||||
|
|
||||||
| Honeybadger.event(event[:name], event.except(:name, :timestamp)) | ||||||
|
||||||
| Honeybadger.event(event[:name], event.except(:name, :timestamp)) | |
| Honeybadger.event(event.name, event.payload) |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,41 @@ | ||
| require_relative "../rails_helper" | ||
|
|
||
| describe "Rails Insights Event Subscriber", if: RAILS_PRESENT, type: :request do | ||
joshuap marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| load_rails_hooks(self) | ||
|
|
||
| before do | ||
| Honeybadger.config[:"insights.enabled"] = true | ||
| Honeybadger.config[:"events.batch_size"] = 0 | ||
|
|
||
| Honeybadger::Backend::Test.events.clear | ||
| end | ||
|
|
||
| it "subscribes to Rails.event when available", if: defined?(Rails.event) do | ||
| Rails.event.notify("test.rails_event", {rails_key: "rails_value"}) | ||
|
|
||
| sleep(0.1) | ||
|
|
||
| rails_events = Honeybadger::Backend::Test.events.select { |e| e[:event_type] == "test.rails_event" } | ||
| expect(rails_events).not_to be_empty | ||
| expect(rails_events.first[:payload][:rails_key]).to eq("rails_value") | ||
| expect(rails_events.first[:name]).to be_blank | ||
| end | ||
|
|
||
| it "does not capture Rails.event events when structured_events is disabled", if: defined?(Rails.event) do | ||
| Honeybadger.config[:"rails.insights.structured_events"] = false | ||
|
|
||
| # Reload the plugin to apply the new config | ||
| Honeybadger::Plugin.instances[:rails].load!(Honeybadger.config) | ||
|
|
||
| Rails.event.notify("test.disabled_event", {rails_key: "rails_value"}) | ||
|
|
||
| sleep(0.1) | ||
|
|
||
| rails_events = Honeybadger::Backend::Test.events.select { |e| e[:event_type] == "test.disabled_event" } | ||
| expect(rails_events).to be_empty | ||
| end | ||
|
|
||
| it "gracefully handles Rails.event when not available", unless: defined?(Rails.event) do | ||
| expect { Honeybadger::Plugin.instances[:rails].load!(Honeybadger.config) }.not_to raise_error | ||
| end | ||
| end | ||
Uh oh!
There was an error while loading. Please reload this page.