From 89cfc06d8eb5e0ee1060ba950e89ff66f745c81f Mon Sep 17 00:00:00 2001 From: Ad Schellevis Date: Fri, 21 Aug 2020 12:36:10 +0200 Subject: [PATCH] Lobby: Dashboard - gateway status widget, add gateway status endpoint (api/routes/gateway/status) and refactor widget to use it. closes https://github.com/opnsense/core/issues/4261 --- .../OPNsense/Routes/Api/GatewayController.php | 53 ++++++++ .../mvc/app/models/OPNsense/Core/ACL/ACL.xml | 8 ++ .../scripts/routes/gateway_status.php | 74 +++++++++++ .../conf/actions.d/actions_interface.conf | 5 + src/www/widgets/api/plugins/gateway.inc | 74 ----------- src/www/widgets/widgets/gateways.widget.php | 119 ++++++++++-------- 6 files changed, 205 insertions(+), 128 deletions(-) create mode 100644 src/opnsense/mvc/app/controllers/OPNsense/Routes/Api/GatewayController.php create mode 100755 src/opnsense/scripts/routes/gateway_status.php delete mode 100644 src/www/widgets/api/plugins/gateway.inc diff --git a/src/opnsense/mvc/app/controllers/OPNsense/Routes/Api/GatewayController.php b/src/opnsense/mvc/app/controllers/OPNsense/Routes/Api/GatewayController.php new file mode 100644 index 000000000..440611774 --- /dev/null +++ b/src/opnsense/mvc/app/controllers/OPNsense/Routes/Api/GatewayController.php @@ -0,0 +1,53 @@ + [], "status" => "failed"]; + $backend = new Backend(); + $gw_status = json_decode($backend->configdRun('interface gateways status'), true); + + if (!empty($gw_status)) { + $result['items'] = $gw_status; + $result['status'] = "ok"; + } + + return $result; + } +} diff --git a/src/opnsense/mvc/app/models/OPNsense/Core/ACL/ACL.xml b/src/opnsense/mvc/app/models/OPNsense/Core/ACL/ACL.xml index 312d1f3e3..155b0bfba 100644 --- a/src/opnsense/mvc/app/models/OPNsense/Core/ACL/ACL.xml +++ b/src/opnsense/mvc/app/models/OPNsense/Core/ACL/ACL.xml @@ -47,12 +47,20 @@ widgets/widgets/*.widget.php* widgets/api/get.php* api/diagnostics/dns/reverse_lookup* + api/routes/gateway/status* + api/diagnostics/interface/getInterfaceNames + api/diagnostics/firewall/log + api/monit/status/get/xml Dashboard (widgets only) widgets/widgets/*.widget.php* + api/routes/gateway/status* + api/diagnostics/interface/getInterfaceNames + api/diagnostics/firewall/log + api/monit/status/get/xml diff --git a/src/opnsense/scripts/routes/gateway_status.php b/src/opnsense/scripts/routes/gateway_status.php new file mode 100755 index 000000000..463156c80 --- /dev/null +++ b/src/opnsense/scripts/routes/gateway_status.php @@ -0,0 +1,74 @@ +#!/usr/local/bin/php +gatewaysIndexedByName() as $gname => $gw) { + $gatewayItem = array('name' => $gname); + $gatewayItem['address'] = !empty($gw['gateway']) ? $gw['gateway'] : "~"; + if (!empty($gateways_status[$gname])) { + $gatewayItem['status'] = strtolower($gateways_status[$gname]['status']); + $gatewayItem['loss'] = $gateways_status[$gname]['loss']; + $gatewayItem['delay'] = $gateways_status[$gname]['delay']; + $gatewayItem['stddev'] = $gateways_status[$gname]['stddev']; + switch ($gatewayItem['status']) { + case 'none': + $gatewayItem['status_translated'] = gettext('Online'); + break; + case 'force_down': + $gatewayItem['status_translated'] = gettext('Offline (forced)'); + break; + case 'down': + $gatewayItem['status_translated'] = gettext('Offline'); + break; + case 'delay': + $gatewayItem['status_translated'] = gettext('Latency'); + break; + case 'loss': + $gatewayItem['status_translated'] = gettext('Packetloss'); + break; + default: + $gatewayItem['status_translated'] = gettext('Pending'); + break; + } + } else { + $gatewayItem['status'] = 'none'; + $gatewayItem['status_translated'] = gettext('Online'); + $gatewayItem['loss'] = '~'; + $gatewayItem['stddev'] = '~'; + $gatewayItem['delay'] = '~'; + } + $result[] = $gatewayItem; +} +echo json_encode($result) . PHP_EOL; diff --git a/src/opnsense/service/conf/actions.d/actions_interface.conf b/src/opnsense/service/conf/actions.d/actions_interface.conf index b53d79d57..4b9158cff 100644 --- a/src/opnsense/service/conf/actions.d/actions_interface.conf +++ b/src/opnsense/service/conf/actions.d/actions_interface.conf @@ -93,6 +93,11 @@ command:/usr/local/opnsense/scripts/routes/gateways.php type:script_output message:list gateways +[gateways.status] +command:/usr/local/opnsense/scripts/routes/gateway_status.php +type:script_output +message:list gateway status + [vxlan.configure] command: /usr/local/sbin/pluginctl -c vxlan_prepare message: Reconfiguring vxlan diff --git a/src/www/widgets/api/plugins/gateway.inc b/src/www/widgets/api/plugins/gateway.inc deleted file mode 100644 index 2ce5f4adf..000000000 --- a/src/www/widgets/api/plugins/gateway.inc +++ /dev/null @@ -1,74 +0,0 @@ -gatewaysIndexedByName() as $gname => $gw) { - $gatewayItem = array('name' => $gname); - $gatewayItem['address'] = !empty($gw['gateway']) ? $gw['gateway'] : "~"; - if (!empty($gateways_status[$gname])) { - $gatewayItem['status'] = strtolower($gateways_status[$gname]['status']); - $gatewayItem['loss'] = $gateways_status[$gname]['loss']; - $gatewayItem['delay'] = $gateways_status[$gname]['delay']; - $gatewayItem['stddev'] = $gateways_status[$gname]['stddev']; - switch ($gatewayItem['status']) { - case 'none': - $gatewayItem['status_translated'] = gettext('Online'); - break; - case 'force_down': - $gatewayItem['status_translated'] = gettext('Offline (forced)'); - break; - case 'down': - $gatewayItem['status_translated'] = gettext('Offline'); - break; - case 'delay': - $gatewayItem['status_translated'] = gettext('Latency'); - break; - case 'loss': - $gatewayItem['status_translated'] = gettext('Packetloss'); - break; - default: - $gatewayItem['status_translated'] = gettext('Pending'); - break; - } - } else { - $gatewayItem['status'] = 'none'; - $gatewayItem['status_translated'] = gettext('Online'); - $gatewayItem['loss'] = '~'; - $gatewayItem['stddev'] = '~'; - $gatewayItem['delay'] = '~'; - } - $result[] = $gatewayItem; - } - return $result; -} diff --git a/src/www/widgets/widgets/gateways.widget.php b/src/www/widgets/widgets/gateways.widget.php index 62351465b..c0a599e0e 100644 --- a/src/www/widgets/widgets/gateways.widget.php +++ b/src/www/widgets/widgets/gateways.widget.php @@ -27,7 +27,6 @@ */ require_once("guiconfig.inc"); -require_once("widgets/include/gateways.inc"); if ($_SERVER['REQUEST_METHOD'] === 'GET') { $pconfig = array(); @@ -52,47 +51,73 @@ if ($_SERVER['REQUEST_METHOD'] === 'GET') { } $gateways = (new \OPNsense\Routing\Gateways(legacy_interfaces_details()))->gatewaysIndexedByName(); - ?> - +
@@ -125,20 +150,6 @@ $gateways = (new \OPNsense\Routing\Gateways(legacy_interfaces_details()))->gatew - - - - - - - - -

~
~~~