From 31ad4788f4ad14d45aceccbb59152f58dfd1f7db Mon Sep 17 00:00:00 2001 From: Arran Cudbard-Bell Date: Wed, 4 Feb 2015 14:12:16 +0700 Subject: [PATCH] Add freeradius packet queue plugin --- plugins/node.d/freeradius_queue.in | 103 +++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 plugins/node.d/freeradius_queue.in diff --git a/plugins/node.d/freeradius_queue.in b/plugins/node.d/freeradius_queue.in new file mode 100644 index 00000000..9010e18d --- /dev/null +++ b/plugins/node.d/freeradius_queue.in @@ -0,0 +1,103 @@ +#!/bin/sh +: << =cut + +=head1 NAME + +freeradius_queue - Plugin to get number of waiting packets in FreeRADIUS queues + +=head1 APPLICABLE SYSTEMS + +FreeRADIUS 3.0.7 or later. + +=head1 CONFIGURATION + +This plugin uses the following configuration variables: + + [freeradius_queue] + env.radmin - Path to "radmin" executable. + env.socketfile - Path to administration socket. + +=head1 AUTHOR + +Copyright (C) 2015 Arran Cudbard-Bell + +=head1 LICENSE + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + +=head1 MAGIC MARKERS + + #%# family=auto + #%# capabilities=autoconf + +=cut + +RADMIN=${radmin:-`which radmin 2>/dev/null`} +RADMIN=${RADMIN:-/usr/sbin/radmin} +SOCKETFILE=${socketfile:-/var/run/radiusd/radiusd.sock} + +# +# Check we can execute radmin, and check that the stats queue +# command exists, and provides us with valid results. +# +# Note: Before 3.0.7 there was no separate communications channel +# for error codes or error messages, so radmin would always exit +# with 0, even on failure. +# +if [ "$1" = "autoconf" ]; then + if [ -x $RADMIN ] && $RADMIN -f $SOCKETFILE -e "stats queue" 2>/dev/null | grep 'queue_len' > /dev/null; then + echo yes + else + echo no + fi + exit 0 +fi + +if [ "$1" = "config" ]; then + echo 'graph_title FreeRADIUS queued packets' + echo 'graph_args --base 1000 -l 0 ' + echo 'graph_period second' + echo 'graph_vlabel requests / ${graph_period}' + echo 'graph_category Other' + + echo 'queue_len_internal.label Internal' + echo 'queue_len_internal.info number of requests waiting in the internal queue' + echo 'queue_len_internal.type DERIVE' + echo 'queue_len_internal.min 0' + + echo 'queue_len_proxy.label Proxy' + echo 'queue_len_proxy.info number of requests waiting in the proxy queue' + echo 'queue_len_proxy.type DERIVE' + echo 'queue_len_proxy.min 0' + + echo 'queue_len_auth.label Authentication' + echo 'queue_len_auth.info number of requests waiting in the authentication queue' + echo 'queue_len_auth.type DERIVE' + echo 'queue_len_auth.min 0' + + echo 'queue_len_acct.label Accounting' + echo 'queue_len_acct.info number of requests waiting in the accounting queue' + echo 'queue_len_acct.type DERIVE' + echo 'queue_len_acct.min 0' + + echo 'queue_len_detail.label Detail reader' + echo 'queue_len_detail.info number of requests waiting in the detail queue' + echo 'queue_len_detail.type DERIVE' + echo 'queue_len_detail.min 0' + + exit 0 +fi + +$RADMIN -f $SOCKETFILE -e "stats queue" | grep 'queue_len*' | awk '{print $1".value " $2}'