#!/bin/sh
# -*- sh -*-

: <<=cut

=head1 NAME

ipset - Graph number of members of netfilter ipsets

=head1 APPLICABLE SYSTEMS

Any system with a compatible ipset command.

=head1 CONFIGURATION

Ipset has to be run as root:

  [ipset]
  user root

=head1 INTERPRETATION

This plugin draws number of members for each ipset present in the kernel

=head1 MAGIC MARKERS

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

=head1 VERSION
  0.1 first release
  0.2 added docs, munin best practices

=head1 BUGS

None known

=head1 AUTHOR

Originally: Tomas Mudrunka 2016-2018 ( github.com/harvie )

=head1 LICENSE

GPLv2

=cut

set -eu


get_ipset_list() {
	ipset list -n
}


if [ "${1:-}" = "autoconf" ]; then
	if [ -e /sbin/ipset ] || [ -n "$(which ipset)" ]; then
		echo 'yes'
	else
		echo 'no (ipset binary not present)'
	fi
	exit 0
fi

if [ "${1:-}" = "config" ]; then
	echo graph_title Netfilter IPSets
	echo graph_category network
	echo graph_vlabel Members
	echo graph_args --base 1000 --logarithmic --units=si
	get_ipset_list | while read -r list; do
		echo "$list.label $list"
		echo "$list.min 0"
	done
	[ "${MUNIN_CAP_DIRTYCONFIG:-0}" = 1 ] || exit 0
fi

get_ipset_list | while read -r list; do
	echo "$list.value $(( $(ipset list "$list" | wc -l) - 7 ))"
done
exit 0
