Class: Journaled::Outbox::MetricEmitter

Inherits:
Object
  • Object
show all
Defined in:
lib/journaled/outbox/metric_emitter.rb

Overview

Handles metric emission for the Worker

This class is responsible for collecting and emitting metrics about the outbox queue.

Instance Method Summary collapse

Constructor Details

#initialize(worker_id:) ⇒ MetricEmitter

Returns a new instance of MetricEmitter.



9
10
11
# File 'lib/journaled/outbox/metric_emitter.rb', line 9

def initialize(worker_id:)
  @worker_id = worker_id
end

Instance Method Details

#emit_batch_metrics(stats) ⇒ Object

Emit batch processing metrics

Parameters:

  • stats (Hash)

    Processing statistics with :succeeded, :failed_permanently



16
17
18
19
20
21
22
# File 'lib/journaled/outbox/metric_emitter.rb', line 16

def emit_batch_metrics(stats)
  total_events = stats[:succeeded] + stats[:failed_permanently]

  emit_metric('journaled.worker.batch_process', value: total_events)
  emit_metric('journaled.worker.batch_sent', value: stats[:succeeded])
  emit_metric('journaled.worker.batch_failed', value: stats[:failed_permanently])
end

#emit_queue_metricsObject

Collect and emit queue metrics

This calculates various queue statistics and emits individual metrics for each.



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/journaled/outbox/metric_emitter.rb', line 27

def emit_queue_metrics
  metrics = calculate_queue_metrics

  emit_metric('journaled.worker.queue_total_count', value: metrics[:total_count])
  emit_metric('journaled.worker.queue_workable_count', value: metrics[:workable_count])
  emit_metric('journaled.worker.queue_erroring_count', value: metrics[:erroring_count])
  emit_metric('journaled.worker.queue_oldest_age_seconds', value: metrics[:oldest_age_seconds])

  Rails.logger.info(
    "Queue metrics: total=#{metrics[:total_count]}, " \
    "workable=#{metrics[:workable_count]}, " \
    "erroring=#{metrics[:erroring_count]}, " \
    "oldest_age=#{metrics[:oldest_age_seconds].round(2)}s",
  )
end