class Datadog::Runtime::Metrics
For generating runtime metrics
Attributes
services[R]
Public Class Methods
new(options = {})
click to toggle source
Calls superclass method
Datadog::Metrics::new
# File lib/ddtrace/runtime/metrics.rb, line 13 def initialize(options = {}) super # Initialize service list @services = Set.new(options.fetch(:services, [])) @service_tags = nil compile_service_tags! end
Public Instance Methods
associate_with_span(span)
click to toggle source
# File lib/ddtrace/runtime/metrics.rb, line 22 def associate_with_span(span) return if !enabled? || span.nil? # Register service as associated with metrics register_service(span.service) unless span.service.nil? # Tag span with language and runtime ID for association with metrics span.set_tag(Ext::Runtime::TAG_LANG, Runtime::Identity.lang) end
default_metric_options()
click to toggle source
Calls superclass method
Datadog::Metrics::Options#default_metric_options
# File lib/ddtrace/runtime/metrics.rb, line 70 def default_metric_options # Return dupes, so that the constant isn't modified, # and defaults are unfrozen for mutation in Statsd. super.tap do |options| options[:tags] = options[:tags].dup # Add services dynamically because they might change during runtime. options[:tags].concat(service_tags) unless service_tags.nil? end end
flush()
click to toggle source
Flush all runtime metrics to Statsd client
# File lib/ddtrace/runtime/metrics.rb, line 48 def flush return unless enabled? try_flush { gauge(Ext::Runtime::Metrics::METRIC_CLASS_COUNT, ClassCount.value) if ClassCount.available? } try_flush { gauge(Ext::Runtime::Metrics::METRIC_THREAD_COUNT, ThreadCount.value) if ThreadCount.available? } try_flush { gc_metrics.each { |metric, value| gauge(metric, value) } if GC.available? } end
gc_metrics()
click to toggle source
# File lib/ddtrace/runtime/metrics.rb, line 56 def gc_metrics Hash[ GC.stat.flat_map do |k, v| nested_gc_metric(Ext::Runtime::Metrics::METRIC_GC_PREFIX, k, v) end ] end
register_service(service)
click to toggle source
Associate service with runtime metrics
# File lib/ddtrace/runtime/metrics.rb, line 33 def register_service(service) return if !enabled? || service.nil? service = service.to_s unless @services.include?(service) # Add service to list and update services tag services << service # Recompile the service tags compile_service_tags! end end
try_flush() { || ... }
click to toggle source
# File lib/ddtrace/runtime/metrics.rb, line 64 def try_flush yield rescue StandardError => e Datadog.logger.error("Error while sending runtime metric. Cause: #{e.message}") end
Private Instance Methods
nested_gc_metric(prefix, k, v)
click to toggle source
# File lib/ddtrace/runtime/metrics.rb, line 93 def nested_gc_metric(prefix, k, v) path = "#{prefix}.#{k}" if v.is_a?(Hash) v.flat_map do |key, value| nested_gc_metric(path, key, value) end else [[to_metric_name(path), v]] end end
to_metric_name(str)
click to toggle source
# File lib/ddtrace/runtime/metrics.rb, line 105 def to_metric_name(str) str.downcase.gsub(/[-\s]/, '_') end