#! /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)