[NLnet] Domains and service checks #695

Merged
nemunaire merged 28 commits from f/nlnet-core-checkers into master 2026-04-16 09:59:40 +00:00
Owner

1. Core developments: preparation and scheduling tests

  • 1d. Static configuration (or admin API endpoint) to control/enable and configure tests plugins
  • 1e. Basic scheduler to queue tests requests
  • 1f. API endpoints to list tests, launch a test for a given service, retrieve status, get history and last report

4. Core developments: user interface

  • 4b. Form to configure tests from user perspective (relative to its service)
    • configure plugins at user level
    • configure plugins at domain level
    • run tests on demand at domain level
    • configure plugins at service level
    • run tests on demand at service level
  • 4c. Page to have domain(s) status overview
  • 4d. Pages to display reports through plugins ("standard" metrics or yes-no reports and detailed reports)
    • "standard" metrics or yes-no reports
    • detailed reports (HTML in iframe)

5. Core developments: cron-like and automatic tests

  • 5a. Process to schedule tests
  • 5b. Interface to configure recurrent tests intervals
  • 5c. Admin configuration to restrict/limit automatic tests
  • 5d. Documentation

7. Domain tests: zone delegation tests

  • 7a. Plugin and container setup for Zonemaster (extends official zonemaster/cli)
    • Run tests
    • Non container needed as Zonemaster expose a usable API
  • 7c. half of Frontend integration (dedicated reports)
    • Display formated reports

15. Applications tests: part 0

  • 15a. ping plugin (as a sample plugin)
    • Run tests
    • Display metrics reports

16. Applications tests: part 1

  • 16d. Matrix IM (as a sample plugin)
    • Run tests
    • Display formated reports
### 1. Core developments: preparation and scheduling tests - [x] 1d. Static configuration (or admin API endpoint) to control/enable and configure tests plugins - [x] 1e. Basic scheduler to queue tests requests - [x] 1f. API endpoints to list tests, launch a test for a given service, retrieve status, get history and last report ### 4. Core developments: user interface - [x] 4b. Form to configure tests from user perspective (relative to its service) - [x] configure plugins at user level - [x] configure plugins at domain level - [x] run tests on demand at domain level - [x] configure plugins at service level - [x] run tests on demand at service level - [x] 4c. Page to have domain(s) status overview - [x] 4d. Pages to display reports through plugins ("standard" metrics or yes-no reports and detailed reports) - [x] "standard" metrics or yes-no reports - [x] detailed reports (HTML in iframe) ### 5. Core developments: cron-like and automatic tests - [x] 5a. Process to schedule tests - [x] 5b. Interface to configure recurrent tests intervals - [x] 5c. Admin configuration to restrict/limit automatic tests - [x] 5d. Documentation ### 7. Domain tests: zone delegation tests - [x] 7a. Plugin and container setup for Zonemaster (extends official zonemaster/cli) - [x] Run tests - Non container needed as Zonemaster expose a usable API - [x] 7c. **half of** Frontend integration (dedicated reports) - [x] Display formated reports ### 15. Applications tests: part 0 - [x] 15a. ping plugin (as a sample plugin) - [x] Run tests - [x] Display metrics reports ### 16. Applications tests: part 1 - [x] 16d. Matrix IM (as a sample plugin) - [x] Run tests - [x] Display formated reports
Introduce the foundational types for the checker system:
- CheckTarget, CheckPlan, Execution, CheckEvaluation model types
- CheckerDefinition, CheckerOptions, ObservationSnapshot types
- CheckRule, ObservationProvider, CheckAggregator interfaces
- CheckerEngine interface for orchestrating check pipelines
- Global checker and observation provider registries
- WorstStatusAggregator for combining rule results
- New error types, config option for max concurrency, and
  AutoFill constants for context-driven option resolution

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add ValidateMapValues() to the forms package for validating
checker option maps against field documentation (required fields,
allowed choices, type checking).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add the persistence layer for the checker system:
- Storage interfaces (CheckPlanStorage, CheckerOptionsStorage,
  CheckEvaluationStorage, ExecutionStorage, ObservationSnapshotStorage,
  SchedulerStateStorage) in the usecase/checker package
- KV-based implementations for LevelDB/Oracle NoSQL backends
- In-memory implementation for testing
- Integrate checker storage into the main Storage interface

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Implement the checker business logic:
- CheckerOptionsUsecase: scope-based option resolution, validation,
  auto-fill from execution context (domain, zone, service)
