summaryrefslogtreecommitdiff
path: root/lib/gitlab/metrics/exporter/web_exporter.rb
blob: 3940f6fa155a3956da8f7c9d9479e4b08a21dc90 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# frozen_string_literal: true

require 'webrick'
require 'prometheus/client/rack/exporter'

module Gitlab
  module Metrics
    module Exporter
      class WebExporter < BaseExporter
        ExporterCheck = Struct.new(:exporter) do
          def readiness
            Gitlab::HealthChecks::Result.new(
              'web_exporter', exporter.running)
          end
        end

        attr_reader :running

        # This exporter is always run on master process
        def initialize
          super

          self.readiness_checks = [
            WebExporter::ExporterCheck.new(self),
            Gitlab::HealthChecks::PumaCheck,
            Gitlab::HealthChecks::UnicornCheck
          ]
        end

        def settings
          Gitlab.config.monitoring.web_exporter
        end

        def log_filename
          File.join(Rails.root, 'log', 'web_exporter.log')
        end

        private

        def start_working
          @running = true
          super
        end

        def stop_working
          @running = false
          wait_in_blackout_period if server && thread.alive?
          super
        end

        def wait_in_blackout_period
          return unless blackout_seconds > 0

          @server.logger.info(
            message: 'starting blackout...',
            duration_s: blackout_seconds)

          sleep(blackout_seconds)
        end

        def blackout_seconds
          settings['blackout_seconds'].to_i
        end
      end
    end
  end
end