Commit Graph
14 Commits
Author SHA1 Message Date
bruno 83778cfb0d feat: Prometheus /metrics endpoint — Phase 5 -> 6/8
CI / test (push) Successful in 2m30s
- metrics.v: GET /metrics au format OpenMetrics (gauges + counters)
- server.v: route /metrics, Stats.http_polls counter, increment in poll loop
- metrics_test.v: test du endpoint metrics
- ROADMAP: Phase 5 6/8 (Prometheus done)
2026-08-03 18:03:26 -04:00
bruno 4150c56054 feat: Phase 5 — filtres, actions Ntfy, outgoing webhooks, state file
CI / test (push) Successful in 2m34s
- Filtres avancés: drop, set_priority, add_tag avec wildcard * (filter_outgoing.v)
- Notifications structurées: click_url + actions (ntfy.v + sources/event.v)
- Webhook sortant: Slack, Discord, JSON (filter_outgoing.v)
- Fichier d'état: persistance poll_state + silence_until (filter_outgoing.v)
- Config: sections filters, outgoing, state (config.v)
- Tests: 9 nouveaux tests unitaires (filter_outgoing_test.v)
- Docs: ROADMAP Phase 5 4/8, version 0.5.0
2026-08-03 17:41:53 -04:00
bruno 5d0db9478c fix: dashboard affiche la version dynamique ({{VERSION}})
CI / test (push) Successful in 2m33s
dashboard.html utilise {{VERSION}}, remplacé par server.v au chargement
via const version de main.v. Plus besoin de maj manuelle du HTML.
2026-08-03 17:24:14 -04:00
bruno adcb1945b8 fix: ne plus utiliser sc delete (cause marked for deletion)
CI / test (push) Successful in 2m14s
sc.exe delete met le service en état 'marked for deletion'
que nssm ne peut pas résoudre. Nettoyage uniquement via nssm.
2026-08-03 17:18:18 -04:00
bruno 51dcefc98d fix: retry logic for 'marked for deletion' Windows SCM race
CI / test (push) Successful in 2m15s
- Clean up both sc.exe and nssm services before install
- Wait 1s after remove for SCM to release
- Retry up to 3x with 3s delay if 'marked for deletion'
- Added import time for sleep calls
2026-08-03 17:08:54 -04:00
bruno 4129379ca5 fix: Windows service via NSSM (sc.exe incompatible)
CI / test (push) Successful in 2m22s
Error 1053 — sc.exe alone cannot run non-service-aware .exe.
ntfy-bridge needs NSSM (Non-Sucking Service Manager) wrapper.

- service.v: --install-service uses nssm.exe (auto-detect PATH or dir)
- scripts/install.ps1: auto-downloads NSSM 2.24 before installing
- Falls back to sc.exe for uninstall/status if nssm not found
2026-08-03 17:04:12 -04:00
bruno 45e349e79d feat: Phase 4.5 — Déploiement multi-plateforme v0.4.5
CI / test (push) Successful in 2m26s
- service.v: --install-service / --uninstall-service / --service-status
  Windows (sc.exe SCM), Linux systemd, Linux openrc — auto-détection OS
- main.v: nouveaux flags service, help mis à jour
- Dockerfile: multi-stage (V from source → alpine:3.20 minimal)
- docker-compose.yml: prêt à l'emploi avec healthcheck
- scripts/install.sh: one-liner Linux (detect OS/arch, build, install)
- scripts/install.ps1: one-liner Windows PowerShell

Docs: ROADMAP Phase 4.5 marqué DONE, version 0.4.5
2026-08-03 16:51:24 -04:00
bruno 26341578fa fix: os.signal_opt API callback-based (V latest)
CI / test (push) Successful in 2m46s
La nouvelle API est fn(os.Signal, fn(os.Signal)) au lieu de
chan+variadic. Enregistrement séparé pour .hup, .int, .term.
2026-08-03 15:00:39 -04:00
bruno 75e438f7d3 fix: _.DockerSource → sources.DockerSource dans docker_watcher.v
CI / test (push) Failing after 11s
2026-08-03 14:57:20 -04:00
bruno fa4fbc23a5 fix: compatibilité V latest — import sources et signal_opt
CI / test (push) Failing after 9s
- docker_watcher.v: 'import sources as _' → 'import sources'
  (le _ supprimait les symboles dans V récent)
- server.v: os.new_signal_channel → os.signal_opt
  (API retirée dans V latest)
- server.v: 'import json' déprécié → 'import x.json2 as json'
2026-08-03 14:55:27 -04:00
bruno 65e2a0d487 fix: CI workflow — remove container, install V on runner
CI / test (push) Failing after 1m29s
The vlang:alpine container lacks Node.js which Gitea Actions needs
for action steps (checkout@v4). Now installs V from source on the
default ubuntu-latest runner image instead.
2026-08-03 14:49:45 -04:00
bruno 72b797704f feat: phase 3 + phase 4 complete — v0.4.0
CI / test (push) Failing after 24s
Phase 3:
- Config reload via SIGHUP (handle_signals loop: .hup reloads config, .int/.term shutdown)
- Hot reload: cfg, webhook_routes, ntfy client, dedup updated without restart

Phase 4:
- Silence rules: POST /api/silence?duration=30m, GET /api/silence, DELETE /api/silence
- Grouping: buffer 10s, events grouped with (×N in 10s) suffix
- CI/CD: .gitea/workflows/ci.yml (build + test on push/PR)

Docs:
- ROADMAP.md: phases 3 & 4 marked DONE, version table updated
- ARCHITECTURE.md: synced with actual code

Version: 0.1.0 → 0.4.0 (main.v, v.mod)
2026-08-03 14:35:59 -04:00
bruno 4e1d7cd94a Add config validation and dashboard
Add YAML config loading with validation, env overrides for secrets, and
a web dashboard exposing health, stats, and recent events.
2026-08-03 12:12:12 -04:00
bruno 3f48912ad7 docs: initial architecture, roadmap, readme for ntfy-bridge
- README.md: project overview, quickstart, sources summary
- ARCHITECTURE.md: complete architecture, data flow, project structure
- ROADMAP.md: 5-phase development plan (v0.1.0 → v0.5.0+)
- CONTRIBUTING.md: dev setup, conventions, how to add a source
- ntfy-bridge.example.yaml: fully documented configuration template
- scripts/example-cron-disk.sh: example cron script → ntfy-bridge
2026-08-01 10:56:32 -04:00