class Lambdakiq::Metrics
Attributes
event[R]
Public Class Methods
log(event)
click to toggle source
# File lib/lambdakiq/metrics.rb, line 6 def log(event) new(event).log end
new(event)
click to toggle source
# File lib/lambdakiq/metrics.rb, line 11 def initialize(event) @event = event @metrics = [] @properties = {} instrument! end
Public Instance Methods
log()
click to toggle source
# File lib/lambdakiq/metrics.rb, line 18 def log logger.info JSON.dump(message) end
Private Instance Methods
dimensions()
click to toggle source
# File lib/lambdakiq/metrics.rb, line 45 def dimensions [ { AppName: rails_app_name }, { JobEvent: event.name }, { JobName: job_name } ] end
exception_name()
click to toggle source
# File lib/lambdakiq/metrics.rb, line 40 def exception_name event.payload[:exception].try(:first) || event.payload[:error]&.class&.name end
instrument!()
click to toggle source
# File lib/lambdakiq/metrics.rb, line 53 def instrument! put_metric 'Duration', event.duration.to_i, 'Milliseconds' put_metric 'Count', 1, 'Count' put_metric 'ExceptionCount', 1, 'Count' if exception_name set_property 'JobId', job.job_id set_property 'JobName', job_name set_property 'QueueName', job.queue_name set_property 'MessageId', job.provider_job_id if job.provider_job_id set_property 'ExceptionName', exception_name if exception_name set_property 'EnqueuedAt', job.enqueued_at if job.enqueued_at set_property 'Executions', job.executions if job.executions job.arguments.each_with_index do |argument, index| set_property "JobArg#{index+1}", argument end end
job()
click to toggle source
# File lib/lambdakiq/metrics.rb, line 24 def job event.payload[:job] end
job_name()
click to toggle source
# File lib/lambdakiq/metrics.rb, line 28 def job_name job.class.name end
logger()
click to toggle source
# File lib/lambdakiq/metrics.rb, line 32 def logger Lambdakiq.config.metrics_logger end
message()
click to toggle source
# File lib/lambdakiq/metrics.rb, line 81 def message { '_aws': { 'Timestamp': timestamp, 'CloudWatchMetrics': [ { 'Namespace': namespace, 'Dimensions': [dimensions.map(&:keys).flatten], 'Metrics': @metrics } ] } }.tap do |m| dimensions.each { |d| m.merge!(d) } m.merge!(@properties) end end
namespace()
click to toggle source
# File lib/lambdakiq/metrics.rb, line 36 def namespace Lambdakiq.config.metrics_namespace end
put_metric(name, value, unit = nil)
click to toggle source
# File lib/lambdakiq/metrics.rb, line 69 def put_metric(name, value, unit = nil) @metrics << { 'Name': name }.tap do |m| m['Unit'] = unit if unit end set_property name, value end
rails_app_name()
click to toggle source
# File lib/lambdakiq/metrics.rb, line 103 def rails_app_name Lambdakiq.config.metrics_app_name || Rails.application.class.name.split('::').first end
set_property(name, value)
click to toggle source
# File lib/lambdakiq/metrics.rb, line 76 def set_property(name, value) @properties[name] = value self end
timestamp()
click to toggle source
# File lib/lambdakiq/metrics.rb, line 99 def timestamp Time.current.strftime('%s%3N').to_i end