%PDF- %PDF-
| Direktori : /backups/router/usr/local/opnsense/scripts/interfaces/ |
| Current File : //backups/router/usr/local/opnsense/scripts/interfaces/traffic_stats.php |
#!/usr/local/bin/php
<?php
/*
* Copyright (C) 2016-2020 Deciso B.V.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
* OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
require_once("interfaces.inc");
require_once("config.inc");
function map_ifs($ifs, $data)
{
$result = ["interfaces" => []];
$temp = gettimeofday();
$result['time'] = (double)$temp["sec"] + (double)$temp["usec"] / 1000000.0;
foreach ($ifs as $interfaceKey => $itf) {
if (array_key_exists($itf['if'], $data)) {
$result['interfaces'][$interfaceKey] = [
"inbytes" => $data[$itf['if']]['bytes received'],
"outbytes" => $data[$itf['if']]['bytes transmitted'],
"inpkts" => $data[$itf['if']]['packets received'],
"outpkts" => $data[$itf['if']]['packets transmitted'],
"inerrs" => $data[$itf['if']]['input errors'],
"outerrs" => $data[$itf['if']]['output errors'],
"collisions" => $data[$itf['if']]['collisions'],
"name" => !empty($itf['descr']) ? $itf['descr'] : $interfaceKey
];
}
}
return $result;
}
if (isset($argv[1])) {
$intfs = legacy_config_get_interfaces(["virtual" => false]);
$prev = legacy_interface_stats();
while (1) {
$interfaces = $tmp = legacy_interface_stats();
$keys = [
'bytes received',
'bytes transmitted',
'packets received',
'packets transmitted',
'input errors',
'output errors',
'collisions'
];
foreach ($intfs as $interfaceKey => $itf) {
if (array_key_exists($itf['if'], $interfaces) && array_key_exists($itf['if'], $prev)) {
foreach ($keys as $key) {
$tmp[$itf['if']][$key] -= $prev[$itf['if']][$key];
}
}
}
$result = map_ifs($intfs, $tmp);
$prev = $interfaces;
echo 'event: message' . PHP_EOL;
echo 'data: ' . json_encode($result) . PHP_EOL . PHP_EOL;
flush();
sleep($argv[1] <= 1 ? 1 : $argv[1]);
}
} else {
$result = array("interfaces" => array());
$interfaces = legacy_interface_stats();
$temp = gettimeofday();
$result['time'] = (double)$temp["sec"] + (double)$temp["usec"] / 1000000.0;
// collect user friendly interface names
foreach (legacy_config_get_interfaces(array("virtual" => false)) as $interfaceKey => $itf) {
if (array_key_exists($itf['if'], $interfaces)) {
$result['interfaces'][$interfaceKey] = $interfaces[$itf['if']];
$result['interfaces'][$interfaceKey]['name'] = !empty($itf['descr']) ? $itf['descr'] : $interfaceKey;
}
}
echo json_encode($result);
}