import os
from flask import Flask, Response
from prometheus_client import multiprocess
from prometheus_client import generate_latest, CollectorRegistry, CONTENT_TYPE_LATEST, Gauge, Counter

app = Flask(__name__)

IN_PROGRESS = Gauge("inprogress_requests", "Example gauge", multiprocess_mode='livesum')
NUM_REQUESTS = Counter("num_requests", "Example counter")


@app.route("/")
@IN_PROGRESS.track_inprogress()
def hello():
    NUM_REQUESTS.inc()
    return "Hello World from {}!".format(os.getpid())


@app.route("/metrics")
def metrics():
    registry = CollectorRegistry()
    multiprocess.MultiProcessCollector(registry)
    data = generate_latest(registry)
    return Response(data, mimetype=CONTENT_TYPE_LATEST)