debian-mirror-gitlab/lib/gitlab/memory/watchdog/event_reporter.rb
2023-03-04 22:38:38 +05:30

68 lines
1.8 KiB
Ruby

# frozen_string_literal: true
module Gitlab
module Memory
class Watchdog
class EventReporter
include ::Gitlab::Utils::StrongMemoize
attr_reader :logger
def initialize(logger: Gitlab::AppLogger)
@logger = logger
init_prometheus_metrics
end
def started(labels = {})
logger.info(message: 'started', **log_labels(labels))
end
def stopped(labels = {})
logger.info(message: 'stopped', **log_labels(labels))
end
def threshold_violated(monitor_name)
@counter_violations.increment(reason: monitor_name)
end
def strikes_exceeded(monitor_name, labels = {})
logger.warn(log_labels(labels))
@counter_violations_handled.increment(reason: monitor_name)
end
private
def log_labels(extra = {})
extra.merge(
pid: $$,
worker_id: worker_id,
memwd_rss_bytes: process_rss_bytes
)
end
def process_rss_bytes
Gitlab::Metrics::System.memory_usage_rss[:total]
end
def worker_id
::Prometheus::PidProvider.worker_id
end
def init_prometheus_metrics
default_labels = { pid: worker_id }
@counter_violations = Gitlab::Metrics.counter(
:gitlab_memwd_violations_total,
'Total number of times a Ruby process violated a memory threshold',
default_labels
)
@counter_violations_handled = Gitlab::Metrics.counter(
:gitlab_memwd_violations_handled_total,
'Total number of times Ruby process memory violations were handled',
default_labels
)
end
end
end
end
end