Fix metric imports: use module-level access instead of name imports

Type-annotated metric variables (e.g. `geojson_cache_operations: Counter`)
don't exist as importable names until init_metrics() runs.  Switch all
`from api.metrics import <metric>` to `import api.metrics as m` and
access instruments as attributes at runtime to avoid ImportError.
This commit is contained in:
Viktor Barzin 2026-02-14 11:21:49 +00:00
parent d6edb747d2
commit 25912eac0c
No known key found for this signature in database
GPG key ID: 0EB088298288D958
5 changed files with 22 additions and 28 deletions

View file

@ -47,9 +47,9 @@ def _start_metrics_server(**kwargs: object) -> None:
@task_prerun.connect
def _on_task_prerun(task_id: str, task: object, **kwargs: object) -> None:
from api.metrics import celery_tasks_active
import api.metrics as m
task_name = getattr(task, "name", "unknown")
celery_tasks_active.add(1, {"task_name": task_name})
m.celery_tasks_active.add(1, {"task_name": task_name})
_task_start_times[task_id] = time.monotonic()
@ -57,16 +57,16 @@ def _on_task_prerun(task_id: str, task: object, **kwargs: object) -> None:
def _on_task_postrun(
task_id: str, task: object, state: str | None = None, **kwargs: object
) -> None:
from api.metrics import celery_tasks_total, celery_task_duration_seconds, celery_tasks_active
import api.metrics as m
task_name = getattr(task, "name", "unknown")
status = state or "UNKNOWN"
celery_tasks_active.add(-1, {"task_name": task_name})
celery_tasks_total.add(1, {"task_name": task_name, "status": status})
m.celery_tasks_active.add(-1, {"task_name": task_name})
m.celery_tasks_total.add(1, {"task_name": task_name, "status": status})
start = _task_start_times.pop(task_id, None)
if start is not None:
celery_task_duration_seconds.record(
m.celery_task_duration_seconds.record(
time.monotonic() - start, {"task_name": task_name}
)