Mercurial > notdcc
view misc/dcc-stats-collect.in @ 5:0a7a5940ee3a
Change description per license
author | Peter Gervai <grin@grin.hu> |
---|---|
date | Tue, 10 Mar 2009 15:03:24 +0100 |
parents | c7f6b056b673 |
children |
line wrap: on
line source
#! /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