tinydns munin modul für immer1-4
[puppet_munin.git] / files / plugins / tinydns
1 #!/usr/bin/perl -T
2
3 # tinydns-munin-plugin  +
4 # Copyright (C) 2007 admin at immerda.ch
5 #
6 # This program is free software; you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 2 of the License, or
9 # (at your option) any later version.
10 #
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License for more details.
15 #
16 # You should have received a copy of the GNU General Public License
17 # along with this program; if not, write to the Free Software
18 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19
20 # with the HELP of
21 # tinygraph -- a RRDtool frontend for tinydns statistics
22 # Copyright (C) 2005 Ulrich Zehl <ulrich@topfen.net>
23
24 #use strict; # to activate ....
25
26
27 #use Time::TAI64 qw(tai2unix);
28
29 $A = 0;
30 $NS = 0;
31 $CNAME = 0;
32 $SOA = 0;
33 $PTR = 0;
34 $HINFO = 0;
35 $MX = 0;
36 $TXT = 0;
37 $RP = 0;
38 $SIG = 0;
39 $KEY = 0;
40 $AAAA = 0;
41 $A6 = 0;
42 $IXFR = 0;
43 $AXFR = 0;
44 $ANY = 0;
45
46 $logfile = $ENV{logdir} || "/var/tinydns/log/main/current";
47
48 if ( $ARGV[0] and $ARGV[0] eq "config" )
49 {
50     print "host_name $ENV{FQDN}\n";
51     print "graph_title tinydns\n";
52     print "graph_args --base 1000 -l 0\n";
53         print "graph_category DNS\n";
54         print "a.type COUNTER\n";
55         print "mx.type COUNTER\n";
56
57     print "a.label A\n";
58         print "ns.label NS\n";
59         print "cname.label CNAME\n";
60         print "soa.label SOA\n";
61         print "ptr.label PTR\n";
62         print "mx.label MX\n";
63         print "aaaa.label AAAA\n";
64         print "any.label ANY\n";
65         print "hinfo.label HINFO\n";
66         print "txt.label TXT\n";
67         print "rp.label RP\n";
68         print "sig.label SIG\n";
69         print "key.label KEY\n";
70         print "a6.label A6\n";
71         print "ixfr.label IXFR\n";
72         print "axfr.label AXFR\n";
73
74     print "a.type COUNTER\n";
75         print "ns.type COUNTER\n";
76         print "cname.type COUNTER\n";
77         print "soa.type COUNTER\n";
78         print "ptr.type COUNTER\n";
79         print "mx.type COUNTER\n";
80         print "aaaa.type COUNTER\n";
81         print "any.type COUNTER\n";
82         print "hinfo.type COUNTER\n";
83         print "txt.type COUNTER\n";
84         print "rp.type COUNTER\n";
85         print "sig.type COUNTER\n";
86         print "key.type COUNTER\n";
87         print "a6.type COUNTER\n";
88         print "ixfr.type COUNTER\n";
89         print "axfr.type COUNTER\n";
90     exit 0;
91 }
92
93 my %querytypes = (
94         '0001' => 'A',
95         '0002' => 'NS',
96         '0005' => 'CNAME',
97         '0006' => 'SOA',
98         '000c' => 'PTR',
99         '000d' => 'HINFO',
100         '000f' => 'MX',
101         '0010' => 'TXT',
102         '0011' => 'RP',
103         '0018' => 'SIG',
104         '0019' => 'KEY',
105         '001c' => 'AAAA',
106         '0026' => 'A6',
107         '00fb' => 'IXFR',
108         '00fc' => 'AXFR',
109         '00ff' => 'ANY',
110 );
111
112 my %sum = (
113         (map {$_ => 0} values %querytypes),
114 );
115
116 sub process_line($)
117 {
118         my $line = shift;
119         if ($line =~ /^(@[a-f0-9]{24}) ([a-f0-9]{8}):[a-f0-9]{4}:[a-f0-9]{4} ([\+\-IC\/]) ([a-f0-9]{4}) (.+)$/)
120         {
121                 #my $time    = tai2unix($1);
122                 my $ip      = join(".", unpack("C*", pack("H8", $2)));
123                 my $rtype   = $3;
124                 my $qtype   = $querytypes{$4};
125                                 #my $qstring = $5; # currently unused
126
127                 if ($rtype eq '+')
128                 {
129                                                  if ($qtype eq 'A'){$A++;};
130                                                  if ($qtype eq 'NS'){$NS++;};
131                                                  if ($qtype eq 'CNAME'){$CNAME++;};
132                                                  if ($qtype eq 'SOA'){$SOA++;};
133                                                  if ($qtype eq 'PTR'){$PTR++;};
134                                                  if ($qtype eq 'HINFO'){$HINFO++;};
135                                                  if ($qtype eq 'MX'){$MX++;};
136                                                  if ($qtype eq 'TXT'){$TXT++;};
137                                                  if ($qtype eq 'RP'){$RP++;};
138                                                  if ($qtype eq 'SIG'){$SIG++;};
139                                                  if ($qtype eq 'KEY'){$KEY++;};
140                                                  if ($qtype eq 'AAAA'){$AAAA++;};
141                                                  if ($qtype eq 'A6'){$A6++;};
142                                                  if ($qtype eq 'IXFR'){$IXFR++;};
143                                                  if ($qtype eq 'AXFR'){$AXFR++;};
144                                                  if ($qtype eq 'ANY'){$ANY++;};
145                 }
146         }
147 }
148
149 open(LOG, "<$logfile") or die "Error opening $logfile: $!";
150
151 while (<LOG>)
152 {
153                         process_line($_);
154 }
155
156 print "a.value $A\n";
157 print "ns.value $NS\n";
158 print "cname.value $CNAME\n";
159 print "soa.value $SOA\n";
160 print "ptr.value $PTR\n";
161 print "mx.value $MX\n";
162 print "aaaa.value $AAAA\n";
163 print "any.value $ANY\n";
164 print "hinfo.value $HINFO\n";
165 print "txt.value $TXT\n";
166 print "rp.value $RP\n";
167 print "sig.value $SIG\n";
168 print "key.value $KEY\n";
169 print "a6.value $A6\n";
170 print "ixfr.value $IXFR\n";
171 print "axfr.value $AXFR\n";
172