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
All checks were successful
Deploy yourpart (blue-green) / deploy (push) Successful in 1m36s
This commit is contained in:
95
docs/FALUKANT_WORKER_SCHEDULE_SOCKET.md
Normal file
95
docs/FALUKANT_WORKER_SCHEDULE_SOCKET.md
Normal 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.
|
||||
Reference in New Issue
Block a user