From 3e45ec44d22f03ca6642e08f695c6d7274cecfaf Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Sat, 7 Dec 2019 13:52:54 +0100 Subject: [statistics/rebootcontrol] Add WOL button to statistics module * Overhauled task display in rebootcontrol module * Can only add subnets by CIDR now instead of start and end --- .../rebootcontrol/pages/subnet.inc.php | 42 ++++++++++++---------- 1 file changed, 23 insertions(+), 19 deletions(-) (limited to 'modules-available/rebootcontrol/pages/subnet.inc.php') diff --git a/modules-available/rebootcontrol/pages/subnet.inc.php b/modules-available/rebootcontrol/pages/subnet.inc.php index 946d2d64..c38c7595 100644 --- a/modules-available/rebootcontrol/pages/subnet.inc.php +++ b/modules-available/rebootcontrol/pages/subnet.inc.php @@ -20,23 +20,16 @@ class SubPage private static function addSubnet() { User::assertPermission('subnet.edit'); - $range = []; - foreach (['start', 'end'] as $key) { - $range[$key] = Request::post($key, Request::REQUIRED, 'string'); - $range[$key . '_l'] = ip2long($range[$key]); - if ($range[$key . '_l'] === false) { - Message::addError('invalid-ip-address', $range[$key]); - return; - } - } - if ($range['start_l'] > $range['end_l']) { - Message::addError('invalid-range', $range['start'], $range['end']); + $cidr = Request::post('cidr', Request::REQUIRED, 'string'); + $range = IpUtil::parseCidr($cidr); + if ($range === false) { + Message::addError('invalid-cidr', $cidr); return; } $ret = Database::exec('INSERT INTO reboot_subnet (start, end, fixed, isdirect) VALUES (:start, :end, 1, 0)', [ - 'start' => sprintf('%u', $range['start_l']), - 'end' => sprintf('%u', $range['end_l']), + 'start' => $range['start'], + 'end' => $range['end'], ], true); if ($ret === false) { Message::addError('subnet-already-exists'); @@ -97,15 +90,15 @@ class SubPage User::assertPermission('subnet.*'); $nets = []; $res = Database::simpleQuery('SELECT subnetid, start, end, fixed, isdirect, - lastdirectcheck, lastseen, seencount, Count(hxs.hostid) AS jumphostcount - FROM reboot_subnet + nextdirectcheck, lastseen, seencount, Count(hxs.hostid) AS jumphostcount, Count(sxs.srcid) AS sourcecount + FROM reboot_subnet s LEFT JOIN reboot_jumphost_x_subnet hxs USING (subnetid) + LEFT JOIN reboot_subnet_x_subnet sxs ON (s.subnetid = sxs.dstid AND sxs.reachable <> 0) GROUP BY subnetid, start, end ORDER BY start ASC, end DESC'); $deadline = strtotime('-60 days'); while ($row = $res->fetch(PDO::FETCH_ASSOC)) { - $row['start_s'] = long2ip($row['start']); - $row['end_s'] = long2ip($row['end']); + $row['cidr'] = IpUtil::rangeToCidr($row['start'], $row['end']); $row['lastseen_s'] = Util::prettyTime($row['lastseen']); if ($row['lastseen'] && $row['lastseen'] < $deadline) { $row['lastseen_class'] = 'text-danger'; @@ -114,7 +107,6 @@ class SubPage } $data = ['subnets' => $nets]; Render::addTemplate('subnet-list', $data); - Module::isAvailable('js_ip'); } private static function showSubnet() @@ -127,17 +119,29 @@ class SubPage Message::addError('invalid-subnet', $id); return; } + $subnet['cidr'] = IpUtil::rangeToCidr($subnet['start'], $subnet['end']); $subnet['start_s'] = long2ip($subnet['start']); $subnet['end_s'] = long2ip($subnet['end']); + // Get list of jump hosts $res = Database::simpleQuery('SELECT h.hostid, h.host, h.port, hxs.subnetid FROM reboot_jumphost h LEFT JOIN reboot_jumphost_x_subnet hxs ON (h.hostid = hxs.hostid AND hxs.subnetid = :id) ORDER BY h.host ASC', ['id' => $id]); + // Mark those assigned to the current subnet $jh = []; while ($row = $res->fetch(PDO::FETCH_ASSOC)) { $row['checked'] = $row['subnetid'] === null ? '' : 'checked'; $jh[] = $row; } $subnet['jumpHosts'] = $jh; + // Get list of all subnets that can broadcast into this one + $res = Database::simpleQuery('SELECT s.start, s.end FROM reboot_subnet s + INNER JOIN reboot_subnet_x_subnet sxs ON (s.subnetid = sxs.srcid AND sxs.dstid = :id AND sxs.reachable = 1) + ORDER BY s.start ASC', ['id' => $id]); + $sn = []; + while ($row = $res->fetch(PDO::FETCH_ASSOC)) { + $sn[] = ['cidr' => IpUtil::rangeToCidr($row['start'], $row['end'])]; + } + $subnet['sourceNets'] = $sn; Permission::addGlobalTags($subnet['perms'], null, ['subnet.flag', 'jumphost.view', 'jumphost.assign-subnet']); Render::addTemplate('subnet-edit', $subnet); } @@ -147,4 +151,4 @@ class SubPage } -} \ No newline at end of file +} -- cgit v1.2.3-55-g7522