feat(scheduler): plugin architecture + Doctor health check plugin
- Create ISchedulerJobPlugin abstraction with JobKind routing - Add SchedulerPluginRegistry for plugin discovery and resolution - Wrap existing scan logic as ScanJobPlugin (zero behavioral change) - Extend Schedule model with JobKind (default "scan") and PluginConfig (jsonb) - Add SQL migrations 007 (job_kind/plugin_config) and 008 (doctor_trends table) - Implement DoctorJobPlugin replacing standalone doctor-scheduler service - Add PostgresDoctorTrendRepository for persistent trend storage - Register Doctor trend endpoints at /api/v1/scheduler/doctor/trends/* - Seed 3 default Doctor schedules (daily full, hourly quick, weekly compliance) - Comment out doctor-scheduler container in compose and services-matrix - Update Doctor architecture docs and AGENTS.md with scheduling migration info Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -14,19 +14,30 @@ Doctor provides a plugin-based diagnostic system that enables:
|
||||
- **Capability probing** for feature compatibility
|
||||
- **Evidence collection** for troubleshooting and compliance
|
||||
|
||||
### Scheduler Runtime Surface (run-002 remediation)
|
||||
### Scheduler Integration (Sprint 20260408-003)
|
||||
|
||||
Doctor Scheduler now exposes an HTTP management and trend surface at:
|
||||
- `GET/POST /api/v1/doctor/scheduler/schedules`
|
||||
- `GET/PUT/DELETE /api/v1/doctor/scheduler/schedules/{scheduleId}`
|
||||
- `GET /api/v1/doctor/scheduler/schedules/{scheduleId}/executions`
|
||||
- `POST /api/v1/doctor/scheduler/schedules/{scheduleId}/execute`
|
||||
- `GET /api/v1/doctor/scheduler/trends`
|
||||
- `GET /api/v1/doctor/scheduler/trends/checks/{checkId}`
|
||||
- `GET /api/v1/doctor/scheduler/trends/categories/{category}`
|
||||
- `GET /api/v1/doctor/scheduler/trends/degrading`
|
||||
> **The standalone Doctor Scheduler service is deprecated.**
|
||||
> Doctor health check scheduling is now handled by the Scheduler service's `DoctorJobPlugin`.
|
||||
|
||||
The default local runtime uses deterministic in-memory repositories with stable ordering for schedule lists, execution history, and trend summaries.
|
||||
Doctor schedules are managed via the Scheduler API with `jobKind="doctor"` and plugin-specific
|
||||
configuration in `pluginConfig`. Trend data is stored in `scheduler.doctor_trends` (PostgreSQL).
|
||||
|
||||
**Scheduler-hosted Doctor endpoints:**
|
||||
- `GET /api/v1/scheduler/doctor/trends` -- aggregated trend summaries
|
||||
- `GET /api/v1/scheduler/doctor/trends/checks/{checkId}` -- per-check trend data
|
||||
- `GET /api/v1/scheduler/doctor/trends/categories/{category}` -- per-category trend data
|
||||
- `GET /api/v1/scheduler/doctor/trends/degrading` -- checks with degrading health
|
||||
|
||||
**Schedule management** uses the standard Scheduler API at `/api/v1/scheduler/schedules`
|
||||
with `jobKind="doctor"` and `pluginConfig` containing Doctor-specific options (mode, categories, alerts).
|
||||
|
||||
Three default Doctor schedules are seeded by `SystemScheduleBootstrap`:
|
||||
- `doctor-full-daily` (0 4 * * *) -- Full health check
|
||||
- `doctor-quick-hourly` (0 * * * *) -- Quick health check
|
||||
- `doctor-compliance-weekly` (0 5 * * 0) -- Compliance category audit
|
||||
|
||||
The Doctor WebService (`src/Doctor/StellaOps.Doctor.WebService/`) remains the execution engine.
|
||||
The plugin communicates with it via HTTP POST to `/api/v1/doctor/run`.
|
||||
|
||||
### AdvisoryAI Diagnosis Surface (run-003 remediation)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user