Implement worker schedule access control and runtime tracking: Added a new user right worker_schedule_read to manage access to the getWorkerSchedules WebSocket endpoint. Enhanced the WebSocket server to handle requests for worker schedules, including detailed responses. Introduced runtime tracking for workers, allowing for monitoring of their current state and activity. Updated relevant SQL and Rust structures to support these features.
All checks were successful
Deploy yourpart (blue-green) / deploy (push) Successful in 1m36s

This commit is contained in:
Torsten Schulz (local)
2026-05-08 09:04:21 +02:00
parent b7d7705bbe
commit 42f71d831f
7 changed files with 479 additions and 5 deletions

View File

@@ -0,0 +1,95 @@
# Worker-Schedules per WebSocket
Dieses Feature stellt eine Übersicht bereit, wann Worker-Tasks voraussichtlich wieder laufen.
## Zugriffsschutz
Der Zugriff ist nur erlaubt für Nutzer mit mindestens einem dieser Rechte:
- `admin`
- `worker_schedule_read`
Migration für das neue Recht:
- `migrations/018_worker_schedule_socket_right.sql`
## WebSocket-Events
Voraussetzung: Der Client hat vorher `setUserId` gesendet.
### 1) Übersicht
Request:
```json
{
"event": "getWorkerSchedules",
"data": {}
}
```
Response:
```json
{
"event": "getWorkerSchedulesResponse",
"ok": true,
"generated_at": 1715157600,
"schedules": [
{
"worker": "DirectorWorker",
"tasks": [
{
"task": "salary_payout",
"cadence_seconds": 86400,
"cadence_label": "86400s interval",
"next_run_latest_ts": 1715244000,
"next_run_latest_in_seconds": 86400
}
]
}
]
}
```
Hinweis: Sekündliche/minütliche Tasks sind absichtlich nicht enthalten.
### 2) Detaillierte Übersicht
Request:
```json
{
"event": "getWorkerSchedulesDetailed",
"data": {}
}
```
Response (zusätzlich Live-Status aus dem Worker-Runtime-Registry):
```json
{
"event": "getWorkerSchedulesDetailedResponse",
"ok": true,
"generated_at": 1715157600,
"schedules": [
{
"worker": "DirectorWorker",
"running_worker": true,
"running_watchdog": true,
"current_step": "DirectorWorker: pay_salary",
"last_step_change_ts": 1715157000,
"tasks": []
}
]
}
```
## Rechteprüfung (technisch)
Der Daemon akzeptiert sowohl:
- `setUserId = community.user.id`
- `setUserId = falukant_data.falukant_user.id`
In beiden Fällen wird auf `community.user_right` + `"type".user_right` geprüft.