require 'digest' require 'forwardable' require 'honeybadger/cli/main' require 'honeybadger/cli/helpers' require 'honeybadger/util/http' require 'honeybadger/util/stats' module Honeybadger module CLI class Notify extend Forwardable include Helpers::BackendCmd def initialize(options, args, config) @options = options @args = args @config = config @shell = ::Thor::Base.shell.new end def run payload = { api_key: config.get(:api_key), notifier: NOTIFIER, error: { class: options['class'], message: options['message'] }, request: {}, server: { project_root: Dir.pwd, environment_name: config.get(:env), time: Time.now, stats: Util::Stats.all } } payload[:error][:fingerprint] = Digest::SHA1.hexdigest(options['fingerprint']) if option?('fingerprint') payload[:error][:tags] = options['tags'].to_s.strip.split(',').map(&:strip) if option?('tags') payload[:request][:component] = options['component'] if option?('component') payload[:request][:action] = options['action'] if option?('action') payload[:request][:url] = options['url'] if option?('url') payload.delete(:request) if payload[:request].empty? response = config.backend.notify(:notices, payload) if response.success? say("Error notification complete.", :green) else say(error_message(response), :red) exit(1) end end private attr_reader :options, :args, :config def_delegator :@shell, :say def option?(key) options.has_key?(key) && options[key] != key end end end end