From caf4037a5670bffd386395ac648caba06dac64e1 Mon Sep 17 00:00:00 2001 From: Iain Sproat <68657+iainsproat@users.noreply.github.com> Date: Thu, 2 Oct 2025 20:23:27 +0100 Subject: [PATCH] feat(ifc-importer): serve prometheus metrics (#5627) --- .pre-commit-config.yaml | 5 ----- packages/ifc-import-service/main.py | 2 ++ packages/ifc-import-service/pyproject.toml | 1 + packages/ifc-import-service/uv.lock | 11 +++++++++++ 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index bfbae7b60..a48793250 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -12,11 +12,6 @@ repos: - id: shellcheck-system name: shellcheck - - repo: https://github.com/syntaqx/git-hooks - rev: 'v0.0.17' - hooks: - - id: circleci-config-validate - - repo: https://github.com/specklesystems/pre-commit rev: '0.2.0' hooks: diff --git a/packages/ifc-import-service/main.py b/packages/ifc-import-service/main.py index 2a9d694df..40412a000 100644 --- a/packages/ifc-import-service/main.py +++ b/packages/ifc-import-service/main.py @@ -5,6 +5,7 @@ from http.server import BaseHTTPRequestHandler, HTTPServer from multiprocessing import Process import structlog +from prometheus_client import start_http_server from structlog_to_seq import CelfProcessor from ifc_importer.job_processor import job_processor @@ -52,6 +53,7 @@ async def main(): httpd = HTTPServer(("0.0.0.0", 9080), HealthcheckHTTPRequestHandler) healthcheck_server_process = Process(target=httpd.serve_forever, daemon=True) healthcheck_server_process.start() + start_http_server(9093) # we do not need any sort of signal handling logic, # cause if the context of the job transaction exits, diff --git a/packages/ifc-import-service/pyproject.toml b/packages/ifc-import-service/pyproject.toml index 47066163f..955d8a1cf 100644 --- a/packages/ifc-import-service/pyproject.toml +++ b/packages/ifc-import-service/pyproject.toml @@ -13,6 +13,7 @@ dependencies = [ "structlog-to-seq>=21.0.0", "specklepy[speckleifc]>=3.0.7", "colorful>=0.5.7", + "prometheus-client>=0.23.1", ] [dependency-groups] diff --git a/packages/ifc-import-service/uv.lock b/packages/ifc-import-service/uv.lock index afe40f4f7..a9772d3c1 100644 --- a/packages/ifc-import-service/uv.lock +++ b/packages/ifc-import-service/uv.lock @@ -230,6 +230,7 @@ source = { editable = "." } dependencies = [ { name = "asyncpg" }, { name = "colorful" }, + { name = "prometheus-client" }, { name = "pydantic" }, { name = "python-dotenv" }, { name = "specklepy", extra = ["speckleifc"] }, @@ -249,6 +250,7 @@ dev = [ requires-dist = [ { name = "asyncpg", specifier = ">=0.30.0" }, { name = "colorful", specifier = ">=0.5.7" }, + { name = "prometheus-client", specifier = ">=0.23.1" }, { name = "pydantic", specifier = ">=2.11.7" }, { name = "python-dotenv", specifier = ">=1.0.0" }, { name = "specklepy", extras = ["speckleifc"], specifier = ">=3.0.7" }, @@ -414,6 +416,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c1/9e/1652778bce745a67b5fe05adde60ed362d38eb17d919a540e813d30f6874/numpy-2.3.2-cp314-cp314t-win_arm64.whl", hash = "sha256:092aeb3449833ea9c0bf0089d70c29ae480685dd2377ec9cdbbb620257f84631", size = 10544226, upload-time = "2025-07-24T20:56:34.509Z" }, ] +[[package]] +name = "prometheus-client" +version = "0.23.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/23/53/3edb5d68ecf6b38fcbcc1ad28391117d2a322d9a1a3eff04bfdb184d8c3b/prometheus_client-0.23.1.tar.gz", hash = "sha256:6ae8f9081eaaaf153a2e959d2e6c4f4fb57b12ef76c8c7980202f1e57b48b2ce", size = 80481, upload-time = "2025-09-18T20:47:25.043Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b8/db/14bafcb4af2139e046d03fd00dea7873e48eafe18b7d2797e73d6681f210/prometheus_client-0.23.1-py3-none-any.whl", hash = "sha256:dd1913e6e76b59cfe44e7a4b83e01afc9873c1bdfd2ed8739f1e76aeca115f99", size = 61145, upload-time = "2025-09-18T20:47:23.875Z" }, +] + [[package]] name = "propcache" version = "0.3.2"