#!/bin/sh

set -e

: << =cut

=head1 NAME

threads - Plugin to monitor the number of threads on Linux

=head1 CONFIGURATION

No configuration

=head1 AUTHOR

Lars Strand

=head1 LICENSE

GNU GPL

=head1 MAGIC MARKERS

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

=cut

if [ "$1" = "autoconf" ]; then
    grep -q '^Threads' /proc/$$/status && echo "yes" || echo "no (/proc/$$/status not readable)"
    exit 0
fi

if [ "$1" = "config" ]; then
    echo 'graph_title Number of threads'
    #echo 'graph_args --base 1000 -l 0 '
    echo 'graph_vlabel number of threads'
    echo 'graph_category processes'
    echo 'graph_info This graph shows the number of threads.'
    echo 'threads.label threads'
    echo 'threads.info The current number of threads.'
    exit 0
fi

# Discard find's stderr, since SELinux or others may prevent us from parsing
# proc directories (e.g. "find: '/proc/fs/nfsd': Permission denied").
# grep's -s suppresses errors about files that vanished before they could be
# read.  It isn't entirely portable, but GNU grep should be a given on Linux.
# Sadly awk has no such equivalent option or we could skip grep altogether.
find /proc/ -mindepth 2 -maxdepth 2 -type f -name status -print0 2>/dev/null \
    | xargs -0 --no-run-if-empty --max-args=1000 grep -sh '^Threads:' \
    | awk 'BEGIN { sum = 0; }
           { sum += $2; }
           END { print "threads.value", sum; }'
