feat: capture rcon session gamestate fields

This commit is contained in:
devRaGonSa
2026-05-19 11:58:47 +02:00
parent 9baf20b569
commit e2aaafaca2
3 changed files with 31 additions and 12 deletions

View File

@@ -452,6 +452,23 @@ def query_live_server_sample(
"current_map": ( "current_map": (
_string_or_none(session.get("mapId")) or _string_or_none(session.get("mapName")) _string_or_none(session.get("mapId")) or _string_or_none(session.get("mapName"))
), ),
"game_mode": _string_or_none(session.get("gameMode")),
"allied_score": _coerce_optional_int(session.get("alliedScore")),
"axis_score": _coerce_optional_int(session.get("axisScore")),
"winner": _resolve_rcon_winner(
_coerce_optional_int(session.get("alliedScore")),
_coerce_optional_int(session.get("axisScore")),
),
"allied_faction": _string_or_none(session.get("alliedFaction")),
"axis_faction": _string_or_none(session.get("axisFaction")),
"allied_players": _coerce_optional_int(session.get("alliedPlayerCount")),
"axis_players": _coerce_optional_int(session.get("axisPlayerCount")),
"remaining_match_time_seconds": _coerce_optional_int(session.get("remainingMatchTime")),
"match_time_seconds": _coerce_optional_int(session.get("matchTime")),
"queue_count": _coerce_optional_int(session.get("queueCount")),
"max_queue_count": _coerce_optional_int(session.get("maxQueueCount")),
"vip_queue_count": _coerce_optional_int(session.get("vipQueueCount")),
"max_vip_queue_count": _coerce_optional_int(session.get("maxVipQueueCount")),
"region": target.region, "region": target.region,
"source_name": target.source_name, "source_name": target.source_name,
"snapshot_origin": "real-rcon", "snapshot_origin": "real-rcon",

View File

@@ -59,11 +59,8 @@ def list_rcon_historical_recent_activity(
"name": item.get("map_name"), "name": item.get("map_name"),
"pretty_name": normalize_map_name(item.get("map_pretty_name") or item.get("map_name")), "pretty_name": normalize_map_name(item.get("map_pretty_name") or item.get("map_name")),
}, },
"result": { "result": _build_rcon_result(item.get("latest_payload")),
"allied_score": None, "gamestate": _build_rcon_gamestate(item.get("latest_payload")),
"axis_score": None,
"winner": None,
},
"player_count": int(round(float(item.get("average_players") or 0))), "player_count": int(round(float(item.get("average_players") or 0))),
"peak_players": item.get("peak_players"), "peak_players": item.get("peak_players"),
"sample_count": item.get("sample_count"), "sample_count": item.get("sample_count"),
@@ -100,6 +97,8 @@ def describe_rcon_historical_read_model() -> dict[str, object]:
"server_summary": "exact", "server_summary": "exact",
"recent_matches": "approximate", "recent_matches": "approximate",
"competitive_quality": "partial", "competitive_quality": "partial",
"result": "session-score",
"gamestate": "session",
"player_stats": "unavailable", "player_stats": "unavailable",
}, },
"limitations": [ "limitations": [
@@ -155,11 +154,8 @@ def get_rcon_historical_match_detail(
"name": item.get("map_name"), "name": item.get("map_name"),
"pretty_name": normalize_map_name(item.get("map_pretty_name") or item.get("map_name")), "pretty_name": normalize_map_name(item.get("map_pretty_name") or item.get("map_name")),
}, },
"result": { "result": _build_rcon_result(item.get("latest_payload")),
"allied_score": None, "gamestate": _build_rcon_gamestate(item.get("latest_payload")),
"axis_score": None,
"winner": None,
},
"player_count": int(round(float(item.get("average_players") or 0))), "player_count": int(round(float(item.get("average_players") or 0))),
"peak_players": item.get("peak_players"), "peak_players": item.get("peak_players"),
"sample_count": item.get("sample_count"), "sample_count": item.get("sample_count"),

View File

@@ -446,7 +446,8 @@ def list_rcon_historical_competitive_windows(
windows.max_players, windows.max_players,
windows.status, windows.status,
windows.confidence_mode, windows.confidence_mode,
windows.capabilities_json windows.capabilities_json,
windows.latest_payload_json
FROM rcon_historical_competitive_windows AS windows FROM rcon_historical_competitive_windows AS windows
INNER JOIN rcon_historical_targets AS targets INNER JOIN rcon_historical_targets AS targets
ON targets.id = windows.target_id ON targets.id = windows.target_id
@@ -485,6 +486,7 @@ def list_rcon_historical_competitive_windows(
"status": row["status"], "status": row["status"],
"confidence_mode": row["confidence_mode"], "confidence_mode": row["confidence_mode"],
"capabilities": _deserialize_json_object(row["capabilities_json"]), "capabilities": _deserialize_json_object(row["capabilities_json"]),
"latest_payload": _deserialize_json_object(row["latest_payload_json"]),
} }
) )
return items return items
@@ -611,7 +613,8 @@ def find_rcon_historical_competitive_window(
windows.total_players, windows.total_players,
windows.peak_players, windows.peak_players,
windows.confidence_mode, windows.confidence_mode,
windows.capabilities_json windows.capabilities_json,
windows.latest_payload_json
FROM rcon_historical_competitive_windows AS windows FROM rcon_historical_competitive_windows AS windows
INNER JOIN rcon_historical_targets AS targets INNER JOIN rcon_historical_targets AS targets
ON targets.id = windows.target_id ON targets.id = windows.target_id
@@ -732,6 +735,7 @@ def get_rcon_historical_competitive_window_by_session(
"peak_players": int(row["peak_players"] or 0), "peak_players": int(row["peak_players"] or 0),
"confidence_mode": row["confidence_mode"], "confidence_mode": row["confidence_mode"],
"capabilities": _deserialize_json_object(row["capabilities_json"]), "capabilities": _deserialize_json_object(row["capabilities_json"]),
"latest_payload": _deserialize_json_object(row["latest_payload_json"]),
} }
@@ -986,6 +990,8 @@ def _build_competitive_capabilities() -> dict[str, object]:
"recent_matches": COMPETITIVE_MODE_APPROXIMATE, "recent_matches": COMPETITIVE_MODE_APPROXIMATE,
"server_summary": COMPETITIVE_MODE_EXACT, "server_summary": COMPETITIVE_MODE_EXACT,
"competitive_quality": COMPETITIVE_MODE_PARTIAL, "competitive_quality": COMPETITIVE_MODE_PARTIAL,
"result": "session-score",
"gamestate": "session",
"player_stats": "unavailable", "player_stats": "unavailable",
} }