diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-12-06 21:08:22 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-12-06 21:08:22 +0300 |
commit | 5a73318262aab6ab952f2b7205b3674ea1f20053 (patch) | |
tree | e53191adbc529ce23ca08a73e1235c7b6fb6ced5 /lib/gitlab/memory | |
parent | 552877c4d1c535f529be13862692a8fe826a72a2 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'lib/gitlab/memory')
-rw-r--r-- | lib/gitlab/memory/watchdog/configurator.rb | 2 | ||||
-rw-r--r-- | lib/gitlab/memory/watchdog/sidekiq_event_reporter.rb | 56 |
2 files changed, 57 insertions, 1 deletions
diff --git a/lib/gitlab/memory/watchdog/configurator.rb b/lib/gitlab/memory/watchdog/configurator.rb index 880f9800d96..2848d6c36e9 100644 --- a/lib/gitlab/memory/watchdog/configurator.rb +++ b/lib/gitlab/memory/watchdog/configurator.rb @@ -30,7 +30,7 @@ module Gitlab config.write_heap_dumps = write_heap_dumps? config.sleep_time_seconds = sidekiq_sleep_time config.monitors(&configure_monitors_for_sidekiq) - config.event_reporter = EventReporter.new(logger: ::Sidekiq.logger) + config.event_reporter = SidekiqEventReporter.new end end diff --git a/lib/gitlab/memory/watchdog/sidekiq_event_reporter.rb b/lib/gitlab/memory/watchdog/sidekiq_event_reporter.rb new file mode 100644 index 00000000000..db94edd0992 --- /dev/null +++ b/lib/gitlab/memory/watchdog/sidekiq_event_reporter.rb @@ -0,0 +1,56 @@ +# frozen_string_literal: true + +module Gitlab + module Memory + class Watchdog + class SidekiqEventReporter + include ::Gitlab::Utils::StrongMemoize + + delegate :threshold_violated, :started, :stopped, :logger, to: :event_reporter + + def initialize(logger: ::Sidekiq.logger) + @event_reporter = EventReporter.new(logger: logger) + init_prometheus_metrics + end + + def strikes_exceeded(monitor_name, labels = {}) + running_jobs = fetch_running_jobs + labels[:running_jobs] = running_jobs + increment_worker_counters(running_jobs) + + event_reporter.strikes_exceeded(monitor_name, labels) + end + + private + + attr_reader :event_reporter + + def fetch_running_jobs + running_jobs = [] + Gitlab::SidekiqDaemon::Monitor.instance.with_running_jobs do |jobs| + running_jobs = jobs.map do |jid, job| + { + jid: jid, + worker_class: job[:worker_class].name + } + end + end + running_jobs + end + + def increment_worker_counters(running_jobs) + running_jobs.each do |job| + @sidekiq_watchdog_running_jobs_counter.increment({ worker_class: job[:worker_class] }) + end + end + + def init_prometheus_metrics + @sidekiq_watchdog_running_jobs_counter = ::Gitlab::Metrics.counter( + :sidekiq_watchdog_running_jobs_total, + 'Current running jobs when limit was reached' + ) + end + end + end + end +end |