Sha256: a602016247b20e25951d4f9c6add5226ec54a1b815deaed356f223b918207c52

Contents?: true

Size: 1.13 KB

Versions: 2

Compression:

Stored size: 1.13 KB

Contents

# frozen_string_literal: true

# custom type collector for prometheus_exporter for handling the metrics sent from
# PrometheusExporter::Instrumentation::Unicorn
module PrometheusExporter::Server
  class UnicornCollector < PrometheusExporter::Server::TypeCollector
    MAX_METRIC_AGE = 60

    UNICORN_GAUGES = {
      workers: 'Number of unicorn workers.',
      active_workers: 'Number of active unicorn workers',
      request_backlog: 'Number of requests waiting to be processed by a unicorn worker.'
    }.freeze

    def initialize
      @unicorn_metrics = MetricsContainer.new(ttl: MAX_METRIC_AGE)
    end

    def type
      'unicorn'
    end

    def metrics
      return [] if @unicorn_metrics.length.zero?

      metrics = {}

      @unicorn_metrics.map do |m|
        labels = m["custom_labels"] || {}

        UNICORN_GAUGES.map do |k, help|
          k = k.to_s
          if (v = m[k])
            g = metrics[k] ||= PrometheusExporter::Metric::Gauge.new("unicorn_#{k}", help)
            g.observe(v, labels)
          end
        end
      end

      metrics.values
    end

    def collect(obj)
      @unicorn_metrics << obj
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
prometheus_exporter-2.1.1 lib/prometheus_exporter/server/unicorn_collector.rb
prometheus_exporter-2.1.0 lib/prometheus_exporter/server/unicorn_collector.rb