[NLnet] Core developments: notifications system #716

Merged
nemunaire merged 10 commits from f/notifications into master 2026-04-30 14:05:01 +00:00
Owner

Domain owner(s) needs to be notified on issues: by email, webhooks (eg. to slack/matrix/...) or push notifications.

  • 6a. API endpoint for service issue acknowledgement and annotations
  • 6b. Email
  • 6c. Webhooks
  • 6d. UnifiedPush
  • 6e. User form with global per-Service, per-Domain or per-hours settings
  • 6f. Documentation
Domain owner(s) needs to be notified on issues: by email, webhooks (eg. to slack/matrix/...) or push notifications. - [x] 6a. API endpoint for service issue acknowledgement and annotations - [x] 6b. Email - [x] 6c. Webhooks - [x] 6d. UnifiedPush - [x] 6e. User form with global per-Service, per-Domain or per-hours settings - [x] 6f. Documentation
Add NotificationChannel, NotificationPreference, NotificationState,
and NotificationRecord models for the upcoming notification system.
These models support email, webhook, and UnifiedPush channels with
per-user/domain/service preference scoping and state deduplication.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Introduce NotificationChannelStorage, NotificationPreferenceStorage,
NotificationStateStorage, and NotificationRecordStorage interfaces
with KV-based implementations. Extend the Storage composite interface
and add migration 10 (no-op for KV prefix-based storage).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Implement ChannelSender interface with three backends:
- EmailSender: reuses existing Mailer, sends Markdown-formatted alerts
- WebhookSender: HTTP POST with JSON payload and optional HMAC signature
- UnifiedPushSender: HTTP POST following the UnifiedPush protocol

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The Dispatcher is the core notification logic: it receives execution
callbacks, detects status transitions via persisted NotificationState,
resolves user preferences by specificity (service > domain > global),
respects quiet hours, and dispatches through configured channels.

Acknowledgement support allows users to suppress repeat notifications
until the next state change.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add ExecutionCallbackSetter interface and onComplete field to the
checker engine. After a successful execution, the callback is fired
asynchronously so it never blocks the checker pipeline.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
notification: add API endpoints for channels, preferences, history, and acknowledgement
Some checks failed
continuous-integration/drone/push Build is failing
6042596188
New endpoints under /api/notifications:
- CRUD for notification channels (email, webhook, UnifiedPush)
- CRUD for notification preferences (global, per-domain, per-service)
- Notification history listing
- Test notification endpoint

Acknowledgement endpoints added to scoped checker routes:
- POST /api/domains/:domain/checkers/:checkerId/acknowledge
- DELETE /api/domains/:domain/checkers/:checkerId/acknowledge

Thread NotificationController through route declarations for scoped
checker routes (domain and service level).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
nemunaire force-pushed f/notifications from 6042596188
Some checks failed
continuous-integration/drone/push Build is failing
to 342aac04bd
All checks were successful
continuous-integration/drone/push Build is passing
2026-04-29 15:15:52 +00:00
Compare
nemunaire force-pushed f/notifications from 342aac04bd
All checks were successful
continuous-integration/drone/push Build is passing
to 023b35e167
All checks were successful
continuous-integration/drone/push Build is passing
2026-04-30 03:01:37 +00:00
Compare
nemunaire merged commit 861fbce121 into master 2026-04-30 14:05:01 +00:00
nemunaire deleted branch f/notifications 2026-04-30 14:05:01 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
happyDomain/happyDomain!716
No description provided.