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 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
Instance Method Summary collapse
- #blocklist(event) ⇒ Object
- #safelist(event) ⇒ Object
- #throttle(event) ⇒ Object
- #track(event) ⇒ Object
Class Method Details
.payload ⇒ Object
18 19 20 21 22 23 |
# File 'lib/gitlab/metrics/subscribers/rack_attack.rb', line 18 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
34 35 36 |
# File 'lib/gitlab/metrics/subscribers/rack_attack.rb', line 34 def blocklist(event) log_into_auth_logger(event, status: 403) end |
#safelist(event) ⇒ Object
25 26 27 28 |
# File 'lib/gitlab/metrics/subscribers/rack_attack.rb', line 25 def safelist(event) req = event.payload[:request] Gitlab::Instrumentation::Throttle.safelist = req.env['rack.attack.matched'] end |
#throttle(event) ⇒ Object
30 31 32 |
# File 'lib/gitlab/metrics/subscribers/rack_attack.rb', line 30 def throttle(event) log_into_auth_logger(event, status: 429) end |
#track(event) ⇒ Object
38 39 40 |
# File 'lib/gitlab/metrics/subscribers/rack_attack.rb', line 38 def track(event) log_into_auth_logger(event, status: nil) end |