Class: Gitlab::Metrics::Subscribers::ExternalHttp
- Inherits:
-
ActiveSupport::Subscriber
- Object
- ActiveSupport::Subscriber
- Gitlab::Metrics::Subscribers::ExternalHttp
- Defined in:
- lib/gitlab/metrics/subscribers/external_http.rb
Overview
Class for tracking the total time spent in external HTTP See more at gitlab.com/gitlab-org/labkit-ruby/-/blob/v0.14.0/lib/gitlab-labkit.rb#L18
Constant Summary collapse
- DEFAULT_STATUS_CODE =
'undefined'
- DETAIL_STORE =
:external_http_detail_store
- COUNTER =
:external_http_count
- DURATION =
:external_http_duration_s
- SLOW_REQUESTS =
:external_http_slow_requests
- THRESHOLD_SLOW_REQUEST_S =
5.0
- MAX_SLOW_REQUESTS =
10
Class Method Summary collapse
- .detail_store ⇒ Object
- .duration ⇒ Object
- .payload ⇒ Object
- .request_count ⇒ Object
- .slow_requests ⇒ Object
- .top_slowest_requests ⇒ Object
Instance Method Summary collapse
Class Method Details
.detail_store ⇒ Object
21 22 23 |
# File 'lib/gitlab/metrics/subscribers/external_http.rb', line 21 def self.detail_store ::Gitlab::SafeRequestStore[DETAIL_STORE] ||= [] end |
.duration ⇒ Object
25 26 27 |
# File 'lib/gitlab/metrics/subscribers/external_http.rb', line 25 def self.duration Gitlab::SafeRequestStore[DURATION].to_f end |
.payload ⇒ Object
45 46 47 48 49 50 51 |
# File 'lib/gitlab/metrics/subscribers/external_http.rb', line 45 def self.payload { COUNTER => request_count, DURATION => duration, SLOW_REQUESTS => top_slowest_requests }.compact end |
.request_count ⇒ Object
29 30 31 |
# File 'lib/gitlab/metrics/subscribers/external_http.rb', line 29 def self.request_count Gitlab::SafeRequestStore[COUNTER].to_i end |
.slow_requests ⇒ Object
33 34 35 |
# File 'lib/gitlab/metrics/subscribers/external_http.rb', line 33 def self.slow_requests Gitlab::SafeRequestStore[SLOW_REQUESTS] end |
.top_slowest_requests ⇒ Object
37 38 39 40 41 42 43 |
# File 'lib/gitlab/metrics/subscribers/external_http.rb', line 37 def self.top_slowest_requests requests = slow_requests return unless requests.present? requests.sort_by { |req| req[:duration_s] }.reverse.first(MAX_SLOW_REQUESTS) end |
Instance Method Details
#request(event) ⇒ Object
53 54 55 56 57 58 |
# File 'lib/gitlab/metrics/subscribers/external_http.rb', line 53 def request(event) payload = event.payload add_to_detail_store(event.time, payload) add_to_request_store(payload) expose_metrics(payload) end |