class Datadog::Metrics
Acts as client for sending metrics (via Statsd) Wraps a Statsd client with default tags and additional configuration.
Constants
- Metric
Attributes
statsd[R]
Public Class Methods
new(options = {})
click to toggle source
# File lib/ddtrace/metrics.rb, line 15 def initialize(options = {}) @statsd = options.fetch(:statsd) { default_statsd_client if supported? } @enabled = options.fetch(:enabled, true) end
Public Instance Methods
configure(options = {})
click to toggle source
# File lib/ddtrace/metrics.rb, line 50 def configure(options = {}) @statsd = options[:statsd] if options.key?(:statsd) self.enabled = options[:enabled] if options.key?(:enabled) end
count(stat, value = nil, options = nil) { || ... }
click to toggle source
# File lib/ddtrace/metrics.rb, line 59 def count(stat, value = nil, options = nil, &block) return unless send_stats? && statsd.respond_to?(:count) value, options = yield if block_given? raise ArgumentError if value.nil? statsd.count(stat, value, metric_options(options)) rescue StandardError => e Datadog.logger.error("Failed to send count stat. Cause: #{e.message} Source: #{e.backtrace.first}") end
default_hostname()
click to toggle source
# File lib/ddtrace/metrics.rb, line 35 def default_hostname ENV.fetch(Datadog::Ext::Metrics::ENV_DEFAULT_HOST, Datadog::Ext::Metrics::DEFAULT_HOST) end
default_port()
click to toggle source
# File lib/ddtrace/metrics.rb, line 39 def default_port ENV.fetch(Datadog::Ext::Metrics::ENV_DEFAULT_PORT, Datadog::Ext::Metrics::DEFAULT_PORT).to_i end
default_statsd_client()
click to toggle source
# File lib/ddtrace/metrics.rb, line 43 def default_statsd_client require 'datadog/statsd' unless defined?(::Datadog::Statsd) # Create a StatsD client that points to the agent. Datadog::Statsd.new(default_hostname, default_port) end
distribution(stat, value = nil, options = nil) { || ... }
click to toggle source
# File lib/ddtrace/metrics.rb, line 69 def distribution(stat, value = nil, options = nil, &block) return unless send_stats? && statsd.respond_to?(:distribution) value, options = yield if block_given? raise ArgumentError if value.nil? statsd.distribution(stat, value, metric_options(options)) rescue StandardError => e Datadog.logger.error("Failed to send distribution stat. Cause: #{e.message} Source: #{e.backtrace.first}") end
enabled=(enabled)
click to toggle source
# File lib/ddtrace/metrics.rb, line 31 def enabled=(enabled) @enabled = (enabled == true) end
enabled?()
click to toggle source
# File lib/ddtrace/metrics.rb, line 27 def enabled? @enabled end
gauge(stat, value = nil, options = nil) { || ... }
click to toggle source
# File lib/ddtrace/metrics.rb, line 88 def gauge(stat, value = nil, options = nil, &block) return unless send_stats? && statsd.respond_to?(:gauge) value, options = yield if block_given? raise ArgumentError if value.nil? statsd.gauge(stat, value, metric_options(options)) rescue StandardError => e Datadog.logger.error("Failed to send gauge stat. Cause: #{e.message} Source: #{e.backtrace.first}") end
increment(stat, options = nil) { || ... }
click to toggle source
# File lib/ddtrace/metrics.rb, line 79 def increment(stat, options = nil) return unless send_stats? && statsd.respond_to?(:increment) options = yield if block_given? statsd.increment(stat, metric_options(options)) rescue StandardError => e Datadog.logger.error("Failed to send increment stat. Cause: #{e.message} Source: #{e.backtrace.first}") end
send_metrics(metrics)
click to toggle source
# File lib/ddtrace/metrics.rb, line 115 def send_metrics(metrics) metrics.each { |m| send(m.type, *[m.name, m.value, m.options].compact) } end
send_stats?()
click to toggle source
# File lib/ddtrace/metrics.rb, line 55 def send_stats? enabled? && !statsd.nil? end
supported?()
click to toggle source
# File lib/ddtrace/metrics.rb, line 20 def supported? version = Gem.loaded_specs['dogstatsd-ruby'] \ && Gem.loaded_specs['dogstatsd-ruby'].version !version.nil? && (version >= Gem::Version.new('3.3.0')) end
time(stat, options = nil) { || ... }
click to toggle source
# File lib/ddtrace/metrics.rb, line 98 def time(stat, options = nil) return yield unless send_stats? # Calculate time, send it as a distribution. start = Utils::Time.get_time return yield ensure begin if send_stats? && !start.nil? finished = Utils::Time.get_time distribution(stat, ((finished - start) * 1000), options) end rescue StandardError => e Datadog.logger.error("Failed to send time stat. Cause: #{e.message} Source: #{e.backtrace.first}") end end