All checks were successful
Deploy yourpart (blue-green) / deploy (push) Successful in 1m36s
96 lines
1.7 KiB
Markdown
96 lines
1.7 KiB
Markdown
# 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.
|