Class: Gitlab::Metrics::Subscribers::RackAttack
- Inherits:
-
ActiveSupport::Subscriber
- Object
- ActiveSupport::Subscriber
- Gitlab::Metrics::Subscribers::RackAttack
- Defined in:
- lib/gitlab/metrics/subscribers/rack_attack.rb
Overview
Adds logging and metrics for all Rack Attack blocks and throttling events. Instrument the cache operations of RackAttack to use in structured logs. Two fields are exposed:
- rack_attack_redis_count: the number of redis calls triggered by RackAttack in a request.
- rack_attack_redis_duration_s: the total duration of all redis calls triggered by RackAttack in a request.
Constant Summary collapse
- INSTRUMENTATION_STORE_KEY =
:rack_attack_instrumentation
Class Method Summary collapse
-
.parameter_filter ⇒ Object
Rubocop requires this be public.
- .payload ⇒ Object
Instance Method Summary collapse
- #blocklist(event) ⇒ Object
- #safelist(event) ⇒ Object
- #throttle(event) ⇒ Object
- #track(event) ⇒ Object
Class Method Details
.parameter_filter ⇒ Object
Rubocop requires this be public
23 24 25 |
# File 'lib/gitlab/metrics/subscribers/rack_attack.rb', line 23 def self.parameter_filter @parameter_filter ||= ActiveSupport::ParameterFilter.new(Rails.application.config.filter_parameters) end |
.payload ⇒ Object
15 16 17 18 19 20 |
# File 'lib/gitlab/metrics/subscribers/rack_attack.rb', line 15 def self.payload Gitlab::SafeRequestStore[INSTRUMENTATION_STORE_KEY] ||= { rack_attack_redis_count: 0, rack_attack_redis_duration_s: 0.0 } end |
Instance Method Details
#blocklist(event) ⇒ Object
37 38 39 40 |
# File 'lib/gitlab/metrics/subscribers/rack_attack.rb', line 37 def blocklist(event) log_into_auth_logger(event, status: 403) report_metrics(event) end |
#safelist(event) ⇒ Object
27 28 29 30 |
# File 'lib/gitlab/metrics/subscribers/rack_attack.rb', line 27 def safelist(event) req = event.payload[:request] Gitlab::Instrumentation::Throttle.safelist = req.env['rack.attack.matched'] end |
#throttle(event) ⇒ Object
32 33 34 35 |
# File 'lib/gitlab/metrics/subscribers/rack_attack.rb', line 32 def throttle(event) log_into_auth_logger(event, status: 429) report_metrics(event) end |
#track(event) ⇒ Object
42 43 44 45 |
# File 'lib/gitlab/metrics/subscribers/rack_attack.rb', line 42 def track(event) log_into_auth_logger(event, status: nil) report_metrics(event) end |