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,31 @@
# Director: Auto-Adjust Income
Dieses Feature koppelt das Gehalt (`income`) eines Direktors optional automatisch an sein Wunschgehalt (`wished_income`).
## Aktivierung
Feld am Director:
- `auto_adjust_income` (`boolean`, default `false`)
Bei `false` bleibt die normale Zufriedenheitslogik aktiv.
## Verhalten im Daemon
Die Prüfung läuft im täglichen Director-Satisfaction-Tick.
- Wenn `auto_adjust_income = true`:
- der Daemon setzt `income = wished_income` (untere Grenze `0`).
- die Zufriedenheit wird in diesem Tick **nicht** abgesenkt.
- Wenn `auto_adjust_income = false`:
- Zufriedenheit sinkt täglich abhängig vom Gehaltsgap um `1..3` Punkte.
## Zusammenhang mit Kündigungen
- Kündigungsprüfung bleibt separat (daily resignation check).
- Zusätzlich gilt Karenzzeit: kein Rücktritt in den ersten 3 Tagen nach Einstellung/Update.
## UI-/API-Hinweis
Der Toggle „Gehalt automatisch anpassen“ wird über die bestehenden Director-Settings gespeichert.
Nach erfolgreicher Änderung aktualisiert der nächste tägliche Tick den effektiven `income`-Wert.

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.