File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 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
Original file line number Diff line number Diff line change 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
You can’t perform that action at this time.
0 commit comments