Class: GitLab::Monitor::CLI::GIT

Inherits:
Object
  • Object
show all
Defined in:
lib/gitlab_monitor/cli.rb

Overview

Git runner.

Takes something that behaves like ARGV with optparse included as an argument.

It will take 2 positional arguments once parsed, the first one for the repository location, the optional second one is an IO like object to write to

Constant Summary collapse

COMMAND_NAME =
"git".freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(args) ⇒ GIT

Returns a new instance of GIT.



42
43
44
45
46
47
48
# File 'lib/gitlab_monitor/cli.rb', line 42

def initialize(args)
  @options = options(args)
  args = @options.parse!
  @source = args.shift
  @target = args.shift || STDOUT
  @labels ||= {}
end

Instance Attribute Details

#labelsObject (readonly)

Returns the value of attribute labels.



40
41
42
# File 'lib/gitlab_monitor/cli.rb', line 40

def labels
  @labels
end

#sourceObject (readonly)

Returns the value of attribute source.



40
41
42
# File 'lib/gitlab_monitor/cli.rb', line 40

def source
  @source
end

#targetObject (readonly)

Returns the value of attribute target.



40
41
42
# File 'lib/gitlab_monitor/cli.rb', line 40

def target
  @target
end

Instance Method Details

#helpObject



69
70
71
# File 'lib/gitlab_monitor/cli.rb', line 69

def help
  @options.help
end

#options(args) ⇒ Object



59
60
61
62
63
64
65
66
67
# File 'lib/gitlab_monitor/cli.rb', line 59

def options(args)
  args.options do |opts|
    opts.banner = "Usage: #{EXECUTABLE_NAME} #{COMMAND_NAME} [options] repository_path [target_file]"
    opts.on("-l", "--labels=key=value,key2=value2", "Labels to append to the metrics") do |val|
      @labels = val.split(",").map { |value| value.split("=").tap { |aa| aa[0] = aa[0].to_sym } }.to_h
    end
    opts
  end
end

#runObject



50
51
52
53
54
55
56
57
# File 'lib/gitlab_monitor/cli.rb', line 50

def run
  validate!

  ::GitLab::Monitor::GitProber.new(labels: labels, source: source)
                              .probe_pull
                              .probe_push
                              .write_to(@target)
end

#validate!Object



73
74
75
76
# File 'lib/gitlab_monitor/cli.rb', line 73

def validate!
  fail InvalidCLICommand.new(help) if @source.nil?
  fail InvalidCLICommand.new("Can't find repository #{@source}\n\n#{help}") unless File.directory? @source
end