class PagerdutyCli::Trigger

Send a trigger to PagerDuty

Public Class Methods

new(args) click to toggle source
# File lib/pagerduty_cli/trigger.rb, line 13
def initialize(args)
  @me = 'pagerduty_trigger'
  parse_opts(args)
  require_event
  load_data
  return unless @options[:force] || !incident_is_too_fresh?
  touch_incident_file unless @options[:no_touch]
end
trigger(args) click to toggle source
# File lib/pagerduty_cli/trigger.rb, line 23
def trigger(args)
  new(args).send_trigger
end

Public Instance Methods

send_trigger() click to toggle source
# File lib/pagerduty_cli/trigger.rb, line 28
def send_trigger
  Pagerduty.new(@api_key).trigger(incident_description,
                                  incident_key: incident_key,
                                  client: @options[:host])
end

Private Instance Methods

incident_description() click to toggle source
# File lib/pagerduty_cli/trigger.rb, line 71
def incident_description
  "#{@options[:event]} failed on #{@options[:host]}"
end
incident_is_too_fresh?() click to toggle source

return true if this incident has been reported in the past 4 hrs 1 min

# File lib/pagerduty_cli/trigger.rb, line 66
def incident_is_too_fresh?
  cutoff = Time.now - @options[:interval]
  File.exist?(incident_file) && File.mtime(incident_file) > cutoff
end
parse_opts(args) click to toggle source

Disabling the MethodLength cop here because any reduction would reduce readability. rubocop:disable MethodLength

# File lib/pagerduty_cli/trigger.rb, line 41
def parse_opts(args)
  # default options
  @options = {}
  @options[:interval] = (4 * 60 * 60 + 1)

  opt_parser = OptionParser.new do |opts|
    parse_common_options(opts)
    opts.on('-f', '--force',
            'Force the event to process, even if not fresh') do
      @options[:force] = true
    end
    opts.on('-n', '--no-incident',
            'Do not record sending this incident') do
      @options[:no_touch] = true
    end
    opts.on('-i', '--touch-interval INTERVAL',
            'Specify freshness interval in seconds') do |interval|
      @options[:interval] = interval.to_i
    end
  end
  opt_parser.parse! args
end
touch_incident_file() click to toggle source
# File lib/pagerduty_cli/trigger.rb, line 75
def touch_incident_file
  File.open(incident_file, 'a') do |f|
    f.puts "#{Time.now}: #{incident_description}"
  end
rescue Errno::EPERM
  croak("Could not write incident file #{incident_file.inspect}")
end