class Alerty::Plugin::Stackdriver
Constants
- DEFAULT_NUM_OF_RETIRES
Public Class Methods
new(config)
click to toggle source
# File lib/alerty/plugin/stackdriver.rb, line 10 def initialize(config) # https://cloud.google.com/logging/docs/api/v2/resource-list @resource_type = config.resource_type @resource_labels = config.resource_labels @app_name = config.app_name || 'alerty' @app_version = config.app_version || 'default' @log_name = config.log_name || 'alerty' @message = config.message @num_retries = config.num_retries || DEFAULT_NUM_OF_RETIRES @stackdriver = Google::Cloud::Logging.new( project_id: config.project_id, keyfile: config.keyfile ? ensure_keyfile(config.keyfile) : nil ) end
Public Instance Methods
alert(record)
click to toggle source
# File lib/alerty/plugin/stackdriver.rb, line 26 def alert(record) entry = make_entry(record) retrable(tries: @num_retries) do @stackdriver.write_entries(entry) Alerty.logger.info "Sent #{{log_entry: entry.inspect}} to #{@log_name}" end end
Private Instance Methods
ensure_keyfile(v)
click to toggle source
# File lib/alerty/plugin/stackdriver.rb, line 97 def ensure_keyfile(v) if v.is_a?(String) v elsif v.is_a?(Hash) JSON.parse(v['content']) end end
expand_placeholder(str, record)
click to toggle source
# File lib/alerty/plugin/stackdriver.rb, line 90 def expand_placeholder(str, record) replaced = str.gsub('${command}', record[:command]) replaced.gsub!('${hostname}', record[:hostname]) replaced.gsub!('${output}', record[:output]) replaced end
make_entry(record)
click to toggle source
# File lib/alerty/plugin/stackdriver.rb, line 53 def make_entry(record) e = @stackdriver.entry e.resource.type = @resource_type e.resource.labels = @resource_labels if @resource_labels e.log_name = @log_name e.payload = payload(record) e.severity = :ERROR e end
payload(record)
click to toggle source
# File lib/alerty/plugin/stackdriver.rb, line 65 def payload(record) body = if @message expand_placeholder(@message, record) else record[:output] end # support Stackdriver Error Reporting. https://cloud.google.com/error-reporting/docs/formatting-error-messages { serviceContext: { service: @app_name, app_version: @app_version }, message: body, context: { user: ENV['USER'], reportLocation: { filePath: 'alerty', lineNumber: 0, functionName: record[:command] } } } end
retrable(options = {}) { || ... }
click to toggle source
# File lib/alerty/plugin/stackdriver.rb, line 36 def retrable(options = {}, &block) tries = options[:tries] || DEFAULT_NUM_OF_RETIRES retries = 0 begin yield rescue => e retries += 1 sleep 1 if retries <= tries retry else raise e end end end