Sha256: 8b46bf994d125e20f29763fcbc69223224ea47d9022a819f9d80c60d712df273

Contents?: true

Size: 1.4 KB

Versions: 2

Compression:

Stored size: 1.4 KB

Contents

# frozen_string_literal: true

require 'sidekiq/prometheus/exporter/version'
require 'sidekiq/prometheus/exporter/exporters'

module Sidekiq
  module Prometheus
    # Expose Prometheus metrics via Rack application or Sidekiq::Web application
    module Exporter
      REQUEST_VERB = 'GET'.freeze
      REQUEST_METHOD = 'REQUEST_METHOD'.freeze
      NOT_FOUND_TEXT = 'Not Found'.freeze
      MOUNT_PATH = '/metrics'.freeze
      HEADERS = {'Content-Type' => 'text/plain; version=0.0.4', 'Cache-Control' => 'no-cache'}.freeze
      EXPORTERS = Exporters.new

      class << self
        def banner
          exporters =
            EXPORTERS.enabled
              .map { |klass| "  - #{klass.name.split('::').last.downcase}" }
              .join("\n".freeze)

          "Enabled Sidekiq Prometheus exporters:\n#{exporters}"
        end

        def configure
          yield(EXPORTERS)
        end

        def registered(app)
          app.get(MOUNT_PATH) do
            Sidekiq::Prometheus::Exporter.call(REQUEST_METHOD => REQUEST_VERB)
          end
        end

        def to_app
          Rack::Builder.app do
            map(MOUNT_PATH) do
              run Sidekiq::Prometheus::Exporter
            end
          end
        end

        def call(env)
          return [404, HEADERS, [NOT_FOUND_TEXT]] if env[REQUEST_METHOD] != REQUEST_VERB

          [200, HEADERS, [EXPORTERS.to_s]]
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
sidekiq-prometheus-exporter-0.1.12 lib/sidekiq/prometheus/exporter.rb
sidekiq-prometheus-exporter-0.1.11 lib/sidekiq/prometheus/exporter.rb