game-mode: report scaled-to-zero workload active

This commit is contained in:
codex 2026-05-21 05:59:40 -03:00
parent 4392df8d0c
commit a1e197b4e3
2 changed files with 16 additions and 2 deletions

View File

@ -81,7 +81,8 @@ class GameModeService:
workloads: list[dict[str, Any]] = []
for workload in self._workloads():
desired, current = self._replicas(workload)
set_game_mode_managed_replicas(workload.namespace, workload.name, desired)
effective = desired if desired is not None else current
set_game_mode_managed_replicas(workload.namespace, workload.name, effective)
workloads.append(
{
"kind": workload.kind,
@ -89,11 +90,12 @@ class GameModeService:
"name": workload.name,
"desired_replicas": desired,
"current_replicas": current,
"effective_replicas": effective,
"restore_replicas": workload.restore_replicas,
}
)
active = bool(workloads) and all(item["desired_replicas"] == 0 for item in workloads)
active = bool(workloads) and all(item["effective_replicas"] == 0 for item in workloads)
game = self._current_game or "unknown"
set_game_mode_state(settings.game_mode_node_name, game, active)
return {"status": "active" if active else "idle", "active": active, "node": settings.game_mode_node_name, "game": game, "workloads": workloads}

View File

@ -70,6 +70,18 @@ def test_game_mode_ignores_invalid_workloads_and_fallback_replicas(monkeypatch)
assert status["workloads"][0]["desired_replicas"] is None
def test_game_mode_status_uses_current_when_desired_missing(monkeypatch) -> None:
monkeypatch.setattr(game_mode_module, "settings", _settings())
monkeypatch.setattr(game_mode_module, "get_json", lambda _path: {"spec": {}, "status": {"replicas": 0}})
monkeypatch.setattr(game_mode_module, "set_game_mode_state", lambda *args, **kwargs: None)
monkeypatch.setattr(game_mode_module, "set_game_mode_managed_replicas", lambda *args, **kwargs: None)
status = GameModeService().status()
assert status["active"] is True
assert status["workloads"][0]["effective_replicas"] == 0
def test_game_mode_rejects_unsupported_kind(monkeypatch) -> None:
monkeypatch.setattr(game_mode_module, "settings", _settings([{"kind": "Job", "namespace": "x", "name": "y"}]))
monkeypatch.setattr(game_mode_module, "record_game_mode_transition", lambda *args, **kwargs: None)