Module: Philiprehberger::JobMeter::Exporter

Defined in:
lib/philiprehberger/job_meter/exporter.rb

Class Method Summary collapse

Class Method Details

.to_json_export(collector) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/philiprehberger/job_meter/exporter.rb', line 39

def to_json_export(collector)
  jobs = collector.all_job_classes.map do |job_class|
    data = collector.entries(job_class)
    next unless data

    stats = Stats.compute(data[:durations], data[:successes])
    {
      job_class: job_class,
      stats: stats
    }
  end.compact

  JSON.generate({ jobs: jobs })
end

.to_prometheus(collector) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/philiprehberger/job_meter/exporter.rb', line 10

def to_prometheus(collector)
  lines = []
  collector.all_job_classes.each do |job_class|
    data = collector.entries(job_class)
    next unless data

    stats = Stats.compute(data[:durations], data[:successes])
    sanitize_metric_name(job_class)

    lines << '# HELP job_duration_seconds Duration of job executions'
    lines << '# TYPE job_duration_seconds gauge'
    lines << "job_duration_seconds_avg{job_class=\"#{job_class}\"} #{format_value(stats[:avg_duration])}"
    lines << "job_duration_seconds_p50{job_class=\"#{job_class}\"} #{format_value(stats[:p50_duration])}"
    lines << "job_duration_seconds_p95{job_class=\"#{job_class}\"} #{format_value(stats[:p95_duration])}"
    lines << "job_duration_seconds_p99{job_class=\"#{job_class}\"} #{format_value(stats[:p99_duration])}"
    lines << '# HELP job_executions_total Total number of job executions'
    lines << '# TYPE job_executions_total counter'
    lines << "job_executions_total{job_class=\"#{job_class}\"} #{stats[:total]}"
    lines << '# HELP job_failures_total Total number of failed job executions'
    lines << '# TYPE job_failures_total counter'
    lines << "job_failures_total{job_class=\"#{job_class}\"} #{stats[:failed]}"
    lines << '# HELP job_success_rate Success rate of job executions'
    lines << '# TYPE job_success_rate gauge'
    lines << "job_success_rate{job_class=\"#{job_class}\"} #{format_value(stats[:success_rate])}"
  end

  "#{lines.join("\n")}\n"
end