diff misc/stats-get.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/stats-get.in	Tue Mar 10 13:49:58 2009 +0100
@@ -0,0 +1,147 @@
+#! /bin/sh
+
+# get statistics from a DCC server
+#   [-x]	    debugging
+#   [-q]	    quiet
+#   [-S]	    read `cdcc stats` from stdin
+#   [-s stats-file] save raw `cdcc stats` output in stats-file
+#   [-i client-ID]  that DCC server will accept
+#   [-p password]   that DCC server will accept
+#   host	    server to ask for numbers
+
+# A single line of 5 decimal numbers separated by colons is sent to stdout:
+#   For example,
+#	115492:71318:44694:2462909:155924
+#   means the DCC server has
+#	115492  received reports of checksums from DCC clients
+#	71318	received reports where the target count was >= 10
+#	44694	received reports where the target count was "many"
+#	2462909	entries in its hash table
+#	155924	received reports by flooding
+
+
+# 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.20 $Revision$
+#	@configure_input@
+
+DEBUG=
+QUIET=
+STATSFILE=
+STATSFILE_NEW=/dev/null
+CLNT_ID="1"
+PASSWD=
+USAGE="`basename $0`: [-xqS] [-s stats-file] [-i client-ID] [-p password] [host]"
+while getopts "xqSs:i:p:" c; do
+    case $c in
+	x) set -x; DEBUG=-x;;
+	q) QUIET="-q";;
+	S) USE_STDIN=yes;;
+	s) if test $OPTARG != /dev/null; then
+		STATSFILE=$OPTARG
+		STATSFILE_NEW=$STATSFILE.$$
+		trap "/bin/rm -f $STATSFILE_NEW" 0 1 2 15
+	    fi
+	    ;;
+	i) CLNT_ID="$OPTARG";;
+	p) if test "$OPTARG" != ""; then
+		PASSWD="password $OPTARG;"
+	    fi
+	    ;;
+	*) echo "$USAGE" 1>&2; exit 1;;
+    esac
+done
+shift `expr $OPTIND - 1 || true`
+if test "$#" -ne 1; then
+    if test "$#" -ne 0 -o -z "$USE_STDIN"; then
+	echo "$USAGE" 1>&2
+	exit 1
+    fi
+fi
+
+HOST=$1
+
+if test "$USE_STDIN" = yes; then
+    cat
+else
+    exec </dev/null
+    if test -n "$QUIET"; then
+	@bindir@/cdcc "id $CLNT_ID; $PASSWD host $HOST; stats" 2>/dev/null
+    else
+	@bindir@/cdcc "id $CLNT_ID; $PASSWD host $HOST; stats"
+    fi
+fi								\
+    | tee $STATSFILE_NEW					\
+    | awk '
+	/hash entries/{
+	    hashes = $4;
+	}
+	/query/{
+	    queries = $8;
+	    if (queries ~ /^-/) {
+		# negative numbers are 32-bit overflows
+		queries = 4294967296 + queries;
+	    }
+	}
+	/reports.*many/{
+	    reports = $1;
+	    if (reports ~ /^-/) {
+		reports = 4294967296 + reports;
+	    }
+	}
+	/answers.*>10/{
+	    split($2,bulk,">");
+	    if (bulk[1] ~ /^-/) {
+		bulk[1] = 4294967296 + bulk[1];
+	    }
+	    spam=$5;
+	    if (spam ~ /^-/) {
+		spam = 4294967296 + spam;
+	    }
+	}
+	/accepted/{
+	    flooded=$1;
+	    if (flooded ~ /^-/) {
+		flooded = 4294967296 + flooded;
+	    }
+	}
+	END {
+	    printf "%s:%s:%s:%s:%s\n",
+		    reports+queries, bulk[1], spam, hashes, flooded;
+	}'
+
+if test $STATSFILE_NEW != /dev/null -a -s $STATSFILE_NEW; then
+    rm -f $STATSFILE
+    mv $STATSFILE_NEW $STATSFILE
+fi