Zobrazení uptime realmu
Z WoWResource Wiki
Obsah |
Úvod
Informace o době běhu konkrétního realmu (procesu mangos-worldd) se nachází v databázi realmd v tabulce uptime. Zde se ukládá a také aktualizuje údaj, kolik času uplynulo od spuštění. Perioda aktualizace tohoto údaje lze nastavit v souboru mangosd.conf pro daný realm v položce UpdateUptimeInterval v minutách.
V tabulce uptime jsou ukládány údaje pro každý realm samostatně a realmy jsou zde rozlišeny dle sloupce realmid, které odpovídá položce RealmID v nastavení realmu.
Přečtení z databáze
Přečtení doby běhu realmu z nejnovějšího řádku pro daný realm je vcelku jednoduché:
<?php
class Realm
{
var $Id;
var $Database;
function Uptime()
{
$DbResult = $this->Database->query('SELECT uptime FROM realmd.uptime WHERE realmid='.$this->Id.' ORDER BY starttime DESC LIMIT 1');
$DbRow = $DbResult->fetch_assoc();
return($DbRow['uptime']);
}
}
?>
Jiná možnost jak vyčítat dobu běhu je srovnávat čas startu realmu a aktuální čas.
<?php
class Realm
{
var $Id;
var $Database;
function Uptime()
{
$DbResult = $this->Database->query('SELECT uptime FROM realmd.startime WHERE realmid='.$this->Id.' ORDER BY starttime DESC LIMIT 1');
$DbRow = $DbResult->fetch_assoc();
return(time() - $DbRow['starttime']);
}
}
?>
Oba případy jak první tak druhý je nutno ošetřit pro případ, že server selže a bude nedostupný (offline). Pak pokud realm skončí s chybou a tedy neběží, zobrazení doby běhu není správné a je nutno místo něj zobrazit text informující o offline stavu realmu.
Použití
Před použitím je nutné nastavit Id realmu a inicializovat připojení k databázi. Pak může být použití následující:
<?php
$Realm = new Realm();
$Realm->Id = 1;
$Realm->Database = new mysqli('localhost', 'user', 'password');
echo('Realm id '.$Realm->Id.' běží '.$Realm->Uptime().' sekund');
?>
Zobrazení pro lidi
Místo strojového zobrazení počtu sekund lze zobrazit čas běhu lépe v lidmi čitelné podobě:
<?php
function PluralText($Value, $PluralForms)
{
if($Value == 1) return($PluralForms[0]);
else if(($Value > 1) and ($Value < 5)) return($PluralForms[1]);
else return($PluralForms[2]);
}
function HumanReadableTime($Time)
{
$TimeText = array(
array('sekunda', 'sekundy', 'sekund'),
array('minuta', 'minuty', 'minut'),
array('hodina', 'hodiny', 'hodin'),
array('den', 'dny', 'dnů'),
);
$TimeElements = array(
$Time % 60,
$Time / 60 % 60,
$Time / 60 / 60 % 24,
round($Time / 60 / 60 / 24),
);
$Result = '';
foreach($TimeElements as $Index => $TimeElement)
{
if($TimeElement > 0) $Result = $TimeElement.' '.PluralText($TimeElement, $TimeText[$Index]).' '.$Result;
}
return($Result);
}
$Realm = new Realm();
$Realm->Id = 1;
$Realm->Database = new mysqli('localhost', 'user', 'password');
echo('Doba běhu realmu id '.$Realm->Id.': '.HumanReadableTime($Realm->Uptime()));
?>
