From 0f1e99a237d7294c3cbd9658fecad6c3c6f2c854 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lauri=20V=C3=B5sandi?= Date: Mon, 31 May 2021 13:21:25 +0300 Subject: [PATCH] Initial commit --- Dockerfile | 4 ++++ exporter.py | 26 ++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 Dockerfile create mode 100755 exporter.py diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..4e54447 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,4 @@ +FROM python +RUN pip install motor sanic +ADD exporter.py /exporter.py +CMD /exporter.py diff --git a/exporter.py b/exporter.py new file mode 100755 index 0000000..b06ae2a --- /dev/null +++ b/exporter.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python + +import os +from motor.motor_asyncio import AsyncIOMotorClient +from sanic import Sanic, response + +app = Sanic("exporter") + +MONGO_URI = os.getenv("MONGO_URI", "mongodb://127.0.0.1:27017/default") + +@app.listener('before_server_start') +async def setup_db(app, loop): + app.ctx.db = AsyncIOMotorClient(MONGO_URI).get_default_database() + +@app.route("/metrics") +async def view_export(request): + coll = app.ctx.db["certidude_certificates"] + async def streaming_fn(response): + await response.write("# HELP pinecrypt_remote_last_seen Remote client last seen\n") + await response.write("# TYPE pinecrypt_remote_last_seen gauge\n") + async for doc in coll.find({"status":"signed", "last_seen":{"$exists":True}}, {"common_name":1, "last_seen":1}): + await response.write("pinecrypt_remote_last_seen{cn=\"%s\"} %d\n" % ( + doc["common_name"], doc["last_seen"].timestamp())) + return response.stream(streaming_fn, content_type='text/plain') + +app.run(port=3001)