Initial commit
This commit is contained in:
84
todo.md
Normal file
84
todo.md
Normal file
@@ -0,0 +1,84 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user