From af4ad5f65b564eabcd4ba02878fd98c941a141a2 Mon Sep 17 00:00:00 2001 From: ghost Date: Sat, 13 Jan 2024 03:58:36 +0200 Subject: [PATCH] cache latest server HostName in database --- migrations/Version20240113013727.php | 35 +++++++++++++++++++ src/Controller/CrontabController.php | 43 ++++++++++++++++-------- src/Controller/MainController.php | 1 + src/Controller/ServerController.php | 1 + src/Entity/Server.php | 15 +++++++++ templates/default/main/index.html.twig | 10 +++++- templates/default/server/index.html.twig | 2 +- 7 files changed, 91 insertions(+), 16 deletions(-) create mode 100644 migrations/Version20240113013727.php diff --git a/migrations/Version20240113013727.php b/migrations/Version20240113013727.php new file mode 100644 index 0000000..c02060f --- /dev/null +++ b/migrations/Version20240113013727.php @@ -0,0 +1,35 @@ +addSql('ALTER TABLE server ADD COLUMN name VARCHAR(255) DEFAULT NULL'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('CREATE TEMPORARY TABLE __temp__server AS SELECT id, crc32server, added, updated, online, host, port FROM server'); + $this->addSql('DROP TABLE server'); + $this->addSql('CREATE TABLE server (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, crc32server BIGINT NOT NULL, added BIGINT NOT NULL, updated BIGINT NOT NULL, online BIGINT NOT NULL, host VARCHAR(255) NOT NULL, port INTEGER NOT NULL)'); + $this->addSql('INSERT INTO server (id, crc32server, added, updated, online, host, port) SELECT id, crc32server, added, updated, online, host, port FROM __temp__server'); + $this->addSql('DROP TABLE __temp__server'); + } +} diff --git a/src/Controller/CrontabController.php b/src/Controller/CrontabController.php index 8049e45..ef915af 100644 --- a/src/Controller/CrontabController.php +++ b/src/Controller/CrontabController.php @@ -133,27 +133,20 @@ class CrontabController extends AbstractController // Collect servers info $servers = []; - foreach ((array) $entityManagerInterface->getRepository(Server::class)->findBy( - [ - 'crc32server' => (int) $request->get('crc32server') - ], - [ - 'id' => 'ASC' - ], - ) as $server) + foreach ((array) $entityManagerInterface->getRepository(Server::class)->findAll() as $server) { try { - $query = new \xPaw\SourceQuery\SourceQuery(); + $node = new \xPaw\SourceQuery\SourceQuery(); - $query->Connect( + $node->Connect( false === filter_var($server->getHost(), FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) ? $server->getHost() : "[{$server->getHost()}]", $server->port ); - if ($query->Ping()) + if ($node->Ping()) { - if ($info = (array) $query->GetInfo()) + if ($info = (array) $node->GetInfo()) { // Filter response $bots = isset($info['Bots']) && $info['Bots'] > 0 ? (int) $info['Bots'] : 0; @@ -165,6 +158,28 @@ class CrontabController extends AbstractController $server->host . ':' . $server->port ); + // Update server name + if (!empty($info['HostName']) && mb_strlen($info['HostName']) < 256) + { + $server->setName( + (string) $info['HostName'] + ); + } + + $server->setUpdated( + time() + ); + + $server->setOnline( + time() + ); + + $entityManagerInterface->persist( + $server + ); + + $entityManagerInterface->flush(); + // Get last online value $online = $entityManagerInterface->getRepository(Online::class)->findOneBy( [ @@ -219,7 +234,7 @@ class CrontabController extends AbstractController // Update player stats if ($players) { - foreach ((array) $query->GetPlayers() as $session) + foreach ((array) $node->GetPlayers() as $session) { // Validate fields if @@ -329,7 +344,7 @@ class CrontabController extends AbstractController finally { - $query->Disconnect(); + $node->Disconnect(); } } diff --git a/src/Controller/MainController.php b/src/Controller/MainController.php index 587cda7..714daae 100644 --- a/src/Controller/MainController.php +++ b/src/Controller/MainController.php @@ -95,6 +95,7 @@ class MainController extends AbstractController // Add server $servers[] = [ 'crc32server' => $server->getCrc32server(), + 'name' => $server->getName(), 'host' => $server->getHost(), 'port' => $server->getPort(), 'added' => $server->getAdded(), diff --git a/src/Controller/ServerController.php b/src/Controller/ServerController.php index 7e20623..1ec526d 100644 --- a/src/Controller/ServerController.php +++ b/src/Controller/ServerController.php @@ -169,6 +169,7 @@ class ServerController extends AbstractController [ 'address' => $address, 'crc32server' => $server->getCrc32Server(), + 'name' => $server->getName(), 'host' => $server->getHost(), 'port' => $server->getPort(), 'info' => $info, diff --git a/src/Entity/Server.php b/src/Entity/Server.php index 55b44a1..b2b6ccd 100644 --- a/src/Entity/Server.php +++ b/src/Entity/Server.php @@ -32,6 +32,9 @@ class Server #[ORM\Column(type: Types::INTEGER)] private ?int $port = null; + #[ORM\Column(length: 255, nullable: true)] + private ?string $name = null; + public function getId(): ?int { return $this->id; @@ -108,4 +111,16 @@ class Server return $this; } + + public function getName(): ?string + { + return $this->name; + } + + public function setName(?string $name): static + { + $this->name = $name; + + return $this; + } } diff --git a/templates/default/main/index.html.twig b/templates/default/main/index.html.twig index dbb8f29..9a16a83 100644 --- a/templates/default/main/index.html.twig +++ b/templates/default/main/index.html.twig @@ -31,7 +31,15 @@ {% endif %} - {{ server.info.HostName }} + + {% if server.name %} + {{ server.name }} + {% elseif server.info.HostName %} + {{ server.info.HostName }} + {% else %} + #{{ server.crc32server }} + {% endif %} + {{ server.info.Map }} {{ server.added | format_date }} {{ server.online | format_date }} diff --git a/templates/default/server/index.html.twig b/templates/default/server/index.html.twig index 7f24b1f..3f8a72c 100644 --- a/templates/default/server/index.html.twig +++ b/templates/default/server/index.html.twig @@ -45,7 +45,7 @@ {% endmacro %} {% from _self import sort %} {% extends 'default/layout.html.twig' %} -{% block head_title_content %}{% if server.info.HostName is defined %}{{ server.info.HostName }}{% else %}#{{ server.crc32server }}{% endif %} - {{ app.name }}{% endblock %} +{% block head_title_content %}{% if server.name %}{{ server.name }}{% else %}#{{ server.crc32server }}{% endif %} - {{ app.name }}{% endblock %} {% block main_content %}