{% extends "base.html" %} {% block title %}Monitors{% endblock %} {% block content %} {% from '_limit.html' import limit, paused, locked %} {{ limit(stats.total, plan.monitors, 'monitors', 'New monitors will be refused until you upgrade or remove some.') }}

Monitors

{{ plan.name }} plan · {{ stats.total }}/{{ plan.monitors }} monitors{% if ws_plan_key == 'free' %} · Upgrade{% endif %}

Export{% if user.can_edit %}+ New monitor{% endif %}
{% set tiles = ui.dashboard.tiles if ui else ['uptime','up','down','alerts'] %} {% if tiles %}
{% for t in tiles %} {% if t == 'uptime' %}
Uptime · 24h
{{ stats.uptime_24h if stats.uptime_24h is not none else '—' }}{% if stats.uptime_24h is not none %}%{% endif %}
{{ stats.checks_24h }} checks
{% elif t == 'up' %}
Up
{{ stats.up }}
{{ stats.paused }} paused
{% elif t == 'down' %}
Down
{{ stats.down }}
{{ open_incidents|length }} open incident{% if open_incidents|length != 1 %}s{% endif %}
{% elif t == 'alerts' %}
Alerts · 24h
{{ stats.alerts_24h }}
{% elif t == 'servers' %}
Servers
{{ nav_counts.servers_total if nav_counts.servers_total is defined else '—' }}
{% if nav_counts.servers_off %}{{ nav_counts.servers_off }} offline{% else %}all online{% endif %}
{% elif t == 'incidents' %}
Open incidents
{{ open_incidents|length }}
{% endif %}{% endfor %}
{% endif %} {% if open_incidents %}
{{ open_incidents|length }} open incident{% if open_incidents|length != 1 %}s{% endif %}: {% for i in open_incidents %}{{ i.title }} ({{ fmt_duration(i.duration_seconds) }}{% if i.acknowledged_at %}, acknowledged{% endif %}){% if not loop.last %} · {% endif %}{% endfor %}
{% endif %} {% if not all_monitors %}

No monitors yet

Add your website for uptime, an API flow with assertions, a heartbeat for your nightly backup, your domain and DNS, or a page you want to watch for changes.

{% if user.can_edit %}
Monitor a websiteCheck an APIAdd a heartbeatWatch a domain
{% endif %}
{% else %}
{% if all_tags %}{% endif %} {% if q or tag or state or kind %}Clear{% endif %} {{ monitors|length }} shown
{% set cols = ui.dashboard.columns if ui else ['type','status','bars','interval','last_check','detail'] %} {% if 'status' in cols %}{% endif %}{% if 'bars' in cols %}{% endif %}{% if 'interval' in cols %}{% endif %}{% if 'last_check' in cols %}{% endif %}{% if 'detail' in cols %}{% endif %} {% for m in monitors %} {% if 'status' in cols %}{% endif %} {% if 'bars' in cols %}{% endif %} {% if 'interval' in cols %}{% endif %} {% if 'last_check' in cols %}{% endif %} {% if 'detail' in cols %}{% endif %} {% endfor %} {% if not monitors %}{% endif %}
MonitorStatus30 daysIntervalLast checkDetail
{{ m.name }} {{ paused(m.paused_by_plan, 'monitors') }} {% if 'type' in cols %}{{ modes[m.mode][0] if m.mode in modes else m.mode }}{% endif %}{% for t in m.tags or [] %}{{ t }}{% endfor %}
{% if m.mode == 'heartbeat' %}{% if m.schedule_cron %}{{ m.schedule_cron }} ({{ m.schedule_tz }}){% else %}every {{ m.period_minutes }} min{% endif %} · last ping {{ m.last_ping_at|timeago }}{% elif m.mode == 'flow' %}{{ (m.steps or [])|length }} steps · {{ m.url }}{% else %}{{ m.url }}{% endif %}
{% if not m.active %}paused {% elif m.is_up is none %}pending {% elif m.is_up %}up{% if m.last_latency_ms is not none and m.mode != 'domain' %} · {{ m.last_latency_ms }} ms{% endif %}{% if m.slow_count >= 3 %} slow{% endif %} {% else %}down{% endif %} {% if m.last_error and m.is_up is not false %}
{{ m.last_error[:70] }}
{% endif %}
{% for b in bars.get(m.id, []) %}{% endfor %}
{% if m.mode == 'heartbeat' %}—{% else %}{{ m.interval_minutes|interval }}{% endif %}{{ m.last_checked_at|timeago }} {% if m.mode == 'price' %}{{ m.last_value if m.last_value is not none else '—' }}{% if m.change_count %} ({{ m.change_count }} changes){% endif %} {% elif m.mode in ('text','keyword') %}{{ m.last_changed_at|timeago }}{% if m.change_count %} ({{ m.change_count }}){% endif %} {% elif m.mode == 'domain' %}{% if m.domain_expires_at %}expires {{ m.domain_expires_at|dt }}{% else %}DNS watched{% endif %} {% elif m.security_scan %}{{ m.security_scan.grade }}{% if m.ssl_expires_at %} SSL {{ m.ssl_expires_at|dt }}{% endif %} {% elif m.ssl_expires_at %}SSL {{ m.ssl_expires_at|dt }} {% elif m.mode == 'dependency' %}{{ m.last_indicator or '—' }} {% else %}—{% endif %}
Nothing matches that filter.
{% endif %} {% if alerts and (not ui or ui.dashboard.show_recent_alerts) %}

Recent alerts

{% for a in alerts %} {% endfor %}
WhenEventAlertDelivery
{{ a.created_at|timeago }}{{ a.kind }} {% if a.monitor_id %}{{ a.title }}{% elif a.server_id %}{{ a.title }}{% else %}{{ a.title }}{% endif %} {% for k, v in a.delivery.items() %}{{ k.split(':')[0] }} {% endfor %}
{% endif %} {% endblock %}