Logfiles for sessions

This commit is contained in:
Frank
2026-01-08 18:14:56 +01:00
parent a475c1a268
commit 50d7ce745c
8 changed files with 277 additions and 2 deletions

View File

@@ -0,0 +1,30 @@
<?php
declare(strict_types=1);
namespace App\Game\Controller;
use App\Game\Repository\SessionRepository;
use App\Tech\Repository\UserRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
#[Route('/admin')]
#[IsGranted('ROLE_ADMIN')]
final class GameAdminController extends AbstractController
{
#[Route('', name: 'game_admin_dashboard', methods: ['GET'])]
public function index(
UserRepository $userRepository,
SessionRepository $sessionRepository
): Response {
$players = $userRepository->findByRole('ROLE_PLAYER');
$sessions = $sessionRepository->findAll();
return $this->render('game/admin/index.html.twig', [
'players' => $players,
'sessions' => $sessions,
]);
}
}

View File

@@ -21,6 +21,7 @@ class GameResponseService
private SessionSettingRepository $sessionSettingRepository,
private HubInterface $hub,
private EntityManagerInterface $entityManager,
private string $projectDir,
) {
}
@@ -44,7 +45,7 @@ class GameResponseService
if(!$player)
return ['error' => 'You are not in a game.'];
// TODO: Here i need to add a message handler to save the message in a big log.
$this->logSessionActivity($player, 'PLAYER: ' . $message);
$data = [];
@@ -54,9 +55,43 @@ class GameResponseService
$data = $this->checkConsoleCommando($message, $player);
}
$responseLog = '';
if (isset($data['result']) && is_array($data['result'])) {
foreach ($data['result'] as $line) {
if (is_array($line)) {
$responseLog .= json_encode($line) . "\n";
} elseif (is_string($line) || is_numeric($line)) {
$responseLog .= (string)$line . "\n";
}
}
} elseif (isset($data['error'])) {
$responseLog = 'ERROR: ' . $data['error'];
}
if ($responseLog !== '') {
$this->logSessionActivity($player, 'SERVER: ' . trim($responseLog));
}
return $data;
}
private function logSessionActivity(Player $player, string $content): void
{
$sessionId = $player->getSession()->getId();
$username = $player->getUser()->getUsername();
$logDir = $this->projectDir . '/var/log/sessions/' . $sessionId;
if (!is_dir($logDir)) {
mkdir($logDir, 0777, true);
}
$logFile = $logDir . '/' . $username . '.txt';
$timestamp = date('Y-m-d H:i:s');
$logMessage = sprintf("[%s] %s\n", $timestamp, $content);
file_put_contents($logFile, $logMessage, FILE_APPEND);
}
private function getRechten(Player $player): array
{
$settingName = SessionSettingType::tryFrom('RightsForPlayer' . $player->getScreen());