summaryrefslogtreecommitdiff
path: root/lib/gitlab/storage_check/cli.rb
blob: 04bf1bf1d2692c25412076ae588ed2ebb770855d (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
68
69
module Gitlab
  module StorageCheck
    class CLI
      def self.start!(args)
        runner = new(Gitlab::StorageCheck::OptionParser.parse!(args))
        runner.start_loop
      end

      attr_reader :logger, :options

      def initialize(options)
        @options = options
        @logger = Logger.new(STDOUT)
      end

      def start_loop
        logger.info "Checking #{options.target} every #{options.interval} seconds"

        if options.dryrun
          logger.info "Dryrun, exiting..."
          return
        end

        begin
          loop do
            response = GitlabCaller.new(options).call!
            log_response(response)
            update_settings(response)

            sleep options.interval
          end
        rescue Interrupt
          logger.info "Ending storage-check"
        end
      end

      def update_settings(response)
        previous_interval = options.interval

        if response.valid?
          options.interval = response.check_interval || previous_interval
        end

        if previous_interval != options.interval
          logger.info "Interval changed: #{options.interval} seconds"
        end
      end

      def log_response(response)
        unless response.valid?
          return logger.error("Invalid response checking nfs storage: #{response.http_response.inspect}")
        end

        if response.responsive_shards.any?
          logger.debug("Responsive shards: #{response.responsive_shards.join(', ')}")
        end

        warnings = []
        if response.skipped_shards.any?
          warnings << "Skipped shards: #{response.skipped_shards.join(', ')}"
        end
        if response.failing_shards.any?
          warnings << "Failing shards: #{response.failing_shards.join(', ')}"
        end
        logger.warn(warnings.join(' - ')) if warnings.any?
      end
    end
  end
end