From f18139dfb2252f0d869e7d63ee657c6d1015941a Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Mon, 27 Apr 2020 13:38:32 +0200 Subject: [rebootcontrol/statistics] Move subnet size handling to hook --- .../rebootcontrol/hooks/client-update.inc.php | 24 ++++++++++++++++++++++ modules-available/statistics/api.inc.php | 24 ---------------------- 2 files changed, 24 insertions(+), 24 deletions(-) create mode 100644 modules-available/rebootcontrol/hooks/client-update.inc.php diff --git a/modules-available/rebootcontrol/hooks/client-update.inc.php b/modules-available/rebootcontrol/hooks/client-update.inc.php new file mode 100644 index 00000000..48c16b66 --- /dev/null +++ b/modules-available/rebootcontrol/hooks/client-update.inc.php @@ -0,0 +1,24 @@ += 8 && $subnet[1] < 32) { + $start = ip2long($ip); + if ($start !== false) { + $maskHost = (int)(pow(2, 32 - $subnet[1]) - 1); + $maskNet = ~$maskHost & 0xffffffff; + $end = $start | $maskHost; + $start &= $maskNet; + $netparams = ['start' => sprintf('%u', $start), 'end' => sprintf('%u', $end), 'now' => $NOW]; + $affected = Database::exec('UPDATE reboot_subnet + SET lastseen = :now, seencount = seencount + 1 + WHERE start = :start AND end = :end', $netparams); + if ($affected === 0) { + // New entry + Database::exec('INSERT INTO reboot_subnet (start, end, fixed, isdirect, lastseen, seencount) + VALUES (:start, :end, 0, 0, :now, 1)', $netparams); + } + } + } +} diff --git a/modules-available/statistics/api.inc.php b/modules-available/statistics/api.inc.php index 70811b2b..2b878680 100644 --- a/modules-available/statistics/api.inc.php +++ b/modules-available/statistics/api.inc.php @@ -158,30 +158,6 @@ if ($type{0} === '~') { } } - // Inform WOL (rebootcontrol) module about subnet size (TODO: Use upcoming hook) - if (Module::get('rebootcontrol') !== false) { - $subnet = Request::post('subnet', false, 'string'); - if ($subnet !== false && ($subnet = explode('/', $subnet)) !== false && count($subnet) === 2 - && $subnet[0] === $ip && $subnet[1] >= 8 && $subnet[1] < 32) { - $start = ip2long($ip); - if ($start !== false) { - $maskHost = (int)(pow(2, 32 - $subnet[1]) - 1); - $maskNet = ~$maskHost & 0xffffffff; - $end = $start | $maskHost; - $start &= $maskNet; - $netparams = ['start' => sprintf('%u', $start), 'end' => sprintf('%u', $end), 'now' => $NOW]; - $affected = Database::exec('UPDATE reboot_subnet - SET lastseen = :now, seencount = seencount + 1 - WHERE start = :start AND end = :end', $netparams); - if ($affected === 0) { - // New entry - Database::exec('INSERT INTO reboot_subnet (start, end, fixed, isdirect, lastseen, seencount) - VALUES (:start, :end, 0, 0, :now, 1)', $netparams); - } - } - } - } - // Write statistics data } else if ($type === '~runstate') { -- cgit v1.2.3-55-g7522