Add debug logging to Hytale player detection
All checks were successful
Deploy GSM / deploy (push) Successful in 30s
All checks were successful
Deploy GSM / deploy (push) Successful in 30s
This commit is contained in:
@@ -649,44 +649,51 @@ const HYTALE_LOGS_PATH = "/opt/hytale/Server/logs";
|
|||||||
|
|
||||||
// Get Hytale players by parsing server logs
|
// Get Hytale players by parsing server logs
|
||||||
export async function getHytalePlayers(server) {
|
export async function getHytalePlayers(server) {
|
||||||
const ssh = await getConnection(server.host, server.sshUser);
|
try {
|
||||||
|
const ssh = await getConnection(server.host, server.sshUser);
|
||||||
|
|
||||||
// Find the most recent log file
|
// Find the most recent log file
|
||||||
const logFileResult = await ssh.execCommand(`ls -t ${HYTALE_LOGS_PATH}/*.log 2>/dev/null | head -1`);
|
const logFileResult = await ssh.execCommand(`ls -t ${HYTALE_LOGS_PATH}/*.log 2>/dev/null | head -1`);
|
||||||
if (!logFileResult.stdout.trim()) {
|
if (!logFileResult.stdout.trim()) {
|
||||||
|
console.log('[Hytale] No log file found');
|
||||||
|
return { online: 0, players: [] };
|
||||||
|
}
|
||||||
|
|
||||||
|
const logFile = logFileResult.stdout.trim();
|
||||||
|
|
||||||
|
// Parse log for player joins and disconnects
|
||||||
|
// Join: [World|default] Player 'Alex47' joined world 'default' at location ... (UUID)
|
||||||
|
// Leave: [PlayerSystems] Removing player 'Alex47 (Alex47)' from world 'default' (UUID)
|
||||||
|
const result = await ssh.execCommand(`grep -E "\\[World\\|.*\\] Player .* joined world|\\[PlayerSystems\\] Removing player" ${logFile} 2>/dev/null | tail -200`);
|
||||||
|
|
||||||
|
const players = new Map(); // UUID -> PlayerName
|
||||||
|
|
||||||
|
const lines = result.stdout.split('\n').filter(l => l.trim());
|
||||||
|
for (const line of lines) {
|
||||||
|
// Check for player join: [World|default] Player 'Name' joined world ... (uuid)
|
||||||
|
const joinMatch = line.match(/\[World\|[^\]]+\] Player '([^']+)' joined world .* \(([a-f0-9-]+)\)/i);
|
||||||
|
if (joinMatch) {
|
||||||
|
const playerName = joinMatch[1];
|
||||||
|
const uuid = joinMatch[2];
|
||||||
|
players.set(uuid, playerName);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check for player leave: [PlayerSystems] Removing player 'Name (Name)' from world ... (uuid)
|
||||||
|
const leaveMatch = line.match(/\[PlayerSystems\] Removing player '([^']+) \([^)]+\)' from world .* \(([a-f0-9-]+)\)/i);
|
||||||
|
if (leaveMatch) {
|
||||||
|
const uuid = leaveMatch[2];
|
||||||
|
players.delete(uuid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const playerList = Array.from(players.values());
|
||||||
|
console.log(`[Hytale] Found ${playerList.length} players: ${playerList.join(', ') || 'none'}`);
|
||||||
|
return { online: playerList.length, players: playerList };
|
||||||
|
} catch (err) {
|
||||||
|
console.error(`[Hytale] Error getting players:`, err.message);
|
||||||
return { online: 0, players: [] };
|
return { online: 0, players: [] };
|
||||||
}
|
}
|
||||||
|
|
||||||
const logFile = logFileResult.stdout.trim();
|
|
||||||
|
|
||||||
// Parse log for player joins and disconnects
|
|
||||||
// Join: [World|default] Player 'Alex47' joined world 'default' at location ... (UUID)
|
|
||||||
// Leave: [PlayerSystems] Removing player 'Alex47 (Alex47)' from world 'default' (UUID)
|
|
||||||
const result = await ssh.execCommand(`grep -E "\\[World\\|.*\\] Player .* joined world|\\[PlayerSystems\\] Removing player" ${logFile} 2>/dev/null | tail -200`);
|
|
||||||
|
|
||||||
const players = new Map(); // UUID -> PlayerName
|
|
||||||
|
|
||||||
const lines = result.stdout.split('\n');
|
|
||||||
for (const line of lines) {
|
|
||||||
// Check for player join: [World|default] Player 'Name' joined world ... (uuid)
|
|
||||||
const joinMatch = line.match(/\[World\|[^\]]+\] Player '([^']+)' joined world .* \(([a-f0-9-]+)\)/i);
|
|
||||||
if (joinMatch) {
|
|
||||||
const playerName = joinMatch[1];
|
|
||||||
const uuid = joinMatch[2];
|
|
||||||
players.set(uuid, playerName);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check for player leave: [PlayerSystems] Removing player 'Name (Name)' from world ... (uuid)
|
|
||||||
const leaveMatch = line.match(/\[PlayerSystems\] Removing player '([^']+) \([^)]+\)' from world .* \(([a-f0-9-]+)\)/i);
|
|
||||||
if (leaveMatch) {
|
|
||||||
const uuid = leaveMatch[2];
|
|
||||||
players.delete(uuid);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const playerList = Array.from(players.values());
|
|
||||||
return { online: playerList.length, players: playerList };
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function readHytaleConfig(server) {
|
export async function readHytaleConfig(server) {
|
||||||
|
|||||||
Reference in New Issue
Block a user