Skip to content

Commit d434e51

Browse files
Don't send healthcheck events to AppSignal to save storage
1 parent 9ab07e5 commit d434e51

2 files changed

Lines changed: 66 additions & 0 deletions

File tree

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
class FilteredEventSubscriber
2+
def initialize(subscriber, filter:)
3+
@subscriber = subscriber
4+
@filter = filter
5+
end
6+
7+
def emit(event)
8+
@subscriber.emit(event) if @filter.call(event)
9+
end
10+
end
11+
12+
class HealthCheckFilteredEventSubscriber < FilteredEventSubscriber
13+
def initialize(subscriber)
14+
filter = ->(event) { event.dig(:payload, :controller) != "Rails::HealthController" }
15+
16+
super(subscriber, filter:)
17+
end
18+
end
19+
20+
Rails.application.config.to_prepare do
21+
next unless defined?(Appsignal::Integrations::ActiveSupportEventReporter::Subscriber)
22+
23+
subscribers = Rails.event.instance_variable_get(:@subscribers)
24+
original = subscribers.find { it[:subscriber].is_a? Appsignal::Integrations::ActiveSupportEventReporter::Subscriber }
25+
26+
next unless original
27+
28+
subscribers.delete original
29+
30+
filtered = HealthCheckFilteredEventSubscriber.new(original[:subscriber])
31+
Rails.event.subscribe(filtered, &original[:filter])
32+
end
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
require "test_helper"
2+
3+
class HealthCheckEventFilteringTest < ActionDispatch::IntegrationTest
4+
test "filters out health check request events" do
5+
with_filtered_event_reporter do
6+
assert_no_event_reported("action_controller.request_started") do
7+
get health_check_path
8+
assert_response :ok
9+
end
10+
end
11+
end
12+
13+
test "passes through non-health check request events" do
14+
assert_event_reported("action_controller.request_completed") do
15+
get root_path
16+
end
17+
end
18+
19+
private
20+
21+
def with_filtered_event_reporter
22+
original = ActiveSupport.event_reporter
23+
ActiveSupport.event_reporter = FilteredEventReporter.new(original)
24+
yield
25+
ensure
26+
ActiveSupport.event_reporter = original
27+
end
28+
29+
class FilteredEventReporter < SimpleDelegator
30+
def subscribe(subscriber, &filter)
31+
super(HealthCheckFilteredEventSubscriber.new(subscriber), &filter)
32+
end
33+
end
34+
end

0 commit comments

Comments
 (0)