class Yabeda::Prometheus::Adapter

Public Instance Methods

build_name(metric) click to toggle source
# File lib/yabeda/prometheus/adapter.rb, line 76
def build_name(metric)
  [metric.group, metric.name, metric.unit].compact.join('_').to_sym
end
debug!() click to toggle source
# File lib/yabeda/prometheus/adapter.rb, line 86
def debug!
  Yabeda.configure do
    group :prometheus_exporter

    histogram :render_duration,
              tags: %i[], unit: :seconds,
              buckets: [0.001, 0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10],
              comment: "Time required to render all metrics in Prometheus format"
  end
end
perform_counter_increment!(metric, tags, value) click to toggle source
# File lib/yabeda/prometheus/adapter.rb, line 36
def perform_counter_increment!(metric, tags, value)
  registry.get(build_name(metric)).increment(by: value, labels: tags)
rescue ::Prometheus::Client::LabelSetValidator::InvalidLabelSetError => e
  raise UndeclaredMetricTags.new(build_name(metric), e)
end
perform_gauge_set!(metric, tags, value) click to toggle source
# File lib/yabeda/prometheus/adapter.rb, line 52
def perform_gauge_set!(metric, tags, value)
  registry.get(build_name(metric)).set(value, labels: tags)
rescue ::Prometheus::Client::LabelSetValidator::InvalidLabelSetError => e
  raise UndeclaredMetricTags.new(build_name(metric), e)
end
perform_histogram_measure!(metric, tags, value) click to toggle source
# File lib/yabeda/prometheus/adapter.rb, line 70
def perform_histogram_measure!(metric, tags, value)
  registry.get(build_name(metric)).observe(value, labels: tags)
rescue ::Prometheus::Client::LabelSetValidator::InvalidLabelSetError => e
  raise UndeclaredMetricTags.new(build_name(metric), e)
end
register_counter!(metric) click to toggle source
# File lib/yabeda/prometheus/adapter.rb, line 26
def register_counter!(metric)
  validate_metric!(metric)
  registry.counter(
    build_name(metric),
    docstring: metric.comment,
    labels: Array(metric.tags),
    store_settings: store_settings(metric),
  )
end
register_gauge!(metric) click to toggle source
# File lib/yabeda/prometheus/adapter.rb, line 42
def register_gauge!(metric)
  validate_metric!(metric)
  registry.gauge(
    build_name(metric),
    docstring: metric.comment,
    labels: Array(metric.tags),
    store_settings: store_settings(metric),
  )
end
register_histogram!(metric) click to toggle source
# File lib/yabeda/prometheus/adapter.rb, line 58
def register_histogram!(metric)
  validate_metric!(metric)
  buckets = metric.buckets || ::Prometheus::Client::Histogram::DEFAULT_BUCKETS
  registry.histogram(
    build_name(metric),
    docstring: metric.comment,
    buckets: buckets,
    labels: Array(metric.tags),
    store_settings: store_settings(metric),
  )
end
registry() click to toggle source
# File lib/yabeda/prometheus/adapter.rb, line 22
def registry
  @registry ||= ::Prometheus::Client.registry
end
validate_metric!(metric) click to toggle source
# File lib/yabeda/prometheus/adapter.rb, line 80
def validate_metric!(metric)
  return if metric.comment

  raise ArgumentError, 'Prometheus require metrics to have comments'
end

Private Instance Methods

store_settings(metric) click to toggle source

@param metric [Yabeda::Metric] @return [Hash]

# File lib/yabeda/prometheus/adapter.rb, line 101
def store_settings(metric)
  case ::Prometheus::Client.config.data_store
  when ::Prometheus::Client::DataStores::Synchronized, ::Prometheus::Client::DataStores::SingleThreaded
    {} # Default synchronized store doesn't allow to pass any options
  when ::Prometheus::Client::DataStores::DirectFileStore, ::Object # Anything else
    { aggregation: metric.aggregation }.compact
  end
end