Class: Datadog::Runtime::Metrics
- Defined in:
- lib/ddtrace/runtime/metrics.rb
Overview
For generating runtime metrics
Constant Summary
Constants included from Metrics::Options
Instance Attribute Summary
Attributes inherited from Metrics
Instance Method Summary collapse
- #associate_with_span(span) ⇒ Object
- #default_metric_options ⇒ Object
-
#flush ⇒ Object
Flush all runtime metrics to Statsd client.
- #gc_metrics ⇒ Object
-
#initialize(**options) ⇒ Metrics
constructor
A new instance of Metrics.
-
#register_service(service) ⇒ Object
Associate service with runtime metrics.
- #try_flush ⇒ Object
Methods inherited from Metrics
#close, #configure, #count, #default_hostname, #default_port, #default_statsd_client, #distribution, #enabled=, #enabled?, #gauge, #increment, #send_metrics, #send_stats?, #supported?, #time
Methods included from Metrics::Options
Constructor Details
#initialize(**options) ⇒ Metrics
Returns a new instance of Metrics.
16 17 18 19 20 21 22 23 |
# File 'lib/ddtrace/runtime/metrics.rb', line 16 def initialize(**) super # Initialize service list @services = Set.new(.fetch(:services, [])) @service_tags = nil end |
Instance Method Details
#associate_with_span(span) ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/ddtrace/runtime/metrics.rb', line 25 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. # We only tag spans that performed internal application work. unless span.get_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE) span.set_tag(Ext::Runtime::TAG_LANG, Core::Environment::Identity.lang) end end |
#default_metric_options ⇒ Object
95 96 97 98 99 100 101 102 103 104 |
# File 'lib/ddtrace/runtime/metrics.rb', line 95 def # Return dupes, so that the constant isn't modified, # and defaults are unfrozen for mutation in Statsd. super.tap do || [:tags] = [:tags].dup # Add services dynamically because they might change during runtime. [:tags].concat() unless .nil? end end |
#flush ⇒ Object
Flush all runtime metrics to Statsd client
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/ddtrace/runtime/metrics.rb', line 54 def flush return unless enabled? try_flush do if Core::Environment::ClassCount.available? gauge(Ext::Runtime::Metrics::METRIC_CLASS_COUNT, Core::Environment::ClassCount.value) end end try_flush do if Core::Environment::ThreadCount.available? gauge(Ext::Runtime::Metrics::METRIC_THREAD_COUNT, Core::Environment::ThreadCount.value) end end try_flush { gc_metrics.each { |metric, value| gauge(metric, value) } if Core::Environment::GC.available? } try_flush do if Core::Environment::VMCache.available? gauge(Ext::Runtime::Metrics::METRIC_GLOBAL_CONSTANT_STATE, Core::Environment::VMCache.global_constant_state) # global_method_state is not available since Ruby >= 3.0, # as method caching was moved to a per-class basis. global_method_state = Core::Environment::VMCache.global_method_state gauge(Ext::Runtime::Metrics::METRIC_GLOBAL_METHOD_STATE, global_method_state) if global_method_state end end end |
#gc_metrics ⇒ Object
83 84 85 86 87 |
# File 'lib/ddtrace/runtime/metrics.rb', line 83 def gc_metrics Core::Environment::GC.stat.flat_map do |k, v| nested_gc_metric(Ext::Runtime::Metrics::METRIC_GC_PREFIX, k, v) end.to_h end |
#register_service(service) ⇒ Object
Associate service with runtime metrics
39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/ddtrace/runtime/metrics.rb', line 39 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 end end |