Sha256: d1e0da51c9de992c857d8285a29047e9eb628cb46d15b202a868d3306448398b
Contents?: true
Size: 1.6 KB
Versions: 1
Compression:
Stored size: 1.6 KB
Contents
# frozen_string_literal: true require 'rack' require 'prometheus/client/rack/collector' require 'prometheus/client/rack/exporter' module Yabeda module Prometheus module Mmap # Rack application or middleware that provides metrics exposition endpoint class Exporter < ::Prometheus::Client::Rack::Exporter NOT_FOUND_HANDLER = lambda do |_env| [404, { 'Content-Type' => 'text/plain' }, ["Not Found\n"]] end.freeze class << self # Allows to use middleware as standalone rack application def call(env) @app ||= new(NOT_FOUND_HANDLER, path: '/') @app.call(env) end def start_metrics_server! Thread.new do default_port = ENV.fetch('PORT', 9394) Rack::Handler::WEBrick.run( rack_app, Host: ENV['PROMETHEUS_EXPORTER_BIND'] || '0.0.0.0', Port: ENV.fetch('PROMETHEUS_EXPORTER_PORT', default_port), AccessLog: [] ) end end def rack_app(exporter = self, path: '/metrics') Rack::Builder.new do use Rack::CommonLogger use Rack::ShowExceptions use exporter, path: path run NOT_FOUND_HANDLER end end end def initialize(app, options = {}) super(app, options.merge(registry: Yabeda::Prometheus::Mmap.registry)) end def call(env) Yabeda.collectors.each(&:call) if env['PATH_INFO'] == path super end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
yabeda-prometheus-mmap-0.1.1 | lib/yabeda/prometheus/mmap/exporter.rb |