{# settings/system.html — Steward's own health (#5467): a verdict, then each of its process metrics now and over the last day, from the self-monitor tick. Each is a metric an alert rule can watch under "Steward itself". #} {% extends "base.html" %} {% from "_macros.html" import crumbs %} {% from "settings/_tabs.html" import settings_tabs %} {% block title %}Settings — System — Steward{% endblock %} {% block section_tabs %}{{ settings_tabs("system") }}{% endblock %} {% block breadcrumb %}{{ crumbs([("Settings", "/settings/"), ("System", "")]) }}{% endblock %} {% block content %}
{%- if problems %}{% set said = problems|join("; ") %}{{ said[:1]|upper }}{{ said[1:] }}. {%- elif not seen %}No readings yet: the first arrive within a minute of Steward starting. {%- else %}Steward is running normally.{% endif -%}
| Measure | Now | Last 24 h |
|---|---|---|
| {{ metric_label(r.metric) }}
{{ metric_about(r.metric) }} |
{{ metric_value(r.metric, r.now) }}
{%- if r.at %} {{ r.at|ago }} {% endif %} |
{%- if r.low is not none %}{{ metric_value(r.metric, r.low) }} – {{ metric_value(r.metric, r.high) }} {%- else %}—{% endif -%} |
Recorded each minute (the cleanup each hour). Any of these can be watched by an alert rule: pick the source "Steward itself".
{# Outgoing email (#5509): every email waits in the outbox until the mail server takes it. What hasn't gone yet, failures first, then the longest retrying; sent mail is only counted. #}{%- if not email.rows %}Nothing waiting to send. {% endif -%} {{ "{:,}".format(email.sent) }} sent in the last 7 days.
{% if email.rows %}| To | What | State | Queued |
|---|---|---|---|
| {{ r.recipient }} | {{ kind_labels.get(r.kind, r.kind) }} |
{%- if r.state == "failed" %}failed
{%- elif r.state == "pending" and r.attempts %}retrying
attempt {{ r.attempts }}{% if r.next_attempt_at %}, next {{ r.next_attempt_at|when }}{% endif %}
{%- elif r.state == "held" %}gathering
sends {{ r.send_after|when }}
{%- else %}sending{% endif %}
{%- if r.last_error %} {{ r.last_error }} {% endif -%}
|
{{ r.created_at|ago }} |
| +{{ email.more }} more not yet sent | |||
An email the server refuses is failed at once; one it can't take yet is tried again for up to an hour. The mail server is set under Notifications.
{# Storage (#5469): Postgres's own figures for each table, then what the hourly cleanup last removed. Read from the catalog, never by counting. #}The database takes {{ storage.total|bytes }} on disk.
| Table | On disk | Rows (estimate) |
|---|---|---|
| {{ t.name }} | {{ t.bytes|bytes }} | {% if t.rows is not none %}{{ "{:,}".format(t.rows) }}{% else %}—{% endif %} |
| +{{ storage.rest.count }} smaller tables | {{ storage.rest.bytes|bytes }} |
None has finished since this version started: the cleanup runs each hour.
{% else %}Ran {{ cleanup.at|ago }} and took {{ cleanup.secs|duration }}. {%- if not cleanup.removed %} Nothing was past its window ({{ cleanup.passes }} passes).{% endif %}
{% if cleanup.removed %}| What went | Rows |
|---|---|
| {{ what }} | {{ "{:,}".format(n) }} |
How long each kind of data is kept is set under General (data and audit log) and Thresholds & retention (metrics, Docker and logs).
{% endblock %}