class DatadogChefMetrics

helper class for sending datadog metrics from a chef run

Public Class Methods

new() click to toggle source
# File lib/chef/handler/datadog_chef_metrics.rb, line 10
def initialize
  @hostname = ''
  @run_status = nil
end

Public Instance Methods

emit_to_datadog(dog) click to toggle source

Emit Chef metrics to Datadog

@param dog [Dogapi::Client] Dogapi Client to be used

# File lib/chef/handler/datadog_chef_metrics.rb, line 36
def emit_to_datadog(dog)
  # Send base success/failure metric
  dog.emit_point('chef.run.success', @run_status.success? ? 1 : 0, host: @hostname, type: 'counter')
  dog.emit_point('chef.run.failure', @run_status.success? ? 0 : 1, host: @hostname, type: 'counter')

  # If there is a failure during compile phase, a large portion of
  # run_status may be unavailable. Bail out here
  warn_msg = 'Error during compile phase, no Datadog metrics available.'
  return Chef::Log.warn(warn_msg) if compile_error?

  dog.emit_point('chef.resources.total', @run_status.all_resources.length, host: @hostname)
  dog.emit_point('chef.resources.updated', @run_status.updated_resources.length, host: @hostname)
  dog.emit_point('chef.resources.elapsed_time', @run_status.elapsed_time, host: @hostname)
  Chef::Log.debug('Submitted Chef metrics back to Datadog')
rescue Errno::ECONNREFUSED, Errno::ETIMEDOUT => e
  Chef::Log.warn("Could not send metrics to Datadog. Connection error:\n" + e)
rescue StandardError => e
  Chef::Log.warn("Could not determine whether chef run metrics were successfully submitted to Datadog. Error:\n#{e}")
end
with_hostname(hostname) click to toggle source

set the target hostname (chef node name)

@param hostname [String] hostname used for reporting metrics @return [DatadogChefMetrics] instance reference to self enabling method chaining

# File lib/chef/handler/datadog_chef_metrics.rb, line 19
def with_hostname(hostname)
  @hostname = hostname
  self
end
with_run_status(run_status) click to toggle source

set the chef run status used for the report

@param run_status [Chef::RunStatus] current run status @return [DatadogChefMetrics] instance reference to self enabling method chaining

# File lib/chef/handler/datadog_chef_metrics.rb, line 28
def with_run_status(run_status)
  @run_status = run_status
  self
end