module SignalFx::Lambda::Metrics
Attributes
client[RW]
Public Class Methods
init_client()
click to toggle source
# File lib/signalfx/lambda/metrics.rb, line 83 def init_client access_token = ENV['SIGNALFX_ACCESS_TOKEN'] ingest_endpoint = ENV['SIGNALFX_METRICS_URL'] || ENV['SIGNALFX_ENDPOINT_URL'] || 'https://ingest.signalfx.com' timeout = [ENV['SIGNALFX_SEND_TIMEOUT'].to_i, 1].max @client = SignalFx.new access_token, ingest_endpoint: ingest_endpoint, timeout: timeout end
populate_dimensions(context)
click to toggle source
# File lib/signalfx/lambda/metrics.rb, line 74 def populate_dimensions(context) dimensions = SignalFx::Lambda.fields .reject {|key, _| @@ephemeral_dimensions.include?(key)} .map do |key, val| { :key => key, :value => val } end dimensions.push({ :key => 'metric_source', :value => SignalFx::Lambda::COMPONENT }) end
wrap_function(event:, context:) { |event: event, context: context| ... }
click to toggle source
# File lib/signalfx/lambda/metrics.rb, line 14 def wrap_function(event:, context:) cold_start = @client.nil? init_client unless @client counters = [] gauges = [] dimensions = populate_dimensions(context) # time execution of next block start_time = Time.now response = yield event: event, context: context end_time = Time.now duration = ((end_time - start_time) * 1000) # duration in ms end_time = end_time.strftime('%s%L') counters.push( { :metric => 'function.invocations', :value => 1, :timestamp => end_time, :dimensions => dimensions } ) counters.push( { :metric => 'function.cold_starts', :value => 1, :timestamp => end_time, :dimensions => dimensions } ) if cold_start gauges = [ { :metric => 'function.duration', :value => duration, :timestamp => end_time, :dimensions => dimensions } ] response rescue => error error_counter = { :metric => 'function.errors', :value => 1, :timestamp => end_time, :dimensions => dimensions } counters.push(error_counter) raise ensure # send metrics before leaving this block @client.send(gauges: gauges, counters: counters) if @client end