- CheckPlanUsecase: CRUD for user scheduling configurations
- CheckStatusUsecase: aggregated status queries, execution history
- CheckerEngine: full execution pipeline (observe, evaluate, aggregate)
- Scheduler: background job executor with auto-discovery, min-heap
  queue, worker pool, and jitter-based scheduling

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Wire up the checker system to the HTTP layer:
- API controllers for checker operations, options, plans, and results
- Scoped routes at domain and service level
- Admin controllers for checker config and scheduler management
- App initialization: create usecases, start/stop scheduler
- Zone controller updated to include per-service check status

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add the frontend infrastructure for the checker UI:
- API client with scoped helpers for domain/service-level operations
- Svelte stores for checker state (currentExecution, currentCheckInfo)
- Utility functions for status colors, icons, i18n keys, date formatting
- Shared helpers: withInheritedPlaceholders, downloadBlob, collectAllOptionDocs
- English translations for all checker UI strings
- Zone model and form types extended for checker support

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add all checker UI pages and components:
- Checker list, config, schedule, and rules pages
- Execution list, detail, results, and rules pages
- Sidebar components for domain/service checker status
- Run check modal with option overrides and rule selection
- Domain-scoped and service-scoped check routes
- Admin pages for checker configuration and scheduler management
- Header navigation link for checkers section

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Introduce CheckerHTMLReporter interface that observation providers can
implement to render rich HTML documents from their data. The Zonemaster
provider implements it with collapsible accordions and severity badges.

Adds API endpoint GET .../observations/:obsKey/report, frontend stores
for view mode switching (HTML/JSON), and wires the sidebar toggle buttons.
Observation providers can now implement CheckerMetricsReporter to
extract time-series metrics from their stored data. The controller
selects Prometheus text or JSON format based on the Accept header.

