Class: Appsignal::CLI

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

Constant Summary collapse

AVAILABLE_COMMANDS =
%w( notify_of_deploy )

Class Method Summary collapse

Class Method Details

.command_option_parser(options) ⇒ Object



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/appsignal/cli.rb', line 68

def command_option_parser(options)
  {
    'notify_of_deploy' => OptionParser.new do |o|
      o.banner = %Q{Usage: appsignal notify_of_deploy [options] }
      options[:command] = :notify_of_deploy

      o.on '--revision=<revision>', "The revision you're deploying" do |arg|
        options[:revision] = arg
      end

      o.on '--repository=<repository>', "The location of the main code repository" do |arg|
        options[:repository] = arg
      end

      o.on '--user=<user>', "The name of the user that's deploying" do |arg|
        options[:user] = arg
      end

      o.on '--environment=<rails_env>', "The environment you're deploying to" do |arg|
        options[:environment] = arg
      end
    end
  }
end

.global_option_parser(options) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/appsignal/cli.rb', line 49

def global_option_parser(options)
  OptionParser.new do |o|
    o.banner = %Q{Usage: appsignal <command> [options]}

    o.on '-v', '--version', "Print version and exit" do |arg|
      puts "Appsignal #{Appsignal::VERSION}"
      exit(0)
    end

    o.on '-h', '--help', "Show help and exit" do
      puts o
      exit(0)
    end

    o.separator ''
    o.separator "Available commands: #{AVAILABLE_COMMANDS.join(', ')}"
  end
end

.loggerObject



45
46
47
# File 'lib/appsignal/cli.rb', line 45

def logger
  Logger.new($stdout)
end

.notify_of_deploy(options) ⇒ Object



93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/appsignal/cli.rb', line 93

def notify_of_deploy(options)
  validate_required_options([:revision, :repository, :user, :environment], options)
  Appsignal::Marker.new(
    {
      :revision => options[:revision],
      :repository => options[:repository],
      :user => options[:user]
    },
    ENV['PWD'],
    options[:environment],
    logger
  ).transmit
end

.run(argv = ARGV) ⇒ Object



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
# File 'lib/appsignal/cli.rb', line 15

def run(argv=ARGV)
  unless File.exists?(File.join(ENV['PWD'], 'config/appsignal.yml'))
    puts 'No config file present at config/appsignal.yml'
    puts 'Log in to https://appsignal.com to get instructions on how to generate the config file.'
    exit(1)
  end
  options = {}
  global = global_option_parser(options)
  commands = command_option_parser(options)

  global.order!(argv)
  command = argv.shift
  if command then
    if AVAILABLE_COMMANDS.include?(command) then
      commands[command].parse!(argv)
      case options[:command]
      when :notify_of_deploy
        notify_of_deploy(options)
      end
    else
      puts "Command '#{command}' does not exist, run appsignal -h to see the help"
      exit(1)
    end
  else
    # Print help
    puts global
    exit(0)
  end
end

.validate_required_options(required_options, options) ⇒ Object



107
108
109
110
111
112
113
114
115
# File 'lib/appsignal/cli.rb', line 107

def validate_required_options(required_options, options)
  missing = required_options.select do |required_option|
    options[required_option].blank?
  end
  if missing.any?
    puts "Missing options: #{missing.join(', ')}"
    exit(1)
  end
end