diff misc/dcc-stats-collect.in @ 0:c7f6b056b673

First import of vendor version
author Peter Gervai <grin@grin.hu>
date Tue, 10 Mar 2009 13:49:58 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/misc/dcc-stats-collect.in	Tue Mar 10 13:49:58 2009 +0100
@@ -0,0 +1,166 @@
+#! /bin/sh
+
+# collect spam statistics in .rrd files
+#   [-x]	    debugging
+#   [-q]	    quiet
+#   [-S]	    read `cdcc stats` from stdin
+#   [-h dcc_homedir]
+#   [-D data-dir]   where to put the graphs and rrdtool files
+#   [-s stats-file] save raw `cdcc stats` output in stats-file
+#   [-t time]	    seconds since the Epoch
+#   [-T @RRDTOOL@]
+#		    see http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/
+#			or the FreeBSD package.
+#   [-O rrdopts]    "--heartbeat X" or "--step Y"
+#   [-i client-ID]  that DCC servers will accept
+#   [-p password]   that DCC servers will accept
+#   host1, host2, ... servers to ask for data
+
+
+# Copyright (c) 2008 by Rhyolite Software, LLC
+#
+# This agreement is not applicable to any entity which sells anti-spam
+# solutions to others or provides an anti-spam solution as part of a
+# security solution sold to other entities, or to a private network
+# which employs the DCC or uses data provided by operation of the DCC
+# but does not provide corresponding data to other users.
+#
+# Permission to use, copy, modify, and distribute this software without
+# changes for any purpose with or without fee is hereby granted, provided
+# that the above copyright notice and this permission notice appear in all
+# copies and any distributed versions or copies are either unchanged
+# or not called anything similar to "DCC" or "Distributed Checksum
+# Clearinghouse".
+#
+# Parties not eligible to receive a license under this agreement can
+# obtain a commercial license to use DCC by contacting Rhyolite Software
+# at sales@rhyolite.com.
+#
+# A commercial license would be for Distributed Checksum and Reputation
+# Clearinghouse software.  That software includes additional features.  This
+# free license for Distributed ChecksumClearinghouse Software does not in any
+# way grant permision to use Distributed Checksum and Reputation Clearinghouse
+# software
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND RHYOLITE SOFTWARE, LLC DISCLAIMS ALL
+# WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL RHYOLITE SOFTWARE, LLC
+# BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES
+# OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+# ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+# SOFTWARE.
+#	Rhyolite Software DCC 1.3.103-1.27 $Revision$
+#	@configure_input@
+
+DCC_HOMEDIR=@prefix@
+DEBUG=
+# check the args once to get the home directory
+while getopts "xqUSh:D:s:t:T:O:i:p:" c; do
+    case $c in
+	x) set -x; DEBUG=-x;;
+	h) DCC_HOMEDIR="$OPTARG";;
+	*) ;;
+    esac
+done
+. $DCC_HOMEDIR/dcc_conf
+
+QUIET=
+UPDATERRD=
+GET_ARGS=
+DATADIR=$DCC_HOMEDIR/stats
+STATSFILE=/dev/null
+TS=N
+RRDTOOL=@RRDTOOL@
+RRDOPTS=
+CLNT_ID="1"
+PASSWD=""
+USAGE="`basename $0`: [-xqUS] [-h homedir] [-D data-dir] [-s stats-file] [-t time]
+    [-T rrdtool] [-O rrdopts] [-i client-ID] [-p password] host1 host2 ..."
+OPTIND=1
+while getopts "xqUSh:D:s:t:T:O:i:p:" c; do
+    case $c in
+	x) ;;
+	q) QUIET="-q";;
+	U) UPDATERRD=yes;;
+	S) GET_ARGS="$GET_ARGS -S";;
+	h) ;;
+	D) DATADIR="$OPTARG";;
+	s) STATSFILE="$OPTARG";;
+	t) TS="$OPTARG";;
+	T) RRDTOOL="$OPTARG";;
+	O) RRDOPTS="$RRDOPTS $OPTARG";;
+	i) CLNT_ID="$OPTARG";;
+	p) PASSWD="$OPTARG";;
+	*) echo "$USAGE" 1>&2; exit 1;;
+    esac
+done
+shift `expr $OPTIND - 1 || true`
+if test "$#" -eq 0; then
+    echo "$USAGE" 1>&2
+    exit 1
+fi
+
+cd $DATADIR
+
+# generate a timestamp that can be used with new and old `touch` commands 
+#   to give the .rrd and status files the right mtime
+TTS=
+if test -n "$TS" -a "$TS" != N; then
+    if TTS=`date -r $TS '+%m%d%H%S'  2>/dev/null`; then : ;
+    else
+	# deal with systems that do not have `date -r`
+	TTS=`@PERL@ -e "use POSIX qw(strftime);	       		\
+	    print strftime '%m%d%H%S', localtime($TS);"`
+    fi
+fi
+
+for HOST in $*; do
+    HOST="`basename $HOST .rrd`"
+
+    eval XSTATSFILE="$STATSFILE"
+    if test "$PASSWD" != ""; then
+	LINE=`$DCC_LIBEXEC/stats-get $GET_ARGS $DEBUG $QUIET		\
+	    -s$XSTATSFILE -i$CLNT_ID -p "$PASSWD" $HOST`
+    else
+	LINE=`$DCC_LIBEXEC/stats-get $GET_ARGS $DEBUG $QUIET		\
+	    -s$XSTATSFILE -i$CLNT_ID $HOST`
+    fi
+    if test -n "$TTS"; then
+	touch $TTS XSTATSFILE
+    fi
+
+    FILE="$HOST.rrd"
+    # update RRD file to include maximums
+    if test -s "$FILE" -a -n "$UPDATERRD"				\
+	&& test -z "`$RRDTOOL info $FILE 2>/dev/null			\
+			    | grep '^rra.*cf = .MAX.'`"; then
+	mv "$FILE" "$FILE.old"
+	# get all but the final "</rrd>" line of the xml
+	$RRDTOOL dump "$FILE.old" | sed -e '$d' >"$FILE.xml"
+	# add a "MAX" database from a copy of the last "MIN" database
+	$RRDTOOL dump "$FILE.old"					\
+	    | sed -e 's@<cf> MIN </cf>@<rra><cf> MAX </cf>@p'		\
+		    -e '1,/<cf> MAX <.cf>/d'				\
+		    -e 's@<v> [0-9.+e]* </v>@<v> NaN </v>@g' >>"$FILE.xml"
+	$RRDTOOL restore "$FILE.xml" "$FILE"
+	rm "$FILE.xml"
+    fi
+
+    if test -n "$LINE"; then
+	# create the RRD file if it does not exist
+	if test ! -s "$FILE"; then
+	    $DCC_LIBEXEC/dcc-stats-init $QUIET $DEBUG -h$DCC_HOMEDIR	\
+		-D$DATADIR -T "$RRDTOOL" -O "$RRDOPTS" "$FILE"
+	fi
+	# do not add flood checksum counts to new database
+	if test -z "`$RRDTOOL info $FILE | grep '^ds.flooded.*DERIVE'`"; then
+	    LINE=`expr "$LINE" : '\(.*\):[0-9]*$'`
+	fi
+	$RRDTOOL update "$FILE" "$TS:$LINE"
+	# ensure that the .rrd file has the right mtime
+	if test -n "$TTS"; then
+	    touch $TTS $FILE
+	fi
+    fi
+done