Add YAML config loading with validation, env overrides for secrets, and a web dashboard exposing health, stats, and recent events.
96 lines
4.3 KiB
Markdown
96 lines
4.3 KiB
Markdown
# ntfy-bridge — Roadmap
|
|
|
|
## Phase 1 : MVP (core engine) — v0.1.0
|
|
|
|
Objectif : daemon qui compile, lit une config, écoute des webhooks et envoie vers Ntfy.
|
|
|
|
- [ ] `main.v` — CLI args (`--config`, `--version`, `--validate`)
|
|
- [ ] `config.v` — Chargement + validation du YAML
|
|
- [ ] `server.v` — HTTP server sur `:9090` avec routing basique
|
|
- [ ] `event.v` — Types de données : `Event`, `Config`, `Source`
|
|
- [ ] `ntfy.v` — Client HTTP POST vers Ntfy (topic, message, priority, tags)
|
|
- [ ] `sources/generic.v` — Webhook passe-partout (POST raw → Ntfy)
|
|
- [ ] `log.v` — Logging structuré (timestamp, level, message)
|
|
- [ ] `ntfy-bridge.example.yaml` — Config d'exemple complète et commentée
|
|
|
|
**Sortie** : `ntfy-bridge` compile, accepte un webhook générique et l'envoie vers Ntfy.
|
|
|
|
## Phase 2 : Sources spécialisées — v0.2.0
|
|
|
|
- [ ] `sources/gitea.v` — Transformer Gitea (push, PR, issues, releases)
|
|
- Parse le JSON webhook Gitea
|
|
- Format : `🔨 [repo] auteur action: "message" (sha)`
|
|
- Priority map par type d'événement
|
|
- [ ] `sources/uptime_kuma.v` — Transformer Uptime Kuma
|
|
- Parse le JSON webhook Kuma (heartbeat)
|
|
- Format : `🚨 monitor is DOWN — status — since time`
|
|
- Priority 5 pour DOWN, 1 pour UP
|
|
- [ ] `sources/docker.v` — Watcher socket Docker
|
|
- Connexion au socket Docker (local + distant TCP)
|
|
- Filtrage par événements (die, health_status, oom)
|
|
- Template de message configurable
|
|
- Multi-hôtes (plusieurs sockets dans la config)
|
|
- [ ] `sources/http_poll.v` — Poller HTTP
|
|
- Goroutine de polling périodique (intervalle configurable)
|
|
- Vérification status code + timeout
|
|
- State machine up/down avec notification uniquement au changement
|
|
- [ ] `dedup.v` — Déduplication basique
|
|
- Cache LRU avec TTL (5 min par défaut)
|
|
- Clé de déduplication : source + type + cible
|
|
|
|
**Sortie** : Toutes les sources majeures sont intégrées et fonctionnelles.
|
|
|
|
## Phase 3 : Robustesse — v0.3.0
|
|
|
|
- [ ] `dedup.v` amélioré — Rate limiting global par topic
|
|
- [ ] Signature webhooks — Vérification HMAC-SHA256 optionnelle (Gitea)
|
|
- [ ] Retry logic — Retry avec backoff exponentiel vers Ntfy (3 tentatives)
|
|
- [ ] Graceful shutdown — SIGTERM → drain des événements en cours
|
|
- [ ] Health endpoint — `GET /health` → 200 + uptime + stats basiques
|
|
- [ ] Stats endpoint — `GET /stats` → compteurs par source
|
|
- [ ] Config reload — `SIGHUP` → reload config sans redémarrage
|
|
- [ ] Tests unitaires — `config_test.v`, `gitea_test.v`, `dedup_test.v`
|
|
|
|
**Sortie** : Le daemon est prêt pour la production homelab.
|
|
|
|
## Phase 4 : Qualité de vie — v0.4.0
|
|
|
|
- [ ] Template engine avancé — Support des variables dans les messages
|
|
```
|
|
"🐳 {container_name} → {status} (exit: {exit_code}) on {host}"
|
|
```
|
|
- [ ] Silence rules — `POST /api/silence?duration=30m` mute temporaire
|
|
- [ ] Grouping — Regrouper N notifications similaires en une seule
|
|
- [ ] Webhook secret validation — HMAC pour tous les webhooks
|
|
- [ ] Docker Compose example — `docker-compose.yml` prêt à l'emploi
|
|
- [ ] systemd unit file — `ntfy-bridge.service`
|
|
- [ ] CI/CD via Gitea Actions — build + test automatique
|
|
|
|
**Sortie** : Expérience utilisateur complète et agréable.
|
|
|
|
## Phase 5 : Futures idées — v0.5.0+
|
|
|
|
- [ ] Web UI minimale — Page de statut des sources + historique récent
|
|
- [ ] Filtres avancés — Expressions conditionnelles par source
|
|
```yaml
|
|
filters:
|
|
- match: { container_name: "test-*" }
|
|
action: drop
|
|
```
|
|
- [ ] Notifications structurées — Support des actions Ntfy (boutons click)
|
|
- [ ] Intégration Prometheus — Métriques exposées au format OpenMetrics
|
|
- [ ] Webhook sortant — Forwarder les événements vers un autre webhook (Slack, Discord)
|
|
- [ ] Support multi-utilisateurs — ACLs par webhook_path
|
|
- [ ] Fichier d'état — Persistance de l'état up/down des health checks
|
|
- [ ] Plugin system — Sources customisables via dll/.so (futur lointain)
|
|
|
|
## Suivi des versions
|
|
|
|
| Version | Date cible | Contenu |
|
|
|---------|-----------|---------|
|
|
| v0.1.0 | — | Moteur core + webhook générique |
|
|
| v0.2.0 | — | Sources Gitea, Uptime Kuma, Docker, HTTP poll |
|
|
| v0.3.0 | — | Robustesse, tests, health check, rate limiting |
|
|
| v0.4.0 | — | Templates, silence rules, grouping, CI/CD |
|
|
| v0.5.0+ | — | Web UI, Prometheus, plugins |
|