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:
31
docs/FALUKANT_DIRECTOR_AUTO_ADJUST_INCOME.md
Normal file
31
docs/FALUKANT_DIRECTOR_AUTO_ADJUST_INCOME.md
Normal 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.
|
||||
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