Zobrazení uptime realmu
Ú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())); ?>