diff options
Diffstat (limited to 'modules-available/dnbd3/page.inc.php')
-rw-r--r-- | modules-available/dnbd3/page.inc.php | 80 |
1 files changed, 65 insertions, 15 deletions
diff --git a/modules-available/dnbd3/page.inc.php b/modules-available/dnbd3/page.inc.php index 946df939..39500f83 100644 --- a/modules-available/dnbd3/page.inc.php +++ b/modules-available/dnbd3/page.inc.php @@ -39,6 +39,34 @@ class Page_Dnbd3 extends Page } $bgr = Request::post('bgr', false, 'bool'); $firewall = Request::post('firewall', false, 'bool'); + $overrideIp = false; + $sip = Request::post('fixedip', null, 'string'); + if (empty($sip)) { + $overrideIp = null; + } elseif ($server['fixedip'] !== $overrideIp) { + $ip = ip2long(trim($sip)); + if ($ip !== false) { + $ip = long2ip($ip); + } + if ($ip === false) { + Message::addError('invalid-ipv4', $sip); + return; + } + $res = Database::queryFirst('SELECT serverid FROM dnbd3_server s + LEFT JOIN machine m USING (machineuuid) + WHERE s.fixedip = :ip OR m.clientip = :ip', compact('ip')); + if ($res !== false) { + Message::addError('server-already-exists', $ip); + return; + } + $overrideIp = $ip; + } + if ($overrideIp !== false) { + Database::exec('UPDATE dnbd3_server SET fixedip = :fixedip WHERE machineuuid = :uuid', array( + 'uuid' => $server['machineuuid'], + 'fixedip' => $overrideIp, + )); + } RunMode::setRunMode($server['machineuuid'], 'dnbd3', 'proxy', json_encode(compact('bgr', 'firewall')), false); } @@ -46,7 +74,9 @@ class Page_Dnbd3 extends Page private function toggleUsage() { $enabled = Request::post('enabled', false, 'bool'); + $nfs = Request::post('with-nfs', false, 'bool'); $task = Dnbd3::setEnabled($enabled); + Dnbd3::setNfsFallback($nfs); Taskmanager::waitComplete($task, 5000); } @@ -113,8 +143,8 @@ class Page_Dnbd3 extends Page protected function doRender() { $show = Request::get('show', false, 'string'); - if ($show === 'clients') { - $this->showClientList(); + if ($show === 'proxy') { + $this->showProxyDetails(); } elseif ($show === 'locations') { $this->showServerLocationEdit(); } elseif ($show === false) { @@ -144,7 +174,7 @@ class Page_Dnbd3 extends Page if ($server['uptime'] != 0) { $server['uptime'] += ($NOW - $server['dnbd3lastseen']); } - $server['dnbd3lastseen_s'] = $server['dnbd3lastseen'] ? date('d.m.Y H:i', $server['dnbd3lastseen']) : '-'; + $server['dnbd3lastseen_s'] = $server['dnbd3lastseen'] ? Util::prettyTime($server['dnbd3lastseen']) : '-'; $server['uptime_s'] = $server['uptime'] ? floor($server['uptime'] / 86400) . 'd ' . gmdate('H:i', $server['uptime']) : '-'; $server['totalup_s'] = Util::readableFileSize($server['totalup']); $server['totaldown_s'] = Util::readableFileSize($server['totaldown']); @@ -181,28 +211,48 @@ class Page_Dnbd3 extends Page Render::addTemplate('page-serverlist', array( 'list' => $servers, 'enabled' => Dnbd3::isEnabled(), - 'checked_s' => Dnbd3::isEnabled() ? 'checked' : '', + 'enabled_checked_s' => Dnbd3::isEnabled() ? 'checked' : '', + 'nfs_checked_s' => Dnbd3::hasNfsFallback() ? 'checked' : '', 'rebootcontrol' => Module::isAvailable('rebootcontrol', false) )); } - private function showClientList() + private function showProxyDetails() { $server = $this->getServerById(); - Render::addTemplate('page-header-servername', $server); - $data = Dnbd3Rpc::query($server['ip'], 5003,false, true, false, false); - if (!is_array($data) || !isset($data['clients'])) { + Render::addTemplate('page-proxy-header', $server); + $stats = Dnbd3Rpc::query($server['ip'], 5003,true, true, false, true); + if (!is_array($stats) || !isset($stats['runId'])) { Message::addError('server-unreachable'); return; } + $stats['bytesSent_s'] = Util::readableFileSize($stats['bytesSent']); + $stats['bytesReceived_s'] = Util::readableFileSize($stats['bytesReceived']); + $stats['uptime_s'] = floor($stats['uptime'] / 86400) . 'd ' . gmdate('H:i:s', $stats['uptime']); + Render::addTemplate('page-proxy-stats', $stats); + $images = Dnbd3Rpc::query($server['ip'], 5003,false, false, true); + $confAlts = Dnbd3Rpc::query($server['ip'], 5003,false, false, false, false, true, true); $ips = array(); $sort = array(); - foreach ($data['clients'] as &$c) { + foreach ($stats['clients'] as &$c) { $c['bytesSent_s'] = Util::readableFileSize($c['bytesSent']); $sort[] = $c['bytesSent']; $ips[] = preg_replace('/:\d+$/', '', $c['address']); } - array_multisort($sort, SORT_DESC, $data['clients']); + array_multisort($sort, SORT_DESC, $stats['clients']); + Render::openTag('div', ['class' => 'row']); + // Config + if (is_string($confAlts['config'])) { + Render::addTemplate('page-proxy-config', $confAlts); + } + if (is_array($confAlts['altservers'])) { + foreach ($confAlts['altservers'] as &$as) { + $as['rtt'] = round(array_sum($as['rtt']) / count($as['rtt']) / 1000, 2); + } + unset($as); + Render::addTemplate('page-proxy-altservers', $confAlts); + } + Render::closeTag('div'); Render::openTag('div', ['class' => 'row']); // Count locations $res = Database::simpleQuery('SELECT locationid, Count(*) AS cnt FROM machine WHERE clientip IN (:ips) GROUP BY locationid', compact('ips')); @@ -234,9 +284,9 @@ class Page_Dnbd3 extends Page } if ($showLocs) { $locCount = array_filter($locCount, function ($v) { return isset($v['keep']); }); - Render::addTemplate('page-client-loclist', array('list' => array_values($locCount))); + Render::addTemplate('page-proxy-loclist', array('list' => array_values($locCount))); } - Render::addTemplate('page-clientlist', $data); + Render::addTemplate('page-proxy-clients', $stats); Render::closeTag('div'); } @@ -288,10 +338,10 @@ class Page_Dnbd3 extends Page Message::addError('server-non-existent', 'server'); Util::redirect('?do=dnbd3'); } - if (!is_null($server['clientip'])) { - $server['ip'] = $server['clientip']; - } elseif (!is_null($server['fixedip'])) { + if (!is_null($server['fixedip'])) { $server['ip'] = $server['fixedip']; + } elseif (!is_null($server['clientip'])) { + $server['ip'] = $server['clientip']; } else { $server['ip'] = '127.0.0.1'; } |