From 712201e6912b92a8190ee355a722a8f5a360ad16 Mon Sep 17 00:00:00 2001 From: Slashdoom <5092581+slashdoom@users.noreply.github.com> Date: Wed, 13 Dec 2017 16:13:24 +1300 Subject: [PATCH] feature: FreeRADIUS application monitoring (#7818) * Update unbound.inc.php * Update unbound.inc.php * Create unbound_cache.inc.php * Update AUTHORS.md * Update apps.inc.php * Update bind.inc.php * Update bind.inc.php * Update bind.inc.php * Update bind.inc.php * Update tiles.php * Update Applications.md * Update Applications.md * Update Applications.md * Update Applications.md * Update Applications.md * Update Applications.md * Update apps.inc.php * Create freeradius_access.inc.php * Update functions.inc.php * Create freeradius_auth.inc.php * Create freeradius_accounting.inc.php * Create freeradius_proxy_access.inc.php * Create freeradius_proxy_auth.inc.php * Create freeradius_proxy_acct.inc.php * Create freeradius_queue.inc.php * Update and rename freeradius_accounting.inc.php to freeradius_acct.inc.php * Update apps.inc.php * Create freeradius.inc.php * Create freeradius.inc.php * Update freeradius.inc.php * Update freeradius.inc.php * Update freeradius.inc.php * Update freeradius.inc.php * Update freeradius.inc.php * Update Applications.md * Update Applications.md * Update freeradius_access.inc.php * Update freeradius_acct.inc.php * Update freeradius_access.inc.php * Update freeradius_auth.inc.php * Update freeradius_access.inc.php * Update freeradius_acct.inc.php * Update freeradius_proxy_access.inc.php * Update freeradius_proxy_acct.inc.php * Update freeradius_proxy_auth.inc.php * Update freeradius_queue.inc.php * Update freeradius_queue.inc.php * Update freeradius.inc.php * Update freeradius.inc.php * Update freeradius.inc.php * Update freeradius_acct.inc.php * Update freeradius_acct.inc.php * Update freeradius_access.inc.php * Update freeradius_access.inc.php * Update freeradius_auth.inc.php * Update freeradius_proxy_access.inc.php * Update freeradius_proxy_acct.inc.php * Update freeradius_proxy_auth.inc.php * Update freeradius_queue.inc.php --- doc/Extensions/Applications.md | 76 ++++++-- html/includes/functions.inc.php | 3 + .../application/freeradius_access.inc.php | 26 +++ .../application/freeradius_acct.inc.php | 29 +++ .../application/freeradius_auth.inc.php | 28 +++ .../freeradius_proxy_access.inc.php | 26 +++ .../application/freeradius_proxy_acct.inc.php | 29 +++ .../application/freeradius_proxy_auth.inc.php | 28 +++ .../application/freeradius_queue.inc.php | 29 +++ html/pages/apps.inc.php | 10 ++ html/pages/device/apps/freeradius.inc.php | 29 +++ .../polling/applications/freeradius.inc.php | 166 ++++++++++++++++++ 12 files changed, 466 insertions(+), 13 deletions(-) create mode 100644 html/includes/graphs/application/freeradius_access.inc.php create mode 100644 html/includes/graphs/application/freeradius_acct.inc.php create mode 100644 html/includes/graphs/application/freeradius_auth.inc.php create mode 100644 html/includes/graphs/application/freeradius_proxy_access.inc.php create mode 100644 html/includes/graphs/application/freeradius_proxy_acct.inc.php create mode 100644 html/includes/graphs/application/freeradius_proxy_auth.inc.php create mode 100644 html/includes/graphs/application/freeradius_queue.inc.php create mode 100644 html/pages/device/apps/freeradius.inc.php create mode 100644 includes/polling/applications/freeradius.inc.php diff --git a/doc/Extensions/Applications.md b/doc/Extensions/Applications.md index c5977681e484..8ba623002897 100644 --- a/doc/Extensions/Applications.md +++ b/doc/Extensions/Applications.md @@ -13,6 +13,7 @@ Different applications support a variety of ways to collect data: by direct conn 1. [Fail2ban](#fail2ban) - SNMP extend 1. [FreeBSD NFS Client](#freebsd-nfs-client) - SNMP extend 1. [FreeBSD NFS Server](#freebsd-nfs-server) - SNMP extend +1. [FreeRADIUS](#freeradius) - SNMP extend, Agent 1. [Freeswitch](#freeswitch) - SNMP extend, Agent 1. [GPSD](#gpsd) - Agent 1. [Mailscanner](#mailscanner) - SNMP extend @@ -258,32 +259,53 @@ extend fbsdnfsserver /etc/snmp/fbsdnfsserver 4: Restart snmpd on your host -### Mailscanner -##### SNMP Extend -1. Download the script onto the desired host (the host must be added to LibreNMS devices) +### FreeRADIUS +The FreeRADIUS application extension requires that status_server be enabled in your FreeRADIUS config. For more information see: https://wiki.freeradius.org/config/Status + +You should note that status requests increment the FreeRADIUS request stats. So LibreNMS polls will ultimately be reflected in your stats/charts. + +1: Go to your FreeRADIUS configuration directory (usually /etc/raddb or /etc/freeradius). + +2: `cd sites-enabled` + +3: `ln -s ../sites-available/status status` + +4: Restart FreeRADIUS. + +5: You should be able to test with the radclient as follows... ``` -wget https://raw.githubusercontent.com/librenms/librenms-agent/master/snmp/mailscanner.php -O /etc/snmp/mailscanner.php +echo "Message-Authenticator = 0x00, FreeRADIUS-Statistics-Type = 31, Response-Packet-Type = Access-Accept" | \ +radclient -x localhost:18121 status adminsecret ``` +Note that adminsecret is the default secret key in status_server. Change if you've modified this. -2. Make the script executable (chmod +x /etc/snmp/mailscanner.php) +##### SNMP Extend -3. Edit your snmpd.conf file (usually /etc/snmp/snmpd.conf) and add: +1: Copy the freeradius shell script, to the desired host (the host must be added to LibreNMS devices) ``` -extend mailscanner /etc/snmp/mailscanner.php +wget https://raw.githubusercontent.com/librenms/librenms-agent/master/snmp/freeradius.sh -O /etc/snmp/freeradius.sh ``` -4. Restart snmpd on your host +2: Make the script executable (chmod +x /etc/snmp/freeradius.sh) +3: If you've made any changes to the FreeRADIUS status_server config (secret key, port, etc.) edit freeradius.sh and adjust the config variable accordingly. -### GPSD -A small shell script that reports GPSD status. +4: Edit your snmpd.conf file and add: +``` +extend freeradius /etc/snmp/freeradius.sh +``` + +5: Restart snmpd on the host in question. ##### Agent -[Install the agent](Agent-Setup.md) on this device if it isn't already and copy the `gpsd` script to `/usr/lib/check_mk_agent/local/` -You may need to configure `$server` or `$port`. +1: [Install the agent](Agent-Setup.md) on this device if it isn't already and copy the script to `/usr/lib/check_mk_agent/local/freeradius.sh` via `wget https://raw.githubusercontent.com/librenms/librenms-agent/master/snmp/freeradius.sh -O /usr/lib/check_mk_agent/local/freeradius.sh` -Verify it is working by running `/usr/lib/check_mk_agent/local/gpsd` +2: Run `chmod +x /usr/lib/check_mk_agent/local/freeradius.sh` + +3: If you've made any changes to the FreeRADIUS status_server config (secret key, port, etc.) edit freeradius.sh and adjust the config variable accordingly. + +4: Edit the freeradius.sh script and set the variable 'AGENT' to '1' in the config. ### Freeswitch @@ -315,6 +337,34 @@ extend freeswitch /etc/snmp/freeswitch 6. Restart snmpd on your host +### GPSD +A small shell script that reports GPSD status. + +##### Agent +[Install the agent](Agent-Setup.md) on this device if it isn't already and copy the `gpsd` script to `/usr/lib/check_mk_agent/local/` + +You may need to configure `$server` or `$port`. + +Verify it is working by running `/usr/lib/check_mk_agent/local/gpsd` + + +### Mailscanner +##### SNMP Extend +1. Download the script onto the desired host (the host must be added to LibreNMS devices) +``` +wget https://raw.githubusercontent.com/librenms/librenms-agent/master/snmp/mailscanner.php -O /etc/snmp/mailscanner.php +``` + +2. Make the script executable (chmod +x /etc/snmp/mailscanner.php) + +3. Edit your snmpd.conf file (usually /etc/snmp/snmpd.conf) and add: +``` +extend mailscanner /etc/snmp/mailscanner.php +``` + +4. Restart snmpd on your host + + ### Memcached ##### SNMP Extend 1. Copy the [memcached script](https://github.com/librenms/librenms-agent/blob/master/agent-local/memcached) to `/etc/snmp/` on your remote server. diff --git a/html/includes/functions.inc.php b/html/includes/functions.inc.php index 2f3b21b2dd68..c2149df28d4e 100644 --- a/html/includes/functions.inc.php +++ b/html/includes/functions.inc.php @@ -125,6 +125,9 @@ function nicecase($item) case 'pi-hole': return 'Pi-hole'; + + case 'freeradius': + return 'FreeRADIUS'; default: return ucfirst($item); diff --git a/html/includes/graphs/application/freeradius_access.inc.php b/html/includes/graphs/application/freeradius_access.inc.php new file mode 100644 index 000000000000..95497925e68e --- /dev/null +++ b/html/includes/graphs/application/freeradius_access.inc.php @@ -0,0 +1,26 @@ + 'Requests', + 'accepts' => 'Accepts', + 'rejects'=> 'Rejects', + 'challenges' => 'Challenges' +); +$colours = 'mixed'; +$rrd_list = array(); +if (rrdtool_check_rrd_exists($rrd_filename)) { + foreach ($fr_access_array as $ds => $descr) { + $rrd_list[$i]['filename'] = $rrd_filename; + $rrd_list[$i]['descr'] = $descr; + $rrd_list[$i]['ds'] = $ds; + $i++; + } +} else { + echo "file missing: $rrd_filename"; +} +require 'includes/graphs/generic_multi_line.inc.php'; diff --git a/html/includes/graphs/application/freeradius_acct.inc.php b/html/includes/graphs/application/freeradius_acct.inc.php new file mode 100644 index 000000000000..95758f0239c8 --- /dev/null +++ b/html/includes/graphs/application/freeradius_acct.inc.php @@ -0,0 +1,29 @@ + 'Requests', + 'responses' => 'Responses', + 'duplicate_requests' => 'Duplicate Requests', + 'malformed_requests' => 'Malformed Requests', + 'invalid_requests' => 'Invalid Requests', + 'dropped_requests' => 'Dropped Requests', + 'unknown_types' => 'Unknown Types' +); +$colours = 'mixed'; +$rrd_list = array(); +if (rrdtool_check_rrd_exists($rrd_filename)) { + foreach ($fr_acct_array as $ds => $descr) { + $rrd_list[$i]['filename'] = $rrd_filename; + $rrd_list[$i]['descr'] = $descr; + $rrd_list[$i]['ds'] = $ds; + $i++; + } +} else { + echo "file missing: $rrd_filename"; +} +require 'includes/graphs/generic_multi_line.inc.php'; diff --git a/html/includes/graphs/application/freeradius_auth.inc.php b/html/includes/graphs/application/freeradius_auth.inc.php new file mode 100644 index 000000000000..02b5abb985ee --- /dev/null +++ b/html/includes/graphs/application/freeradius_auth.inc.php @@ -0,0 +1,28 @@ + 'Responses', + 'duplicate_requests' => 'Duplicate Requests', + 'malformed_requests' => 'Malformed Requests', + 'invalid_requests' => 'Invalid Requests', + 'dropped_requests' => 'Dropped Requests', + 'unknown_types' => 'Unknown Types' +); +$colours = 'mixed'; +$rrd_list = array(); +if (rrdtool_check_rrd_exists($rrd_filename)) { + foreach ($fr_auth_array as $ds => $descr) { + $rrd_list[$i]['filename'] = $rrd_filename; + $rrd_list[$i]['descr'] = $descr; + $rrd_list[$i]['ds'] = $ds; + $i++; + } +} else { + echo "file missing: $rrd_filename"; +} +require 'includes/graphs/generic_multi_line.inc.php'; diff --git a/html/includes/graphs/application/freeradius_proxy_access.inc.php b/html/includes/graphs/application/freeradius_proxy_access.inc.php new file mode 100644 index 000000000000..03f541f08938 --- /dev/null +++ b/html/includes/graphs/application/freeradius_proxy_access.inc.php @@ -0,0 +1,26 @@ + 'Requests', + 'accepts' => 'Accepts', + 'rejects'=> 'Rejects', + 'challenges' => 'Challenges' +); +$colours = 'mixed'; +$rrd_list = array(); +if (rrdtool_check_rrd_exists($rrd_filename)) { + foreach ($fr_proxy_access_array as $ds => $descr) { + $rrd_list[$i]['filename'] = $rrd_filename; + $rrd_list[$i]['descr'] = $descr; + $rrd_list[$i]['ds'] = $ds; + $i++; + } +} else { + echo "file missing: $rrd_filename"; +} +require 'includes/graphs/generic_multi_line.inc.php'; diff --git a/html/includes/graphs/application/freeradius_proxy_acct.inc.php b/html/includes/graphs/application/freeradius_proxy_acct.inc.php new file mode 100644 index 000000000000..b93a68db895f --- /dev/null +++ b/html/includes/graphs/application/freeradius_proxy_acct.inc.php @@ -0,0 +1,29 @@ + 'Requests', + 'responses' => 'Responses', + 'duplicate_requests' => 'Duplicate Requests', + 'malformed_requests' => 'Malformed Requests', + 'invalid_requests' => 'Invalid Requests', + 'dropped_requests' => 'Dropped Requests', + 'unknown_types' => 'Unknown Types' +); +$colours = 'mixed'; +$rrd_list = array(); +if (rrdtool_check_rrd_exists($rrd_filename)) { + foreach ($fr_proxy_acct_array as $ds => $descr) { + $rrd_list[$i]['filename'] = $rrd_filename; + $rrd_list[$i]['descr'] = $descr; + $rrd_list[$i]['ds'] = $ds; + $i++; + } +} else { + echo "file missing: $rrd_filename"; +} +require 'includes/graphs/generic_multi_line.inc.php'; diff --git a/html/includes/graphs/application/freeradius_proxy_auth.inc.php b/html/includes/graphs/application/freeradius_proxy_auth.inc.php new file mode 100644 index 000000000000..51907a970685 --- /dev/null +++ b/html/includes/graphs/application/freeradius_proxy_auth.inc.php @@ -0,0 +1,28 @@ + 'Responses', + 'duplicate_requests' => 'Duplicate Requests', + 'malformed_requests' => 'Malformed Requests', + 'invalid_requests' => 'Invalid Requests', + 'dropped_requests' => 'Dropped Requests', + 'unknown_types' => 'Unknown Types' +); +$colours = 'mixed'; +$rrd_list = array(); +if (rrdtool_check_rrd_exists($rrd_filename)) { + foreach ($fr_proxy_auth_array as $ds => $descr) { + $rrd_list[$i]['filename'] = $rrd_filename; + $rrd_list[$i]['descr'] = $descr; + $rrd_list[$i]['ds'] = $ds; + $i++; + } +} else { + echo "file missing: $rrd_filename"; +} +require 'includes/graphs/generic_multi_line.inc.php'; diff --git a/html/includes/graphs/application/freeradius_queue.inc.php b/html/includes/graphs/application/freeradius_queue.inc.php new file mode 100644 index 000000000000..9c13327332ec --- /dev/null +++ b/html/includes/graphs/application/freeradius_queue.inc.php @@ -0,0 +1,29 @@ + 'Len Internal', + 'len_proxy' => 'Len Proxy', + 'len_auth' => 'Len Auth', + 'len_acct' => 'Len Acct', + 'len_detail' => 'Len Detail', + 'pps_in' => 'PPS In', + 'pps_out' => 'PPS Out' +); +$colours = 'mixed'; +$rrd_list = array(); +if (rrdtool_check_rrd_exists($rrd_filename)) { + foreach ($fr_queue_array as $ds => $descr) { + $rrd_list[$i]['filename'] = $rrd_filename; + $rrd_list[$i]['descr'] = $descr; + $rrd_list[$i]['ds'] = $ds; + $i++; + } +} else { + echo "file missing: $rrd_filename"; +} +require 'includes/graphs/generic_multi_line.inc.php'; diff --git a/html/pages/apps.inc.php b/html/pages/apps.inc.php index ceb287b7fc14..177c54c5721a 100755 --- a/html/pages/apps.inc.php +++ b/html/pages/apps.inc.php @@ -273,6 +273,16 @@ 'blocklist', ); +$graphs['freeradius'] = array( + 'access', + 'auth', + 'acct', + 'proxy_access', + 'proxy_auth', + 'proxy_acct', + 'queue', +); + print_optionbar_start(); echo "Apps » "; diff --git a/html/pages/device/apps/freeradius.inc.php b/html/pages/device/apps/freeradius.inc.php new file mode 100644 index 000000000000..29c15d06c3f3 --- /dev/null +++ b/html/pages/device/apps/freeradius.inc.php @@ -0,0 +1,29 @@ + 'FreeRADIUS - Access', + 'freeradius_auth' => 'FreeRADIUS - Auth', + 'freeradius_acct' => 'FreeRADIUS - Acct', + 'freeradius_proxy_access' => 'FreeRADIUS - Proxy Access', + 'freeradius_proxy_auth' => 'FreeRADIUS - Proxy Auth', + 'freeradius_proxy_acct' => 'FreeRADIUS - Proxy Acct', + 'freeradius_queue' => 'FreeRADIUS - Queue' + ); +foreach ($graphs as $key => $text) { + $graph_type = $key; + $graph_array['height'] = '100'; + $graph_array['width'] = '215'; + $graph_array['to'] = $config['time']['now']; + $graph_array['id'] = $app['app_id']; + $graph_array['type'] = 'application_'.$key; + echo '
+
+

'.$text.'

+
+
+
'; + include 'includes/print-graphrow.inc.php'; + echo '
'; + echo '
'; + echo '
'; +} diff --git a/includes/polling/applications/freeradius.inc.php b/includes/polling/applications/freeradius.inc.php new file mode 100644 index 000000000000..cb73ba6bfa2d --- /dev/null +++ b/includes/polling/applications/freeradius.inc.php @@ -0,0 +1,166 @@ +addDataset('requests', 'DERIVE', 0, 125000000000) + ->addDataset('accepts', 'DERIVE', 0, 125000000000) + ->addDataset('rejects', 'DERIVE', 0, 125000000000) + ->addDataset('challenges', 'DERIVE', 0, 125000000000); +$fields = array ( + 'requests' => $freeradius['FreeRADIUS-Total-Access-Requests'], + 'accepts' => $freeradius['FreeRADIUS-Total-Access-Accepts'], + 'rejects' => $freeradius['FreeRADIUS-Total-Access-Rejects'], + 'challenges' => $freeradius['FreeRADIUS-Total-Access-Challenges'] + ); +$tags = compact('name', 'app_id', 'rrd_name', 'rrd_def'); +data_update($device, 'app', $tags, $fields); + +#FreeRADIUS-Total-Auth +$rrd_name = array('app', $name,'auth',$app_id); +$rrd_def = RrdDefinition::make() + ->addDataset('responses', 'DERIVE', 0, 125000000000) + ->addDataset('duplicate_requests', 'DERIVE', 0, 125000000000) + ->addDataset('malformed_requests', 'DERIVE', 0, 125000000000) + ->addDataset('invalid_requests', 'DERIVE', 0, 125000000000) + ->addDataset('dropped_requests', 'DERIVE', 0, 125000000000) + ->addDataset('unknown_types', 'DERIVE', 0, 125000000000); +$fields = array ( + 'responses' => $freeradius['FreeRADIUS-Total-Auth-Responses'], + 'duplicate_requests' => $freeradius['FreeRADIUS-Total-Auth-Duplicate-Requests'], + 'malformed_requests' => $freeradius['FreeRADIUS-Total-Auth-Malformed-Requests'], + 'invalid_requests' => $freeradius['FreeRADIUS-Total-Auth-Invalid-Requests'], + 'dropped_requests' => $freeradius['FreeRADIUS-Total-Auth-Dropped-Requests'], + 'unknown_types' => $freeradius['FreeRADIUS-Total-Auth-Unknown-Types'] + ); +$tags = compact('name', 'app_id', 'rrd_name', 'rrd_def'); +data_update($device, 'app', $tags, $fields); + +#FreeRADIUS-Total-Acct +$rrd_name = array('app', $name,'acct',$app_id); +$rrd_def = RrdDefinition::make() + ->addDataset('requests', 'DERIVE', 0, 125000000000) + ->addDataset('responses', 'DERIVE', 0, 125000000000) + ->addDataset('duplicate_requests', 'DERIVE', 0, 125000000000) + ->addDataset('malformed_requests', 'DERIVE', 0, 125000000000) + ->addDataset('invalid_requests', 'DERIVE', 0, 125000000000) + ->addDataset('dropped_requests', 'DERIVE', 0, 125000000000) + ->addDataset('unknown_types', 'DERIVE', 0, 125000000000); +$fields = array ( + 'requests' => $freeradius['FreeRADIUS-Total-Accounting-Requests'], + 'responses' => $freeradius['FreeRADIUS-Total-Accounting-Responses'], + 'duplicate_requests' => $freeradius['FreeRADIUS-Total-Acct-Duplicate-Requests'], + 'malformed_requests' => $freeradius['FreeRADIUS-Total-Acct-Malformed-Requests'], + 'invalid_requests' => $freeradius['FreeRADIUS-Total-Acct-Invalid-Requests'], + 'dropped_requests' => $freeradius['FreeRADIUS-Total-Acct-Dropped-Requests'], + 'unknown_types' => $freeradius['FreeRADIUS-Total-Acct-Unknown-Types'] + ); +$tags = compact('name', 'app_id', 'rrd_name', 'rrd_def'); +data_update($device, 'app', $tags, $fields); + +#FreeRADIUS-Total-Proxy-Access +$rrd_name = array('app', $name,'proxy_access',$app_id); +$rrd_def = RrdDefinition::make() + ->addDataset('requests', 'DERIVE', 0, 125000000000) + ->addDataset('accepts', 'DERIVE', 0, 125000000000) + ->addDataset('rejects', 'DERIVE', 0, 125000000000) + ->addDataset('challenges', 'DERIVE', 0, 125000000000); +$fields = array ( + 'requests' => $freeradius['FreeRADIUS-Total-Proxy-Access-Requests'], + 'accepts' => $freeradius['FreeRADIUS-Total-Proxy-Access-Accepts'], + 'rejects' => $freeradius['FreeRADIUS-Total-Proxy-Access-Rejects'], + 'challenges' => $freeradius['FreeRADIUS-Total-Proxy-Access-Challenges'] + ); +$tags = compact('name', 'app_id', 'rrd_name', 'rrd_def'); +data_update($device, 'app', $tags, $fields); + +#FreeRADIUS-Total-Proxy-Auth +$rrd_name = array('app', $name,'proxy_auth',$app_id); +$rrd_def = RrdDefinition::make() + ->addDataset('responses', 'DERIVE', 0, 125000000000) + ->addDataset('duplicate_requests', 'DERIVE', 0, 125000000000) + ->addDataset('malformed_requests', 'DERIVE', 0, 125000000000) + ->addDataset('invalid_requests', 'DERIVE', 0, 125000000000) + ->addDataset('dropped_requests', 'DERIVE', 0, 125000000000) + ->addDataset('unknown_types', 'DERIVE', 0, 125000000000); +$fields = array ( + 'responses' => $freeradius['FreeRADIUS-Total-Proxy-Auth-Responses'], + 'duplicate_requests' => $freeradius['FreeRADIUS-Total-Proxy-Auth-Duplicate-Requests'], + 'malformed_requests' => $freeradius['FreeRADIUS-Total-Proxy-Auth-Malformed-Requests'], + 'invalid_requests' => $freeradius['FreeRADIUS-Total-Proxy-Auth-Invalid-Requests'], + 'dropped_requests' => $freeradius['FreeRADIUS-Total-Proxy-Auth-Dropped-Requests'], + 'unknown_types' => $freeradius['FreeRADIUS-Total-Proxy-Auth-Unknown-Types'] + ); +$tags = compact('name', 'app_id', 'rrd_name', 'rrd_def'); +data_update($device, 'app', $tags, $fields); + +#FreeRADIUS-Total-Proxy-Acct +$rrd_name = array('app', $name,'proxy_acct',$app_id); +$rrd_def = RrdDefinition::make() + ->addDataset('requests', 'DERIVE', 0, 125000000000) + ->addDataset('responses', 'DERIVE', 0, 125000000000) + ->addDataset('duplicate_requests', 'DERIVE', 0, 125000000000) + ->addDataset('malformed_requests', 'DERIVE', 0, 125000000000) + ->addDataset('invalid_requests', 'DERIVE', 0, 125000000000) + ->addDataset('dropped_requests', 'DERIVE', 0, 125000000000) + ->addDataset('unknown_types', 'DERIVE', 0, 125000000000); +$fields = array ( + 'requests' => $freeradius['FreeRADIUS-Total-Proxy-Accounting-Requests'], + 'responses' => $freeradius['FreeRADIUS-Total-Proxy-Accounting-Responses'], + 'duplicate_requests' => $freeradius['FreeRADIUS-Total-Proxy-Acct-Duplicate-Requests'], + 'malformed_requests' => $freeradius['FreeRADIUS-Total-Proxy-Acct-Malformed-Requests'], + 'invalid_requests' => $freeradius['FreeRADIUS-Total-Proxy-Acct-Invalid-Requests'], + 'dropped_requests' => $freeradius['FreeRADIUS-Total-Proxy-Acct-Dropped-Requests'], + 'unknown_types' => $freeradius['FreeRADIUS-Total-Proxy-Acct-Unknown-Types'] + ); +$tags = compact('name', 'app_id', 'rrd_name', 'rrd_def'); +data_update($device, 'app', $tags, $fields); + +#FreeRADIUS-Queue +$rrd_name = array('app', $name,'queue',$app_id); +$rrd_def = RrdDefinition::make() + ->addDataset('len_internal', 'DERIVE', 0, 125000000000) + ->addDataset('len_proxy', 'DERIVE', 0, 125000000000) + ->addDataset('len_auth', 'DERIVE', 0, 125000000000) + ->addDataset('len_acct', 'DERIVE', 0, 125000000000) + ->addDataset('len_detail', 'DERIVE', 0, 125000000000) + ->addDataset('pps_in', 'DERIVE', 0, 125000000000) + ->addDataset('pps_out', 'DERIVE', 0, 125000000000); +$fields = array ( + 'len_internal' => $freeradius['FreeRADIUS-Queue-Len-Internal'], + 'len_proxy' => $freeradius['FreeRADIUS-Queue-Len-Proxy'], + 'len_auth' => $freeradius['FreeRADIUS-Queue-Len-Auth'], + 'len_acct' => $freeradius['FreeRADIUS-Queue-Len-Acct'], + 'len_detail' => $freeradius['FreeRADIUS-Queue-Len-Detail'], + 'pps_in' => $freeradius['FreeRADIUS-Queue-PPS-In'], + 'pps_out' => $freeradius['FreeRADIUS-Queue-PPS-Out'] + ); +$tags = compact('name', 'app_id', 'rrd_name', 'rrd_def'); +data_update($device, 'app', $tags, $fields); + +unset($lines, $freeradius, $rrd_name, $rrd_def, $fields, $tags);