#!/bin/sh

: << =cut

=head1 NAME

nsd - Plugin to monitor nsd DNS server

=head1 CONFIGURATION

No configuration

=head1 AUTHOR

Kim Heino <b@bbbs.net>

=head1 LICENSE

GPLv2

=head1 MAGIC MARKERS

 #%# family=auto
 #%# capabilities=autoconf

=cut

if [ "$1" = "autoconf" ]; then
    if [ -x /usr/sbin/nsd-control ]; then
        echo "yes"
        exit 0
    else
        echo "no (no /usr/sbin/nsd-control)"
        exit 0
    fi
fi

if [ "$1" = "config" ]; then
    echo 'graph_title NSD queries'
    echo 'graph_vlabel queries / second'
    echo 'graph_category dns'
    echo 'graph_info Queries per second, by query type'
    echo 'a.label A'
    echo 'a.type DERIVE'
    echo 'a.min 0'
    echo 'aaaa.label AAAA'
    echo 'aaaa.type DERIVE'
    echo 'aaaa.min 0'
    echo 'ptr.label PTR'
    echo 'ptr.type DERIVE'
    echo 'ptr.min 0'
    echo 'cname.label CNAME'
    echo 'cname.type DERIVE'
    echo 'cname.min 0'
    echo 'mx.label MX'
    echo 'mx.type DERIVE'
    echo 'mx.min 0'
    echo 'txt.label TXT'
    echo 'txt.type DERIVE'
    echo 'txt.min 0'
    echo 'soa.label SOA'
    echo 'soa.type DERIVE'
    echo 'soa.min 0'
    echo 'ns.label NS'
    echo 'ns.type DERIVE'
    echo 'ns.min 0'
    echo 'srv.label SRV'
    echo 'srv.type DERIVE'
    echo 'srv.min 0'
    echo 'dnskey.label DNSKEY'
    echo 'dnskey.type DERIVE'
    echo 'dnskey.min 0'
    echo 'axfr.label AXFR'
    echo 'axfr.type DERIVE'
    echo 'axfr.min 0'
    echo 'snxd.label NXDOMAIN'
    echo 'snxd.type DERIVE'
    echo 'snxd.min 0'
    echo 'rq.label Total Successful'
    echo 'rq.type DERIVE'
    echo 'rq.min 0'
    exit 0
fi

/usr/sbin/nsd-control stats_noreset | sed 's/=/ /; s/\.//g' | (
    numtypeA=0
    numtypeAAAA=0
    numtypePTR=0
    numtypeCNAME=0
    numtypeMX=0
    numtypeTXT=0
    numtypeSOA=0
    numtypeNS=0
    numtypeSRV=0
    numtypeDNSKEY=0
    numraxfr=0
    numrcodeNXDOMAIN=0
    numqueries=0
    while read -r key value rest; do
	[ "${key}" = "numtypeA" ] && numtypeA=${value}
	[ "${key}" = "numtypeAAAA" ] && numtypeAAAA=${value}
	[ "${key}" = "numtypePTR" ] && numtypePTR=${value}
	[ "${key}" = "numtypeCNAME" ] && numtypeCNAME=${value}
	[ "${key}" = "numtypeMX" ] && numtypeMX=${value}
	[ "${key}" = "numtypeTXT" ] && numtypeTXT=${value}
	[ "${key}" = "numtypeSOA" ] && numtypeSOA=${value}
	[ "${key}" = "numtypeNS" ] && numtypeNS=${value}
	[ "${key}" = "numtypeSRV" ] && numtypeSRV=${value}
	[ "${key}" = "numtypeDNSKEY" ] && numtypeDNSKEY=${value}
	[ "${key}" = "numraxfr" ] && numraxfr=${value}
	[ "${key}" = "numrcodeNXDOMAIN" ] && numrcodeNXDOMAIN=${value}
	[ "${key}" = "numqueries" ] && numqueries=${value}
    done
    echo "a.value ${numtypeA}"
    echo "aaaa.value ${numtypeAAAA}"
    echo "ptr.value ${numtypePTR}"
    echo "cname.value ${numtypeCNAME}"
    echo "mx.value ${numtypeMX}"
    echo "txt.value ${numtypeTXT}"
    echo "soa.value ${numtypeSOA}"
    echo "ns.value ${numtypeNS}"
    echo "srv.value ${numtypeSRV}"
    echo "dnskey.value ${numtypeDNSKEY}"
    echo "axfr.value ${numraxfr}"
    echo "snxd.value ${numrcodeNXDOMAIN}"
    echo "rq.value ${numqueries}"
)
