2.4 KiB
2.4 KiB
arcline-uptime — Lightweight Uptime Monitor
Polls HTTP/TCP endpoints on a schedule, stores results in SQLite, sends alerts via webhook (Discord, Slack) and/or email. Single binary, no external services.
Stack
- Language: Go
- Storage: SQLite (via modernc.org/sqlite — pure Go, no CGO)
- Config: YAML
- Alerts: HTTP webhook (Discord/Slack compatible), SMTP email
- Optional UI: embedded web dashboard (net/http + Go templates)
Config format (uptime.yaml)
global:
check_interval: 60 # seconds
timeout: 10 # seconds per check
alert_cooldown: 300 # seconds between repeat alerts for same monitor
alerts:
- type: discord
webhook_url: "https://discord.com/api/webhooks/..."
- type: email
smtp_host: mail.arclineit.com
smtp_port: 587
from: alerts@arclineit.com
to: blake@arclineit.com
monitors:
- name: "Main Website"
type: http
url: "https://arclineit.com"
expected_status: 200
contains: "[arcline]" # optional string check in body
- name: "Control Panel"
type: http
url: "https://cp.arclineit.com"
expected_status: 200
- name: "SSH"
type: tcp
host: "server1.arclineit.com"
port: 22
- name: "Mail Server"
type: tcp
host: "mail.arclineit.com"
port: 587
Web dashboard
/— current status of all monitors (live, auto-refresh)/history— response time graph (ASCII sparklines or simple SVG)/metrics— Prometheus-compatible text endpoint (optional)- Protected by basic auth (config: dashboard.username / dashboard.password)
Alert format (Discord example)
[DOWN] Main Website
Expected 200, got 503
Checked at 2026-03-03 14:32:01 UTC
Response time: 8043ms (timeout)
Tasks
- Project scaffold
- YAML config parser
- HTTP monitor (status code, body contains, response time)
- TCP monitor (dial timeout)
- Scheduler (ticker per monitor, respect interval)
- SQLite schema (monitors, checks, alerts_sent)
- Result storage
- Discord webhook alerter
- SMTP email alerter
- Alert cooldown logic (don't spam on sustained outage)
- Recovery alert ("Main Website is back up, was down 12m 34s")
- Web dashboard — current status page
- Web dashboard — history / sparkline graph
- /metrics Prometheus endpoint
- Basic auth for dashboard
- systemd unit file example
- README with self-hosting guide
- Cross-compile Makefile