85 lines
2.4 KiB
Markdown
85 lines
2.4 KiB
Markdown
# 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)
|
|
```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
|