Routes: user-level (/api/checkers/metrics), domain-level, per-checker,
and per-execution. Ping exports RTT and packet loss; domain expiry
exports days remaining.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
checkers: add frontend metrics chart on execution pages
Some checks failed
continuous-integration/drone/push Build is failing
5af6dba376
Add Chart.js-based line chart for checker metrics. The chart appears
on the executions list page (aggregated) and on individual execution
detail pages. Metrics view mode is selectable via the sidebar alongside
HTML report and raw JSON views.
nemunaire force-pushed f/nlnet-core-checkers from 5af6dba376
Some checks failed
continuous-integration/drone/push Build is failing
to e97f444022
Some checks failed
continuous-integration/drone/push Build is failing
2026-04-05 03:21:25 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from e97f444022
Some checks failed
continuous-integration/drone/push Build is failing
to 39b5af099b
Some checks failed
continuous-integration/drone/push Build is failing
2026-04-05 03:28:40 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from 39b5af099b
Some checks failed
continuous-integration/drone/push Build is failing
to c6534e607d
Some checks failed
continuous-integration/drone/push Build is failing
2026-04-05 05:01:21 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from c6534e607d
Some checks failed
continuous-integration/drone/push Build is failing
to d5372e0a21
Some checks failed
continuous-integration/drone/push Build is failing
2026-04-05 10:11:15 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from d5372e0a21
Some checks failed
continuous-integration/drone/push Build is failing
to f0a0579120
Some checks failed
continuous-integration/drone/push Build is failing
2026-04-05 11:51:24 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from f0a0579120
Some checks failed
continuous-integration/drone/push Build is failing
to 9ce7f5e104
Some checks failed
continuous-integration/drone/push Build is failing
2026-04-05 12:01:35 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from 9ce7f5e104
Some checks failed
continuous-integration/drone/push Build is failing
to 5de8a80d5b
Some checks failed
continuous-integration/drone/push Build is failing
2026-04-05 15:11:26 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from 5de8a80d5b
Some checks failed
continuous-integration/drone/push Build is failing
to 7251ee6053
Some checks failed
continuous-integration/drone/push Build is failing
2026-04-05 16:02:45 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from 7251ee6053
Some checks failed
continuous-integration/drone/push Build is failing
to 07c0920293
Some checks failed
continuous-integration/drone/push Build is failing
2026-04-07 19:27:43 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from 07c0920293
Some checks failed
continuous-integration/drone/push Build is failing
to eb3c6bea0d
Some checks failed
continuous-integration/drone/push Build is failing
2026-04-07 20:03:49 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from eb3c6bea0d
Some checks failed
continuous-integration/drone/push Build is failing
to cc3f7a6a73
Some checks failed
continuous-integration/drone/push Build is failing
2026-04-08 04:06:36 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from cc3f7a6a73
Some checks failed
continuous-integration/drone/push Build is failing
to 3577267b7d
Some checks are pending
continuous-integration/drone/push Build is running
2026-04-08 05:02:35 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from 3577267b7d
Some checks are pending
continuous-integration/drone/push Build is running
to 690050276b
All checks were successful
continuous-integration/drone/push Build is passing
2026-04-08 05:07:40 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from 690050276b
All checks were successful
continuous-integration/drone/push Build is passing
to ac38a4fcdc
All checks were successful
continuous-integration/drone/push Build is passing
2026-04-09 10:44:13 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from ac38a4fcdc
All checks were successful
continuous-integration/drone/push Build is passing
to 52882bccef
Some checks are pending
continuous-integration/drone/push Build is running
2026-04-10 12:13:58 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from 52882bccef
Some checks are pending
continuous-integration/drone/push Build is running
to e403db4198
Some checks are pending
continuous-integration/drone/push Build is running
2026-04-10 12:15:55 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from e403db4198
Some checks are pending
continuous-integration/drone/push Build is running
to 15128c034f
Some checks are pending
continuous-integration/drone/push Build is running
2026-04-10 12:20:55 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from 15128c034f
Some checks are pending
continuous-integration/drone/push Build is running
to 2e0de8cf2c
Some checks failed
continuous-integration/drone/push Build is failing
2026-04-10 12:29:24 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from 2e0de8cf2c
Some checks failed
continuous-integration/drone/push Build is failing
to b1d7df8d3c
Some checks failed
continuous-integration/drone/push Build is failing
2026-04-10 16:06:44 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from b1d7df8d3c
Some checks failed
continuous-integration/drone/push Build is failing
to b416cb5688
Some checks are pending
continuous-integration/drone/push Build is running
2026-04-10 17:30:31 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from b416cb5688
Some checks are pending
continuous-integration/drone/push Build is running
to dbc44fcecb
Some checks failed
continuous-integration/drone/push Build is failing
2026-04-10 17:40:01 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from dbc44fcecb
Some checks failed
continuous-integration/drone/push Build is failing
to ea301e169a
Some checks are pending
continuous-integration/drone/push Build is running
2026-04-10 18:56:30 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from ea301e169a
Some checks are pending
continuous-integration/drone/push Build is running
to a23461f771
Some checks failed
continuous-integration/drone/push Build is failing
2026-04-10 19:01:30 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from a23461f771
Some checks failed
continuous-integration/drone/push Build is failing
to df722e8201
Some checks are pending
continuous-integration/drone/push Build is running
2026-04-10 19:34:20 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from df722e8201
Some checks are pending
continuous-integration/drone/push Build is running
to 6825f092ab
All checks were successful
continuous-integration/drone/push Build is passing
2026-04-10 19:42:25 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from 6825f092ab
All checks were successful
continuous-integration/drone/push Build is passing
to b1bb4e9e6c
Some checks failed
continuous-integration/drone/push Build is failing
2026-04-11 05:03:13 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from 6825f092ab
All checks were successful
continuous-integration/drone/push Build is passing
to 0a95b28178
All checks were successful
continuous-integration/drone/push Build is passing
2026-04-11 08:32:26 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from 0a95b28178
All checks were successful
continuous-integration/drone/push Build is passing
to 4758748f90
Some checks are pending
continuous-integration/drone/push Build is running
2026-04-11 09:45:21 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from 4758748f90
Some checks are pending
continuous-integration/drone/push Build is running
to 64466a7cce
All checks were successful
continuous-integration/drone/push Build is passing
2026-04-11 10:23:58 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from 64466a7cce
All checks were successful
continuous-integration/drone/push Build is passing
to 1e3bf0fb33
All checks were successful
continuous-integration/drone/push Build is passing
2026-04-12 08:30:15 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from 1e3bf0fb33
All checks were successful
continuous-integration/drone/push Build is passing
to fa0ab902b8
Some checks failed
continuous-integration/drone/push Build is failing
2026-04-14 09:13:04 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from 1e3bf0fb33
All checks were successful
continuous-integration/drone/push Build is passing
to 71c14b446c
Some checks are pending
continuous-integration/drone/push Build is running
2026-04-14 10:00:14 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from 71c14b446c
Some checks are pending
continuous-integration/drone/push Build is running
to 521c169719
Some checks are pending
continuous-integration/drone/push Build is running
2026-04-14 10:04:48 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from 521c169719
Some checks are pending
continuous-integration/drone/push Build is running
to a790c4113d
Some checks are pending
continuous-integration/drone/push Build is running
2026-04-14 10:05:47 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from a790c4113d
Some checks are pending
continuous-integration/drone/push Build is running
to 1fd8945016
All checks were successful
continuous-integration/drone/push Build is passing
2026-04-14 10:11:40 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from 1fd8945016
All checks were successful
continuous-integration/drone/push Build is passing
to 35d2a2f161
All checks were successful
continuous-integration/drone/push Build is passing
2026-04-14 10:47:48 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from 35d2a2f161
All checks were successful
continuous-integration/drone/push Build is passing
to 200200f473
All checks were successful
continuous-integration/drone/push Build is passing
2026-04-14 11:17:06 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from 200200f473
All checks were successful
continuous-integration/drone/push Build is passing
to c8bb03b2b2
All checks were successful
continuous-integration/drone/push Build is passing
2026-04-14 12:47:29 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from c8bb03b2b2
All checks were successful
continuous-integration/drone/push Build is passing
to 40544d3efb
Some checks are pending
continuous-integration/drone/push Build is running
2026-04-14 14:30:47 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from 40544d3efb
Some checks are pending
continuous-integration/drone/push Build is running
to 5b4354acb0
All checks were successful
continuous-integration/drone/push Build is passing
2026-04-14 14:35:13 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from 5b4354acb0
All checks were successful
continuous-integration/drone/push Build is passing
to bcb47d8d4c
All checks were successful
continuous-integration/drone/push Build is passing
2026-04-15 04:14:39 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from bcb47d8d4c
All checks were successful
continuous-integration/drone/push Build is passing
to 544822b57c
All checks were successful
continuous-integration/drone/push Build is passing
2026-04-15 07:49:57 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from 544822b57c
All checks were successful
continuous-integration/drone/push Build is passing
to 07eb4da7d2
All checks were successful
continuous-integration/drone/push Build is passing
2026-04-15 09:32:05 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from 07eb4da7d2
All checks were successful
continuous-integration/drone/push Build is passing
to 40b4bab4a8
All checks were successful
continuous-integration/drone/push Build is passing
2026-04-15 12:41:14 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from 40b4bab4a8
All checks were successful
continuous-integration/drone/push Build is passing
to 3c8df24ebc
All checks were successful
continuous-integration/drone/push Build is passing
2026-04-15 18:01:40 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from 3c8df24ebc
All checks were successful
continuous-integration/drone/push Build is passing
to e5a8c55630
Some checks are pending
continuous-integration/drone/push Build is pending
2026-04-15 19:36:13 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from e5a8c55630
Some checks are pending
continuous-integration/drone/push Build is pending
to 22aee6a87b
Some checks are pending
continuous-integration/drone/push Build is pending
2026-04-15 19:37:51 +00:00
Compare
nemunaire changed title from [WIP] Domains and service checks to Domains and service checks 2026-04-15 19:40:25 +00:00
nemunaire force-pushed f/nlnet-core-checkers from 22aee6a87b
Some checks are pending
continuous-integration/drone/push Build is pending
to 5e988b4098
Some checks are pending
continuous-integration/drone/push Build is running
2026-04-15 20:18:42 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from 5e988b4098
Some checks are pending
continuous-integration/drone/push Build is running
to 6e91c779bd
All checks were successful
continuous-integration/drone/push Build is passing
2026-04-15 21:47:47 +00:00
Compare
nemunaire force-pushed f/nlnet-core-checkers from 6e91c779bd
All checks were successful
continuous-integration/drone/push Build is passing
to e0dc19614f
Some checks failed
continuous-integration/drone/push Build is failing
2026-04-16 09:58:32 +00:00
Compare
nemunaire changed title from Domains and service checks to [NLnet] Domains and service checks 2026-04-16 09:58:45 +00:00
nemunaire merged commit e0dc19614f into master 2026-04-16 09:59:40 +00:00
nemunaire deleted branch f/nlnet-core-checkers 2026-04-16 09:59:41 +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!695
No description provided.