]> andersk Git - moira.git/blob - gen/nagios-wsh.gen
allow for simple service monitoring via tagged members
[moira.git] / gen / nagios-wsh.gen
1 #!/moira/bin/perl -Tw
2
3 # $Id$
4 # The following exit codes are defined and MUST BE CONSISTENT with the
5 # error codes the library uses:
6 $MR_DBMS_ERR = 47836421;
7 $MR_OCONFIG = 47836460;
8
9 $outdir = '/moira/dcm/nagios-wsh';
10
11 use DBI;
12
13 $dbh = DBI->connect("dbi:Oracle:moira", "moira", "moira")
14     || exit $MR_DBMS_ERR;
15
16 $sth0 = $dbh->prepare("SELECT l.list_id, m.name " .
17                       "FROM list l, machine m, serverhosts sh " .
18                       "WHERE sh.value3 = l.name AND sh.service = " .
19                       "'NAGIOS-WSH' AND m.mach_id = sh.mach_id")
20     || exit $MR_DBMS_ERR;
21 $sth0->execute;
22
23 while (($root_list_id, $hostname) = $sth0->fetchrow_array) {
24     umask 022;
25     open(OUT, ">$outdir/$hostname") || exit $MR_OCONFIG;
26     print OUT "# This file is automatically generated by Moira.  Do not edit.\n";
27     $sth = $dbh->prepare("SELECT m.name, i.tag FROM machine m, imembers i " .
28                          "WHERE i.list_id = " . $dbh->quote($root_list_id) .
29                          "AND i.member_type = 'MACHINE' AND m.status = 1 " .
30                          "AND i.member_id = m.mach_id AND i.direct = 1 ORDER BY m.name") 
31         || exit $MR_DBMS_ERR;
32     $sth->execute;
33
34     while (($name, $tag) = $sth->fetchrow_array) {
35         next if $name eq "[NONE]";
36         $name = lc($name);
37         push(@allwshhosts, $name);
38         print OUT <<END;
39 define host{
40         host_name               $name
41         alias                   $name
42         address                 $name
43         use                     generic-host
44         }
45
46 define service{
47         host_name               $name
48         contact_groups          wsh
49         use                     ping-service
50         }
51
52 define hostescalation{
53         host_name               $name
54         contact_groups          wsh,wsh-mail
55         first_notification      2
56         last_notification       0
57         notification_interval   0
58         }
59
60 define serviceescalation{
61         host_name               $name
62         contact_groups          wsh,wsh-mail
63         service_description     PING
64         first_notification      2
65         last_notification       0
66         notification_interval   0
67         }
68
69 END
70
71         next if $tag == 0; 
72         $sth1 = $dbh->prepare("SELECT s.string " .
73                               "FROM strings s " .
74                               "WHERE s.string_id = " . $tag)
75             || exit $MR_DBMS_ERR;
76         $sth1->execute;
77         my @tags = split /\s+/,$sth1->fetchrow_array;
78         $sth1->finish;
79         my %services;
80         while (<@tags>) {
81             my $service = $_;
82             chomp $service;
83             if ($service =~ /^(FTP|NFS|HTTP|HTTPS|SMTP|SSHD|TELNET|TNS)$/i) {
84                 my $ucservice = $service;
85                 $ucservice =~ tr/a-z/A-Z/;
86                 my $lcservice = $service;
87                 $lcservice =~ tr/A-Z/a-z/;
88                 $services{$ucservice}++;
89                 print OUT <<END;
90 define service{
91         host_name               $name
92         contact_groups          wsh
93         use                     $lcservice-service
94         }
95
96 define serviceescalation{
97         host_name               $name
98         contact_groups          wsh,wsh-mail
99         service_description     $ucservice
100         first_notification      2
101         last_notification       0
102         notification_interval   0
103         }
104
105 END
106             } elsif ($service =~ /^HTTPS-CERT$/i) {
107                 $services{'HTTPS-CERT'}++;
108                 print OUT <<END;
109 define service{
110         host_name               $name
111         contact_groups          wsh-mail
112         use                     https-cert-service
113         }
114
115 END
116             } else {
117                 printf STDERR "Machine %s has unknown service %s; ignoring\n", $name, $service;
118             }
119
120             if ($services{'HTTPS'} && $services{'HTTPS-CERT'}) {
121                 print OUT <<END;
122 define servicedependency{
123         dependent_host_name             $name
124         dependent_service_description   HTTPS-CERT
125         host_name                       $name
126         service_description             HTTPS
127         execution_failure_criteria      n
128         notification_failure_criteria   w,u,c
129         }
130
131 END
132             }
133         }
134     } # while $sth->fetchrow_array
135
136     print OUT <<END;
137 define hostgroup{
138         hostgroup_name          wsh-hosts
139         alias                   wsh-hosts
140         contact_groups          wsh
141 END
142
143 print OUT "\tmembers\t\t\t";
144
145 $maybecomma = "";
146 foreach $host (@allwshhosts) {
147     print OUT "$maybecomma$host";
148     $maybecomma = ",";
149 }
150
151 print OUT "\n\t}\n\n";
152
153 close(OUT);
154 }
155
156 $dbh->disconnect;
157
158 exit 0;
159
160
This page took 0.073155 seconds and 5 git commands to generate.