Module: Gitlab::Database::HealthStatus

Defined in:
lib/gitlab/database/health_status.rb,
lib/gitlab/database/health_status/logger.rb,
lib/gitlab/database/health_status/context.rb,
lib/gitlab/database/health_status/signals.rb,
lib/gitlab/database/health_status/indicators.rb,
lib/gitlab/database/health_status/indicators/wal_rate.rb,
lib/gitlab/database/health_status/indicators/patroni_apdex.rb,
lib/gitlab/database/health_status/indicators/write_ahead_log.rb,
lib/gitlab/database/health_status/indicators/autovacuum_active_on_table.rb,
lib/gitlab/database/health_status/indicators/prometheus_alert_indicator.rb

Defined Under Namespace

Modules: Indicators, Signals Classes: Context, Logger

Constant Summary collapse

DEFAULT_INIDICATORS =
[
  Indicators::AutovacuumActiveOnTable,
  Indicators::WriteAheadLog,
  Indicators::PatroniApdex,
  Indicators::WalRate
].freeze

Class Method Summary collapse

Class Method Details

.evaluate(context, indicators = DEFAULT_INIDICATORS) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/gitlab/database/health_status.rb', line 14

def evaluate(context, indicators = DEFAULT_INIDICATORS)
  indicators.map do |indicator|
    signal = begin
      indicator.new(context).evaluate
    rescue StandardError => e
      Gitlab::ErrorTracking.track_exception(e, **context.status_checker_info)

      Signals::Unknown.new(indicator, reason: "unexpected error: #{e.message} (#{e.class})")
    end

    log_signal(signal, context) if signal.log_info?

    signal
  end
end

.log_signal(signal, context) ⇒ Object



30
31
32
33
34
35
36
37
# File 'lib/gitlab/database/health_status.rb', line 30

def log_signal(signal, context)
  Gitlab::Database::HealthStatus::Logger.info(**context.status_checker_info.merge(
    health_status_indicator: signal.indicator_class.to_s,
    indicator_signal: signal.short_name,
    signal_reason: signal.reason,
    message: "#{context.status_checker} signaled: #{signal}"
  ))
end