diff misc/dcc-stats-init.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-init.in	Tue Mar 10 13:49:58 2009 +0100
@@ -0,0 +1,161 @@
+#! /bin/sh
+
+# initialize an RRD file to collect DCC statistics
+#   [-x]	    debugging
+#   [-q]	    quiet
+#   [-h dcc_homedir]
+#   [-D data-dir]   where to put the rrdtool file
+#   [-T @RRDTOOL@]
+#		    see http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/
+#			or the FreeBSD package.
+#   [-O rrdopts]    "--heartbeat X" or "--step Y"
+#   file	    RRD database that receives the collected 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.25 $Revision$
+#	@configure_input@
+
+exec 1>&2 </dev/null
+
+DCC_HOMEDIR=@prefix@
+DEBUG=
+# check the args once to get the home directory
+while getopts "xqRh:D:T:O:" c; do
+    case $c in
+	x) set -x; DEBUG=-x=;;
+	h) DCC_HOMEDIR="$OPTARG";;
+	*) ;;
+    esac
+done
+. $DCC_HOMEDIR/dcc_conf
+
+REPS=
+DATADIR=$DCC_HOMEDIR/stats
+RRDTOOL=@RRDTOOL@
+RRDOPTS=
+USAGE="`basename $0`: [-xqR] [-h homedir] [-D data-dir] [-T rrdtool]
+    [-O rrdopts] file.rrd"
+OPTIND=1
+while getopts "xqRh:D:T:O:" c; do
+    case $c in
+	x) ;;				    # handled above
+	q) QUIET=quiet;;
+	R) REPS=yes;;
+	h) ;;				    # handled above
+	D) DATADIR="$OPTARG";;
+	T) RRDTOOL="$OPTARG";;
+	O) RRDOPTS="$RRDOPTS $OPTARG";;
+	*) echo "$USAGE" 1>&2; exit 1;;
+    esac
+done
+shift `expr $OPTIND - 1 || true`
+if test "$#" -ne 1; then
+    echo "$USAGE" 1>&2
+    exit 1
+fi
+FILE=$1
+
+if test ! -d $DATADIR; then
+    mkdir $DATADIR
+fi
+cd $DATADIR
+
+if test "$FILE" = "`basename $FILE .rrd`"; then
+    FILE=$FILE.rrd
+fi
+if test -s "$FILE"; then
+    echo "$FILE already exists" 1>&2
+    exit 1
+fi
+
+
+# assume no server will handle more than 1000 operations/second
+OPSPS=1000
+
+# default sample every 10 minutes.
+STEP=600
+
+# be willing to get STEP and heartbeat from the -O arg(s)
+HBEAT=
+while test -n "$RRDOPTS"; do
+    RRDOPTS=`expr "X$RRDOPTS" : 'X *\(.*\)'`
+    if test -z "$RRDOPTS"; then
+	break;
+    fi
+    X=`expr "X$RRDOPTS" : 'X--heartbeat[	 ][	 ]*\([0-9][0-9]*\)'`
+    if test -n "$X"; then
+	HBEAT=$X
+	RRDOPTS=`expr "X$RRDOPTS" :  "X--heartbeat[	 ]$X *\(.\)"`
+	continue
+    fi
+    X=`expr "X$RRDOPTS" : 'X--step[	 ][	 ]*\([0-9][0-9]*\)'`
+    if test -n "$X"; then
+	STEP=$X
+	RRDOPTS=`expr "X$RRDOPTS" :  "X--step[	 ]$X *\(.\)"`
+	continue
+    fi
+    echo 'unrecognized RRD option "'"$RRDOPTS"'"' 1>&2
+    exit 1
+done
+
+# Use a heartbeat of 31 minutes or 1860 seconds to allow a missed sample as
+#   well as jitter by cron.  If you use a heartbeat equal to the cron
+#   repetition rate, then a single second delay by cron will make the previous
+#   period have no samples and be undefined.
+if test -z "$HBEAT"; then
+    HBEAT=`expr $STEP \* 3 + 60`
+fi
+
+# Keep hourly (or 6-step) average data for 5 years
+HOUR_STEPS=`expr 3600 / $STEP`
+HOUR_ROWS=`expr \( 5 \* 366 \* 24 \* 3600 \) / \( $STEP \* 6 \)`
+
+# Keep 10-minute (or single-step) average data for a month
+FAST_ROWS=`expr 31 \* 24 \* $HOUR_STEPS`
+
+# Keep daily database size data for 5 years
+DB_STEPS=`expr \( 3600 \* 24 \) / $STEP`
+DB_ROWS=`expr 5 \* 366`
+
+$RRDTOOL create $FILE --step $STEP --start -61month		\
+    DS:reports:DERIVE:$HBEAT:0:$OPSPS				\
+    DS:bulk:DERIVE:$HBEAT:0:$OPSPS				\
+    DS:spam:DERIVE:$HBEAT:0:$OPSPS				\
+    DS:hashes:GAUGE:$HBEAT:U:U					\
+    RRA:AVERAGE:0.5:$HOUR_STEPS:$HOUR_ROWS			\
+    RRA:AVERAGE:0.04:1:$FAST_ROWS				\
+    RRA:MIN:0.9:$DB_STEPS:$DB_ROWS				\
+    RRA:MAX:0.9:$DB_STEPS:$DB_ROWS