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:
parent
d6edb747d2
commit
25912eac0c
5 changed files with 22 additions and 28 deletions
|
|
@ -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}
|
||||
)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue