diff --git a/Mumble/mumble_stats_collector.php b/Mumble/mumble_stats_collector.php new file mode 100644 index 0000000..24a8298 --- /dev/null +++ b/Mumble/mumble_stats_collector.php @@ -0,0 +1,100 @@ +stringToProxy($iceConnectionString); + $meta = class_exists("\Murmur\MetaPrxHelper") + ? \Murmur\MetaPrxHelper::checkedCast($proxy) + : \MumbleServer\MetaPrxHelper::checkedCast($proxy); + $context = ["secret" => $iceSecret]; + $server = $meta->getServer($serverId, $context); + $rawUsers = $server->getUsers($context); +} catch (Exception $e) { + exit(1); +} + +// Build online user hashes +$onlineHashes = []; +foreach ($rawUsers as $id => $user) { + $userName = is_object($user) + ? $user->name ?? "Unknown User" + : $user["name"] ?? "Unknown User"; + $userHash = is_object($user) + ? $user->hash ?? md5($userName) + : $user["hash"] ?? md5($userName); + $onlineHashes[$userHash] = $userName; +} + +// Process online users +foreach ($onlineHashes as $userHash => $userName) { + if (!isset($userStats[$userHash])) { + $userStats[$userHash] = [ + "name" => $userName, + "first_seen" => $now, + "last_seen" => $now, + "connect_count" => 1, + "days" => [$today => 1], + "total_time" => 0, + "current_session" => ["start" => $now], + "is_connected" => true, + ]; + } else { + $userStats[$userHash]["name"] = $userName; + $userStats[$userHash]["last_seen"] = $now; + if (empty($userStats[$userHash]["is_connected"])) { + $userStats[$userHash]["connect_count"]++; + $userStats[$userHash]["current_session"] = ["start" => $now]; + } + $userStats[$userHash]["is_connected"] = true; + if (!isset($userStats[$userHash]["days"][$today])) { + $userStats[$userHash]["days"][$today] = 1; + } + } +} + +// Process disconnects +foreach ($userStats as $userHash => &$userData) { + if (!isset($onlineHashes[$userHash])) { + if (!empty($userData["is_connected"])) { + $userData["is_connected"] = false; + if (isset($userData["current_session"]["start"])) { + $duration = $now - $userData["current_session"]["start"]; + $userData["total_time"] += $duration; + unset($userData["current_session"]); + } + } + } +} +unset($userData); + +file_put_contents($userStatsFile, json_encode($userStats, JSON_PRETTY_PRINT)); +chmod($userStatsFile, 0666);