Class: Flare::TraceHealthReporter

Inherits:
Object
  • Object
show all
Defined in:
lib/flare/trace_health_reporter.rb

Overview

Records client-side tracing health into MetricStorage so flare-web can warn when local buffering, URL exhaustion, or export errors reduce trace fidelity.

Constant Summary collapse

NAMESPACE =
"sdk"
SERVICE =
"flare-ruby"
TARGET =
"tracing"

Instance Method Summary collapse

Constructor Details

#initialize(processor:, pool:, exporter:) ⇒ TraceHealthReporter

Returns a new instance of TraceHealthReporter.



14
15
16
17
18
19
20
# File 'lib/flare/trace_health_reporter.rb', line 14

def initialize(processor:, pool:, exporter:)
  @processor = processor
  @pool = pool
  @exporter = exporter
  @last = {}
  @mutex = Mutex.new
end

Instance Method Details

#record(storage, bucket: Time.now.utc) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/flare/trace_health_reporter.rb', line 22

def record(storage, bucket: Time.now.utc)
  @mutex.synchronize do
    record_counter(storage, bucket, "dropped_spans", @processor.dropped_count.value)
    record_counter(storage, bucket, "export_failures", @processor.failed_export_count.value)
    record_counter(storage, bucket, "processor_exceptions", @processor.exception_count.value)

    record_counter(storage, bucket, "upload_url_pool_empty", @pool.empty_count.value)
    record_counter(storage, bucket, "upload_url_expired", @pool.expired_count.value)

    record_counter(storage, bucket, "r2_put_failures", @exporter.put_failure_count.value)
    record_counter(storage, bucket, "notify_failures", @exporter.notify_failure_count.value)
    record_counter(storage, bucket, "trace_pool_empty", @exporter.pool_empty_count.value)
    record_counter(storage, bucket, "trace_export_exceptions", @exporter.exception_count.value)

    buffer_size = @processor.buffer_size
    buffer_high_watermark = @processor.buffer_high_watermark.value
    record_gauge(storage, bucket, "buffer_size", buffer_size)
    record_gauge(storage, bucket, "buffer_high_watermark", buffer_high_watermark)
    record_gauge(storage, bucket, "buffer_limit", @processor.max_queue) if buffer_size.positive? || buffer_high_watermark.positive?
    @processor.reset_buffer_high_watermark
  end
end