class ScoutSignalfx::PeriodicCallback
This is ran after each reporting period (once per-minute).
Public Instance Methods
call(reporting_period, metadata)
click to toggle source
# File lib/scout_signalfx/periodic_callback.rb, line 4 def call(reporting_period, metadata) @reporting_period = reporting_period @metadata = metadata return if controller_metrics.empty? ScoutSignalfx.signalfx_client.send( gauges: guages, counters: counters, ) end
Private Instance Methods
controller_error_metrics()
click to toggle source
# File lib/scout_signalfx/periodic_callback.rb, line 44 def controller_error_metrics @controller_error_metrics ||= metrics.select { |meta,metric| meta.type == 'Errors' && meta.name =~ /\AController/ } end
controller_metrics()
click to toggle source
# File lib/scout_signalfx/periodic_callback.rb, line 40 def controller_metrics @controller_metrics ||= metrics.select { |meta,metric| meta.type == 'Controller' } end
counters()
click to toggle source
# File lib/scout_signalfx/periodic_callback.rb, line 59 def counters controller_metrics.map do |meta,metric| { metric: 'web.count', value: metric.call_count, timestamp: timestamp_ms, dimensions: dimensions_for_metric_name(meta.metric_name) } end + controller_error_metrics.map do |meta,metric| { metric: 'web.errors.count', value: metric.call_count, timestamp: timestamp_ms, dimensions: dimensions_for_metric_name(meta.name) } end end
dimensions_for_metric_name(metric_name)
click to toggle source
# File lib/scout_signalfx/periodic_callback.rb, line 77 def dimensions_for_metric_name(metric_name) [ {key: 'host', value: ScoutApm::Agent.instance.context.environment.hostname}, {key: 'transaction', value: signalfx_transaction_name(metric_name)}, {key: 'app', value: ScoutApm::Agent.instance.context.config.value('name')} ] end
guages()
click to toggle source
# File lib/scout_signalfx/periodic_callback.rb, line 48 def guages controller_metrics.map do |meta,metric| { metric: 'web.duration_ms', value: (metric.total_call_time / metric.call_count.to_f)*1000, timestamp: timestamp_ms, dimensions: dimensions_for_metric_name(meta.metric_name) } end end
metrics()
click to toggle source
# File lib/scout_signalfx/periodic_callback.rb, line 17 def metrics @reporting_period.metrics_payload end
signalfx_transaction_name(transaction_name)
click to toggle source
Renames Scout metric names to a more SignalFx-ish format. Ex: Controllers/users/index => users.index
# File lib/scout_signalfx/periodic_callback.rb, line 36 def signalfx_transaction_name(transaction_name) @signalfx_transaction_name ||= transaction_name.sub!("Controller/",'').gsub("/",".") end
timestamp()
click to toggle source
The time associated w/the metrics
# File lib/scout_signalfx/periodic_callback.rb, line 22 def timestamp Time.at(@metadata[:agent_time].to_i) end
timestamp_ms()
click to toggle source
# File lib/scout_signalfx/periodic_callback.rb, line 26 def timestamp_ms timestamp.to_i*1000 end
transaction_name()
click to toggle source
# File lib/scout_signalfx/periodic_callback.rb, line 30 def transaction_name metrics.keys.first.metric_name end