|
| 1 | +# Changelog |
| 2 | + |
| 3 | +All notable changes to this project are documented in this file. |
| 4 | + |
| 5 | +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), |
| 6 | +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). |
| 7 | + |
| 8 | +## [Unreleased] |
| 9 | + |
| 10 | +## [0.1.0] - 2026-06-07 |
| 11 | + |
| 12 | +Initial release. |
| 13 | + |
| 14 | +### Added |
| 15 | + |
| 16 | +- **Monitors** — HTTP and TCP probes with per-monitor interval, timeout, expected |
| 17 | + status, a "degraded if slower than" threshold, and custom request headers. |
| 18 | +- **Status page** — server-rendered (no JS framework) compact, responsive grid: |
| 19 | + daily uptime bars, an inline SVG 24h latency chart, auto-refresh, Cal Sans |
| 20 | + branding and an SVG favicon. |
| 21 | +- **JSON API** — `GET /api/summary` and `GET /api/monitors/{id}/latency`, plus a |
| 22 | + generated OpenAPI 3.1 document at `/api/openapi.json` (`utoipa`). |
| 23 | +- **TLS certificate expiry monitoring** with advance warnings. |
| 24 | +- **Notifications** — a pluggable `Notifier` trait with a built-in Telegram |
| 25 | + channel; alerts fire only after _N_ consecutive failures (anti-flapping), |
| 26 | + include a snippet of the failing response body, and a recovery message. |
| 27 | +- **Storage** — SQLite (sqlx) with per-monitor retention and automatic pruning. |
| 28 | +- **Live configuration reload** — file-watch and `SIGHUP`: monitors, thresholds, |
| 29 | + retention and notification channels are reconciled in place, with no downtime |
| 30 | + for unchanged monitors. |
| 31 | +- **API hardening** — per-IP rate limiting (`x-ratelimit-*` / `retry-after` |
| 32 | + headers), strict Content-Security-Policy, `X-Content-Type-Options` and |
| 33 | + `Referrer-Policy`. |
| 34 | +- **Performance** — a lock-free, single-flight summary cache (busted on config |
| 35 | + reload) and concurrent per-monitor queries keep responses fast under load. |
| 36 | +- **Packaging** — a static musl binary in a ~25 MB Alpine image (multi-arch |
| 37 | + amd64/arm64), with GitHub Actions for CI (fmt, clippy, tests, cargo-deny) and |
| 38 | + publishing to GHCR. |
| 39 | + |
| 40 | +[Unreleased]: https://github.com/uplg/hora/compare/v0.1.0...HEAD |
| 41 | +[0.1.0]: https://github.com/uplg/hora/releases/tag/v0.1.0 |
0 commit comments