From 2b0515dc55f2be7b0d88afa9257f852c823a9b40 Mon Sep 17 00:00:00 2001 From: Maxim Devaev Date: Mon, 24 Jul 2023 16:25:25 +0300 Subject: [PATCH] cached /export/prometheus/metrics --- PKGBUILD | 1 + kvmd/apps/kvmd/api/export.py | 8 +++++++- testenv/Dockerfile | 1 + 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/PKGBUILD b/PKGBUILD index 46057aed..2684b167 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -44,6 +44,7 @@ depends=( python-yaml python-aiohttp python-aiofiles + python-async-lru python-passlib python-pyotp python-qrcode diff --git a/kvmd/apps/kvmd/api/export.py b/kvmd/apps/kvmd/api/export.py index cfcbde41..a5d4d0bf 100644 --- a/kvmd/apps/kvmd/api/export.py +++ b/kvmd/apps/kvmd/api/export.py @@ -24,6 +24,8 @@ import asyncio from typing import Any +import async_lru + from aiohttp.web import Request from aiohttp.web import Response @@ -49,6 +51,10 @@ class ExportApi: @exposed_http("GET", "/export/prometheus/metrics") async def __prometheus_metrics_handler(self, _: Request) -> Response: + return Response(text=(await self.__get_prometheus_metrics())) + + @async_lru.alru_cache(maxsize=1, ttl=5) + async def __get_prometheus_metrics(self) -> str: (atx_state, hw_state, fan_state, gpio_state) = await asyncio.gather(*[ self.__atx.get_state(), self.__info_manager.get_submanager("hw").get_state(), @@ -68,7 +74,7 @@ class ExportApi: self.__append_prometheus_rows(rows, hw_state["health"], "pikvm_hw") self.__append_prometheus_rows(rows, fan_state, "pikvm_fan") - return Response(text="\n".join(rows)) + return "\n".join(rows) def __append_prometheus_rows(self, rows: list[str], value: Any, path: str) -> None: if isinstance(value, bool): diff --git a/testenv/Dockerfile b/testenv/Dockerfile index 7dedc9ec..a4246989 100644 --- a/testenv/Dockerfile +++ b/testenv/Dockerfile @@ -41,6 +41,7 @@ RUN pacman --noconfirm --ask=4 -Syy \ python-yaml \ python-aiohttp \ python-aiofiles \ + python-async-lru \ python-periphery \ python-passlib \ python-pyotp \