{# Metric anomalies (#5740), drawn the same on Alerts → Anomalies, a resource's own page and the overview widget. Import with: {% from "_anomaly.html" import anomaly_row, anomaly_when with context %} (with context: the review buttons read session.user_role). #} {% from "_macros.html" import status_badge %} {# When it happened: "since …" while going, "from – to" once ended; a repeat says how often and when the latest was. #} {% macro anomaly_when(v) -%} {%- set a = v.anomaly -%} {%- if a.occurrences > 1 -%} {{ a.occurrences }} times since {{ a.started_at|when }}, last {% if v.ongoing %}since {{ a.last_started_at|when }}, ongoing{% else %}{{ a.last_started_at|when }} – {{ a.ended_at|when }}{% endif %} {%- elif v.ongoing -%} Ongoing since {{ a.started_at|when }} {%- else -%} {{ a.started_at|when }} – {{ a.ended_at|when }} {%- endif -%} {%- endmacro %} {# Its highest level against what is usual for that hour. #} {% macro anomaly_level(a) -%} Held {{ metric_value(a.metric_name, a.peak_level) }}; usual for that hour {{ metric_value(a.metric_name, a.usual_hold) }}, peaking at {{ metric_value(a.metric_name, a.usual_peak) }} {%- endmacro %} {# The review buttons, or how it was reviewed. `back` is the page to come back to after marking. #} {% macro anomaly_review(a, back=none) -%} {%- set can_review = session.user_role in ('operator', 'admin') -%} {%- if a.review == "normal" -%} Marked normal by {{ a.reviewed_by or "someone" }}, {{ a.reviewed_at|when }}. {%- elif a.review == "real" -%} Real problem, marked by {{ a.reviewed_by or "someone" }}, {{ a.reviewed_at|when }}{% if a.note %}: {{ a.note }}{% else %}.{% endif %} {%- elif a.review == "lapsed" -%} Not reviewed within the review window; lapsed {{ a.reviewed_at|when }}. Its hours are not learned. {%- endif -%} {%- if can_review and a.review in ("to_review", "lapsed") %}
{{ csrf_field() }} {% if back %}{% endif %}
{%- endif -%} {%- endmacro %} {# One anomaly as a row: badge, resource and metric, when, level, review. #} {% macro anomaly_row(v, back=none, show_resource=true) -%} {%- set a = v.anomaly -%}
{{ status_badge("anomaly") }} {% if a.review != "to_review" %}{{ status_badge(a.review) }}{% endif %} {% if show_resource %} {% if v.link %}{{ a.resource_name }} {% else %}{{ a.resource_name }}{% endif %} {{ source_label(a.source_module) }} {% endif %} {{ metric_label(a.metric_name) }}
{{ anomaly_when(v) }} · {{ anomaly_level(a) }}
{{ anomaly_review(a, back) }}
{%- endmacro %}