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