Changeset View
Changeset View
Standalone View
Standalone View
swh/web/metrics/prometheus.py
Show All 27 Lines | |||||
_submitted_save_requests_gauge = Gauge( | _submitted_save_requests_gauge = Gauge( | ||||
name=SUBMITTED_SAVE_REQUESTS_METRIC, | name=SUBMITTED_SAVE_REQUESTS_METRIC, | ||||
documentation="Number of submitted origin save requests", | documentation="Number of submitted origin save requests", | ||||
labelnames=["status", "visit_type"], | labelnames=["status", "visit_type"], | ||||
registry=SWH_WEB_METRICS_REGISTRY, | registry=SWH_WEB_METRICS_REGISTRY, | ||||
) | ) | ||||
SUBMITTED_SAVE_REQUESTS_FROM_WEBHOOKS_METRIC = ( | |||||
"swh_web_submitted_save_requests_from_webhooks" | |||||
) | |||||
_submitted_save_requests_from_webhooks_gauge = Gauge( | |||||
name=SUBMITTED_SAVE_REQUESTS_FROM_WEBHOOKS_METRIC, | |||||
documentation="Number of submitted origin save requests through forge webhook receivers", | |||||
labelnames=["status", "visit_type"], | |||||
registry=SWH_WEB_METRICS_REGISTRY, | |||||
) | |||||
ACCEPTED_SAVE_REQUESTS_METRIC = "swh_web_accepted_save_requests" | ACCEPTED_SAVE_REQUESTS_METRIC = "swh_web_accepted_save_requests" | ||||
_accepted_save_requests_gauge = Gauge( | _accepted_save_requests_gauge = Gauge( | ||||
name=ACCEPTED_SAVE_REQUESTS_METRIC, | name=ACCEPTED_SAVE_REQUESTS_METRIC, | ||||
documentation="Number of accepted origin save requests", | documentation="Number of accepted origin save requests", | ||||
labelnames=["load_task_status", "visit_type"], | labelnames=["load_task_status", "visit_type"], | ||||
registry=SWH_WEB_METRICS_REGISTRY, | registry=SWH_WEB_METRICS_REGISTRY, | ||||
Show All 38 Lines | def compute_save_requests_metrics() -> None: | ||||
# for metrics, we want access to all visit types | # for metrics, we want access to all visit types | ||||
visit_types = get_savable_visit_types(privileged_user=True) | visit_types = get_savable_visit_types(privileged_user=True) | ||||
labels_set = product(request_statuses, visit_types) | labels_set = product(request_statuses, visit_types) | ||||
for labels in labels_set: | for labels in labels_set: | ||||
_submitted_save_requests_gauge.labels(*labels).set(0) | _submitted_save_requests_gauge.labels(*labels).set(0) | ||||
_submitted_save_requests_from_webhooks_gauge.labels(*labels).set(0) | |||||
labels_set = product(load_task_statuses, visit_types) | labels_set = product(load_task_statuses, visit_types) | ||||
for labels in labels_set: | for labels in labels_set: | ||||
_accepted_save_requests_gauge.labels(*labels).set(0) | _accepted_save_requests_gauge.labels(*labels).set(0) | ||||
olasd: Do we have access to a shorter list of valid `(visit_type, supported_forge_type)` tuples? Most… | |||||
Done Inline ActionsApart webhooks received from sourceforge, all visit types will be git. I think we can drop the visit_type label for that gauge then as that info is not really of interest here. anlambert: Apart webhooks received from sourceforge, all visit types will be `git`. I think we can drop… | |||||
duration_load_task_statuses = ( | duration_load_task_statuses = ( | ||||
SAVE_TASK_FAILED, | SAVE_TASK_FAILED, | ||||
SAVE_TASK_SUCCEEDED, | SAVE_TASK_SUCCEEDED, | ||||
) | ) | ||||
for labels in product(duration_load_task_statuses, visit_types): | for labels in product(duration_load_task_statuses, visit_types): | ||||
_accepted_save_requests_delay_gauge.labels(*labels).set(0) | _accepted_save_requests_delay_gauge.labels(*labels).set(0) | ||||
for sor in SaveOriginRequest.objects.all(): | for sor in SaveOriginRequest.objects.all(): | ||||
if sor.status == SAVE_REQUEST_ACCEPTED: | if sor.status == SAVE_REQUEST_ACCEPTED: | ||||
_accepted_save_requests_gauge.labels( | _accepted_save_requests_gauge.labels( | ||||
load_task_status=sor.loading_task_status, | load_task_status=sor.loading_task_status, | ||||
visit_type=sor.visit_type, | visit_type=sor.visit_type, | ||||
).inc() | ).inc() | ||||
_submitted_save_requests_gauge.labels( | _submitted_save_requests_gauge.labels( | ||||
status=sor.status, visit_type=sor.visit_type | status=sor.status, visit_type=sor.visit_type | ||||
).inc() | ).inc() | ||||
if sor.from_webhook: | |||||
_submitted_save_requests_from_webhooks_gauge.labels( | |||||
status=sor.status, visit_type=sor.visit_type | |||||
).inc() | |||||
if ( | if ( | ||||
sor.loading_task_status in (SAVE_TASK_SUCCEEDED, SAVE_TASK_FAILED) | sor.loading_task_status in (SAVE_TASK_SUCCEEDED, SAVE_TASK_FAILED) | ||||
and sor.visit_date is not None | and sor.visit_date is not None | ||||
and sor.request_date is not None | and sor.request_date is not None | ||||
): | ): | ||||
delay = sor.visit_date.timestamp() - sor.request_date.timestamp() | delay = sor.visit_date.timestamp() - sor.request_date.timestamp() | ||||
_accepted_save_requests_delay_gauge.labels( | _accepted_save_requests_delay_gauge.labels( | ||||
load_task_status=sor.loading_task_status, | load_task_status=sor.loading_task_status, | ||||
visit_type=sor.visit_type, | visit_type=sor.visit_type, | ||||
).inc(delay) | ).inc(delay) |
Do we have access to a shorter list of valid (visit_type, supported_forge_type) tuples? Most forges will only accept one or a few visit types and it'd be nice to avoid generating a bunch of metrics that are guaranteed to be zero, if possible.