Files
uptime/todo.md
Blake Ridgway fc0e7d1bab Initial commit
2026-03-21 18:01:06 -05:00

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