Browse Source

cache latest server HostName in database

main
ghost 5 months ago
parent
commit
af4ad5f65b
  1. 35
      migrations/Version20240113013727.php
  2. 43
      src/Controller/CrontabController.php
  3. 1
      src/Controller/MainController.php
  4. 1
      src/Controller/ServerController.php
  5. 15
      src/Entity/Server.php
  6. 10
      templates/default/main/index.html.twig
  7. 2
      templates/default/server/index.html.twig

35
migrations/Version20240113013727.php

@ -0,0 +1,35 @@
<?php
declare(strict_types=1);
namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
/**
* Auto-generated Migration: Please modify to your needs!
*/
final class Version20240113013727 extends AbstractMigration
{
public function getDescription(): string
{
return '';
}
public function up(Schema $schema): void
{
// this up() migration is auto-generated, please modify it to your needs
$this->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');
}
}

43
src/Controller/CrontabController.php

@ -133,27 +133,20 @@ class CrontabController extends AbstractController
// Collect servers info // Collect servers info
$servers = []; $servers = [];
foreach ((array) $entityManagerInterface->getRepository(Server::class)->findBy( foreach ((array) $entityManagerInterface->getRepository(Server::class)->findAll() as $server)
[
'crc32server' => (int) $request->get('crc32server')
],
[
'id' => 'ASC'
],
) as $server)
{ {
try 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()}]", false === filter_var($server->getHost(), FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) ? $server->getHost() : "[{$server->getHost()}]",
$server->port $server->port
); );
if ($query->Ping()) if ($node->Ping())
{ {
if ($info = (array) $query->GetInfo()) if ($info = (array) $node->GetInfo())
{ {
// Filter response // Filter response
$bots = isset($info['Bots']) && $info['Bots'] > 0 ? (int) $info['Bots'] : 0; $bots = isset($info['Bots']) && $info['Bots'] > 0 ? (int) $info['Bots'] : 0;
@ -165,6 +158,28 @@ class CrontabController extends AbstractController
$server->host . ':' . $server->port $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 // Get last online value
$online = $entityManagerInterface->getRepository(Online::class)->findOneBy( $online = $entityManagerInterface->getRepository(Online::class)->findOneBy(
[ [
@ -219,7 +234,7 @@ class CrontabController extends AbstractController
// Update player stats // Update player stats
if ($players) if ($players)
{ {
foreach ((array) $query->GetPlayers() as $session) foreach ((array) $node->GetPlayers() as $session)
{ {
// Validate fields // Validate fields
if if
@ -329,7 +344,7 @@ class CrontabController extends AbstractController
finally finally
{ {
$query->Disconnect(); $node->Disconnect();
} }
} }

1
src/Controller/MainController.php

@ -95,6 +95,7 @@ class MainController extends AbstractController
// Add server // Add server
$servers[] = [ $servers[] = [
'crc32server' => $server->getCrc32server(), 'crc32server' => $server->getCrc32server(),
'name' => $server->getName(),
'host' => $server->getHost(), 'host' => $server->getHost(),
'port' => $server->getPort(), 'port' => $server->getPort(),
'added' => $server->getAdded(), 'added' => $server->getAdded(),

1
src/Controller/ServerController.php

@ -169,6 +169,7 @@ class ServerController extends AbstractController
[ [
'address' => $address, 'address' => $address,
'crc32server' => $server->getCrc32Server(), 'crc32server' => $server->getCrc32Server(),
'name' => $server->getName(),
'host' => $server->getHost(), 'host' => $server->getHost(),
'port' => $server->getPort(), 'port' => $server->getPort(),
'info' => $info, 'info' => $info,

15
src/Entity/Server.php

@ -32,6 +32,9 @@ class Server
#[ORM\Column(type: Types::INTEGER)] #[ORM\Column(type: Types::INTEGER)]
private ?int $port = null; private ?int $port = null;
#[ORM\Column(length: 255, nullable: true)]
private ?string $name = null;
public function getId(): ?int public function getId(): ?int
{ {
return $this->id; return $this->id;
@ -108,4 +111,16 @@ class Server
return $this; return $this;
} }
public function getName(): ?string
{
return $this->name;
}
public function setName(?string $name): static
{
$this->name = $name;
return $this;
}
} }

10
templates/default/main/index.html.twig

@ -31,7 +31,15 @@
</span> </span>
{% endif %} {% endif %}
</td> </td>
<td class="text-align-left">{{ server.info.HostName }}</td> <td class="text-align-left">
{% if server.name %}
{{ server.name }}
{% elseif server.info.HostName %}
{{ server.info.HostName }}
{% else %}
#{{ server.crc32server }}
{% endif %}
</td>
<td class="text-align-left">{{ server.info.Map }}</td> <td class="text-align-left">{{ server.info.Map }}</td>
<td class="text-align-left">{{ server.added | format_date }}</td> <td class="text-align-left">{{ server.added | format_date }}</td>
<td class="text-align-left">{{ server.online | format_date }}</td> <td class="text-align-left">{{ server.online | format_date }}</td>

2
templates/default/server/index.html.twig

@ -45,7 +45,7 @@
{% endmacro %} {% endmacro %}
{% from _self import sort %} {% from _self import sort %}
{% extends 'default/layout.html.twig' %} {% 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 %} {% block main_content %}
<div class="border-default padding-8-px margin-y-8-px"> <div class="border-default padding-8-px margin-y-8-px">
<h2> <h2>

Loading…
Cancel
Save