Class: GitLab::Exporter::CLI::GIT

Inherits:
Object
  • Object
show all
Defined in:
lib/gitlab_exporter/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.



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

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.



39
40
41
# File 'lib/gitlab_exporter/cli.rb', line 39

def labels
  @labels
end

#sourceObject (readonly)

Returns the value of attribute source.



39
40
41
# File 'lib/gitlab_exporter/cli.rb', line 39

def source
  @source
end

#targetObject (readonly)

Returns the value of attribute target.



39
40
41
# File 'lib/gitlab_exporter/cli.rb', line 39

def target
  @target
end

Instance Method Details

#helpObject



68
69
70
# File 'lib/gitlab_exporter/cli.rb', line 68

def help
  @options.help
end

#options(args) ⇒ Object



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

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



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

def run
  validate!

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

#validate!Object



72
73
74
75
# File 'lib/gitlab_exporter/cli.rb', line 72

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