Module: Anomonitor::MetricsExport
- Defined in:
- lib/anomonitor/metrics_export.rb
Class Method Summary collapse
- .escape_label(value) ⇒ Object
- .json_payload ⇒ Object
- .prometheus_labels(hash) ⇒ Object
- .prometheus_text ⇒ Object
Class Method Details
.escape_label(value) ⇒ Object
51 52 53 |
# File 'lib/anomonitor/metrics_export.rb', line 51 def escape_label(value) value.to_s.gsub("\\", "\\\\").gsub("\n", "\\n").gsub('"', '\\"') end |
.json_payload ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/anomonitor/metrics_export.rb', line 7 def json_payload latest = MetricSample.latest_by_source_metric open_count = Anomaly.open.count { gem: "anomonitor", version: Anomonitor::VERSION, sampled_at: Time.current.iso8601, open_anomalies: open_count, metrics: latest.map do |s| { source: s.source, metric: s.metric, value: s.value, tags: s., sampled_at: s.sampled_at&.iso8601 } end } end |
.prometheus_labels(hash) ⇒ Object
47 48 49 |
# File 'lib/anomonitor/metrics_export.rb', line 47 def prometheus_labels(hash) hash.map { |k, v| "#{k}=\"#{escape_label(v)}\"" }.join(",") end |
.prometheus_text ⇒ Object
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/anomonitor/metrics_export.rb', line 27 def prometheus_text lines = [] lines << "# HELP anomonitor_open_anomalies Number of unresolved anomalies" lines << "# TYPE anomonitor_open_anomalies gauge" lines << "anomonitor_open_anomalies #{Anomaly.open.count}" lines << "# HELP anomonitor_metric Latest metric sample value" lines << "# TYPE anomonitor_metric gauge" MetricSample.latest_by_source_metric.each do |s| labels = { source: s.source, metric: s.metric } = s..is_a?(Hash) ? s. : {} %w[tenant queue table].each do |key| val = [key] || [key.to_sym] labels[key] = val if val && !val.to_s.empty? end lines << "anomonitor_metric{#{prometheus_labels(labels)}} #{s.value.to_f}" end "#{lines.join("\n")}\n" end |