#! /usr/bin/env python # -*- coding: utf-8 -*- # vim:fenc=utf-8 # # Copyright © 2017 kevin <kevin@phrye.com> # # Distributed under terms of the GPL license. """ Prometheus multi-proc test app. """ import os from prometheus_client import multiprocess from prometheus_client import generate_latest, CollectorRegistry, CONTENT_TYPE_LATEST, Gauge # Example gauge. IN_PROGRESS = Gauge("inprogress_requests", "help", multiprocess_mode='livesum') INDEX = Gauge("index_hits", "help", multiprocess_mode='livesum') INDEX_PRO = Gauge("index_pro_hits", "help", ['pro'], multiprocess_mode='livesum') REG = CollectorRegistry() multiprocess.MultiProcessCollector(REG) def index(environ, start_response): INDEX.inc() INDEX_PRO.labels(str(os.getpid())).inc() data = b"Hello, World!\n" start_response("200 OK", [ ("Content-Type", "text/plain"), ("Content-Length", str(len(data))) ]) return iter([data]) def metrics(environ, start_response): data = generate_latest(REG) status = '200 OK' response_headers = [ ('Content-type', CONTENT_TYPE_LATEST), ('Content-Length', str(len(data))) ] start_response(status, response_headers) return iter([data]) # Expose metrics. @IN_PROGRESS.track_inprogress() def app(environ, start_response): path = environ.get('PATH_INFO', '') if path == '/metrics': return metrics(environ, start_response) else: return index(environ, start_response)