module Datadog::MeasuredBuffer
Health metrics for trace buffers.
Public Class Methods
new(*_)
click to toggle source
Calls superclass method
# File lib/ddtrace/buffer.rb, line 218 def initialize(*_) super @buffer_accepted = 0 @buffer_accepted_lengths = 0 @buffer_dropped = 0 @buffer_spans = 0 end
Public Instance Methods
add!(trace)
click to toggle source
Calls superclass method
# File lib/ddtrace/buffer.rb, line 227 def add!(trace) super # Emit health metrics measure_accept(trace) end
add_all!(traces)
click to toggle source
Calls superclass method
# File lib/ddtrace/buffer.rb, line 234 def add_all!(traces) super # Emit health metrics traces.each { |trace| measure_accept(trace) } end
drain!()
click to toggle source
Stored traces are returned and the local buffer is reset.
Calls superclass method
# File lib/ddtrace/buffer.rb, line 252 def drain! traces = super measure_pop(traces) traces end
measure_accept(trace)
click to toggle source
# File lib/ddtrace/buffer.rb, line 258 def measure_accept(trace) @buffer_accepted += 1 @buffer_accepted_lengths += trace.length @buffer_spans += trace.length rescue StandardError => e Datadog.logger.debug("Failed to measure queue accept. Cause: #{e.message} Source: #{Array(e.backtrace).first}") end
measure_drop(trace)
click to toggle source
# File lib/ddtrace/buffer.rb, line 267 def measure_drop(trace) @buffer_dropped += 1 @buffer_spans -= trace.length rescue StandardError => e Datadog.logger.debug("Failed to measure queue drop. Cause: #{e.message} Source: #{Array(e.backtrace).first}") end
measure_pop(traces)
click to toggle source
# File lib/ddtrace/buffer.rb, line 275 def measure_pop(traces) # Accepted, cumulative totals Datadog.health_metrics.queue_accepted(@buffer_accepted) Datadog.health_metrics.queue_accepted_lengths(@buffer_accepted_lengths) # Dropped, cumulative totals Datadog.health_metrics.queue_dropped(@buffer_dropped) # TODO: are we missing a +queue_dropped_lengths+ metric? # Queue gauges, current values Datadog.health_metrics.queue_max_length(@max_size) Datadog.health_metrics.queue_spans(@buffer_spans) Datadog.health_metrics.queue_length(traces.length) # Reset aggregated metrics @buffer_accepted = 0 @buffer_accepted_lengths = 0 @buffer_dropped = 0 @buffer_spans = 0 rescue StandardError => e Datadog.logger.debug("Failed to measure queue. Cause: #{e.message} Source: #{Array(e.backtrace).first}") end
replace!(trace)
click to toggle source
Calls superclass method
# File lib/ddtrace/buffer.rb, line 241 def replace!(trace) discarded_trace = super # Emit health metrics measure_accept(trace) measure_drop(discarded_trace) if discarded_trace discarded_trace end