feat(email): alert and weekly-report emails read as designed messages (#5335)
#5335 "Emails Steward sends read as designed messages: an HTML alert email and weekly report, with a plain-text twin". - core/mail.py renders each email as multipart/alternative from templates/email/: a table-and-inline-style HTML part and a plain-text twin carrying the same facts. Colours are the design system's light theme, resolved from theme.css; nothing is fetched when a mail opens. - Alert email: state badge, a headline sentence ("Disk used on web01 is 94%."), rule, resource, reading, the condition in words, and the time in the zone Notifications was saved in with UTC beside it; "View in Steward" when Steward's address is set. Subject "[Steward] Firing: <rule> — <resource> 94%". Alerts now carry their operator. - Weekly report: monitors down, active alerts, the week's alert events, uptime and busiest Traefik routers as small tables with links. Sent from the configured From address; the "Generated … UTC" line and the stale repo footer are gone. - condition_text() states a condition from a rule's parts. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
{# The weekly report's plain-text part; the same facts as report.html. #}
|
||||
Steward weekly report, {{ period }}
|
||||
|
||||
{% if d.hosts_down %}
|
||||
{{ d.hosts_down|length }} {{ "monitor is" if d.hosts_down|length == 1 else "monitors are" }} down now: {{ d.hosts_down|join(", ") }}
|
||||
|
||||
{% endif %}
|
||||
ACTIVE ALERTS{% if base %} ({{ base }}/alerts/){% endif %}
|
||||
|
||||
{% for a in alerts %}
|
||||
- {{ a.state }}: {{ a.name }} — {{ a.resource }} ({{ a.condition }})
|
||||
{% else %}
|
||||
None. Nothing is firing.
|
||||
{% endfor %}
|
||||
This week {{ d.alert_events.fired }} {{ "alert" if d.alert_events.fired == 1 else "alerts" }} fired and {{ d.alert_events.resolved }} resolved.
|
||||
|
||||
UPTIME OVER 7 DAYS{% if base %} ({{ base }}/monitors/){% endif %}
|
||||
|
||||
{% for m in d.uptime_summary %}
|
||||
- {{ m.name }}: {{ "—" if m.pct_7d is none else "%.2f%%"|format(m.pct_7d) }}
|
||||
{% else %}
|
||||
No monitors are enabled.
|
||||
{% endfor %}
|
||||
{% if d.top_routers %}
|
||||
|
||||
BUSIEST TRAEFIK ROUTERS, LAST 24 HOURS{% if base %} ({{ base }}/plugins/traefik/){% endif %}
|
||||
|
||||
{% for r in d.top_routers %}
|
||||
- {{ r.name }}: {{ "%.2f req/s"|format(r.avg_rate) }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
--
|
||||
Sent {{ sent }}. The weekly report is turned on, and its day and hour set,
|
||||
in Settings › Reports.
|
||||
Reference in New Issue
Block a user