Mercurial > notdcc
comparison 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 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:c7f6b056b673 |
---|---|
1 #! /bin/sh | |
2 | |
3 # initialize an RRD file to collect DCC statistics | |
4 # [-x] debugging | |
5 # [-q] quiet | |
6 # [-h dcc_homedir] | |
7 # [-D data-dir] where to put the rrdtool file | |
8 # [-T @RRDTOOL@] | |
9 # see http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/ | |
10 # or the FreeBSD package. | |
11 # [-O rrdopts] "--heartbeat X" or "--step Y" | |
12 # file RRD database that receives the collected data | |
13 | |
14 | |
15 # Copyright (c) 2008 by Rhyolite Software, LLC | |
16 # | |
17 # This agreement is not applicable to any entity which sells anti-spam | |
18 # solutions to others or provides an anti-spam solution as part of a | |
19 # security solution sold to other entities, or to a private network | |
20 # which employs the DCC or uses data provided by operation of the DCC | |
21 # but does not provide corresponding data to other users. | |
22 # | |
23 # Permission to use, copy, modify, and distribute this software without | |
24 # changes for any purpose with or without fee is hereby granted, provided | |
25 # that the above copyright notice and this permission notice appear in all | |
26 # copies and any distributed versions or copies are either unchanged | |
27 # or not called anything similar to "DCC" or "Distributed Checksum | |
28 # Clearinghouse". | |
29 # | |
30 # Parties not eligible to receive a license under this agreement can | |
31 # obtain a commercial license to use DCC by contacting Rhyolite Software | |
32 # at sales@rhyolite.com. | |
33 # | |
34 # A commercial license would be for Distributed Checksum and Reputation | |
35 # Clearinghouse software. That software includes additional features. This | |
36 # free license for Distributed ChecksumClearinghouse Software does not in any | |
37 # way grant permision to use Distributed Checksum and Reputation Clearinghouse | |
38 # software | |
39 # | |
40 # THE SOFTWARE IS PROVIDED "AS IS" AND RHYOLITE SOFTWARE, LLC DISCLAIMS ALL | |
41 # WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES | |
42 # OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL RHYOLITE SOFTWARE, LLC | |
43 # BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES | |
44 # OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, | |
45 # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, | |
46 # ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS | |
47 # SOFTWARE. | |
48 # Rhyolite Software DCC 1.3.103-1.25 $Revision$ | |
49 # @configure_input@ | |
50 | |
51 exec 1>&2 </dev/null | |
52 | |
53 DCC_HOMEDIR=@prefix@ | |
54 DEBUG= | |
55 # check the args once to get the home directory | |
56 while getopts "xqRh:D:T:O:" c; do | |
57 case $c in | |
58 x) set -x; DEBUG=-x=;; | |
59 h) DCC_HOMEDIR="$OPTARG";; | |
60 *) ;; | |
61 esac | |
62 done | |
63 . $DCC_HOMEDIR/dcc_conf | |
64 | |
65 REPS= | |
66 DATADIR=$DCC_HOMEDIR/stats | |
67 RRDTOOL=@RRDTOOL@ | |
68 RRDOPTS= | |
69 USAGE="`basename $0`: [-xqR] [-h homedir] [-D data-dir] [-T rrdtool] | |
70 [-O rrdopts] file.rrd" | |
71 OPTIND=1 | |
72 while getopts "xqRh:D:T:O:" c; do | |
73 case $c in | |
74 x) ;; # handled above | |
75 q) QUIET=quiet;; | |
76 R) REPS=yes;; | |
77 h) ;; # handled above | |
78 D) DATADIR="$OPTARG";; | |
79 T) RRDTOOL="$OPTARG";; | |
80 O) RRDOPTS="$RRDOPTS $OPTARG";; | |
81 *) echo "$USAGE" 1>&2; exit 1;; | |
82 esac | |
83 done | |
84 shift `expr $OPTIND - 1 || true` | |
85 if test "$#" -ne 1; then | |
86 echo "$USAGE" 1>&2 | |
87 exit 1 | |
88 fi | |
89 FILE=$1 | |
90 | |
91 if test ! -d $DATADIR; then | |
92 mkdir $DATADIR | |
93 fi | |
94 cd $DATADIR | |
95 | |
96 if test "$FILE" = "`basename $FILE .rrd`"; then | |
97 FILE=$FILE.rrd | |
98 fi | |
99 if test -s "$FILE"; then | |
100 echo "$FILE already exists" 1>&2 | |
101 exit 1 | |
102 fi | |
103 | |
104 | |
105 # assume no server will handle more than 1000 operations/second | |
106 OPSPS=1000 | |
107 | |
108 # default sample every 10 minutes. | |
109 STEP=600 | |
110 | |
111 # be willing to get STEP and heartbeat from the -O arg(s) | |
112 HBEAT= | |
113 while test -n "$RRDOPTS"; do | |
114 RRDOPTS=`expr "X$RRDOPTS" : 'X *\(.*\)'` | |
115 if test -z "$RRDOPTS"; then | |
116 break; | |
117 fi | |
118 X=`expr "X$RRDOPTS" : 'X--heartbeat[ ][ ]*\([0-9][0-9]*\)'` | |
119 if test -n "$X"; then | |
120 HBEAT=$X | |
121 RRDOPTS=`expr "X$RRDOPTS" : "X--heartbeat[ ]$X *\(.\)"` | |
122 continue | |
123 fi | |
124 X=`expr "X$RRDOPTS" : 'X--step[ ][ ]*\([0-9][0-9]*\)'` | |
125 if test -n "$X"; then | |
126 STEP=$X | |
127 RRDOPTS=`expr "X$RRDOPTS" : "X--step[ ]$X *\(.\)"` | |
128 continue | |
129 fi | |
130 echo 'unrecognized RRD option "'"$RRDOPTS"'"' 1>&2 | |
131 exit 1 | |
132 done | |
133 | |
134 # Use a heartbeat of 31 minutes or 1860 seconds to allow a missed sample as | |
135 # well as jitter by cron. If you use a heartbeat equal to the cron | |
136 # repetition rate, then a single second delay by cron will make the previous | |
137 # period have no samples and be undefined. | |
138 if test -z "$HBEAT"; then | |
139 HBEAT=`expr $STEP \* 3 + 60` | |
140 fi | |
141 | |
142 # Keep hourly (or 6-step) average data for 5 years | |
143 HOUR_STEPS=`expr 3600 / $STEP` | |
144 HOUR_ROWS=`expr \( 5 \* 366 \* 24 \* 3600 \) / \( $STEP \* 6 \)` | |
145 | |
146 # Keep 10-minute (or single-step) average data for a month | |
147 FAST_ROWS=`expr 31 \* 24 \* $HOUR_STEPS` | |
148 | |
149 # Keep daily database size data for 5 years | |
150 DB_STEPS=`expr \( 3600 \* 24 \) / $STEP` | |
151 DB_ROWS=`expr 5 \* 366` | |
152 | |
153 $RRDTOOL create $FILE --step $STEP --start -61month \ | |
154 DS:reports:DERIVE:$HBEAT:0:$OPSPS \ | |
155 DS:bulk:DERIVE:$HBEAT:0:$OPSPS \ | |
156 DS:spam:DERIVE:$HBEAT:0:$OPSPS \ | |
157 DS:hashes:GAUGE:$HBEAT:U:U \ | |
158 RRA:AVERAGE:0.5:$HOUR_STEPS:$HOUR_ROWS \ | |
159 RRA:AVERAGE:0.04:1:$FAST_ROWS \ | |
160 RRA:MIN:0.9:$DB_STEPS:$DB_ROWS \ | |
161 RRA:MAX:0.9:$DB_STEPS:$DB_ROWS |