diff options
Diffstat (limited to 'sitesummary-nodes')
-rwxr-xr-x | sitesummary-nodes | 110 |
1 files changed, 105 insertions, 5 deletions
diff --git a/sitesummary-nodes b/sitesummary-nodes index 1ac8fa1..fd59d62 100755 --- a/sitesummary-nodes +++ b/sitesummary-nodes @@ -10,7 +10,7 @@ use SiteSummary; use Getopt::Std; my %opts; -getopts("m", \%opts); +getopts("mn", \%opts); my %hostnames; @@ -18,6 +18,8 @@ for_all_hosts(\&handle_host); if ($opts{'m'}) { print_munin_list(); +} elsif ($opts{'n'}) { # XXX Nagios config generation do not work yet + generate_nagios_config(); } else { print_list(); } @@ -34,13 +36,13 @@ sub print_list { } } -sub is_munin_client { - my $hostid = shift; - # Check debian/dpkg-l for 'ii *munin-node ' +sub is_pkg_installed { + my ($hostid, $pkgname) = @_; + # Check debian/dpkg-l for 'ii *pkgname ' my $path = get_filepath_current($hostid, "/debian/dpkg-l"); if (open (my $fh, $path)) { while(<$fh>) { - if (m/^ii *munin-node /) { + if (m/^ii *$pkgname /) { close($fh); return 1 } @@ -50,6 +52,17 @@ sub is_munin_client { return undef; } +sub is_munin_client { + my $hostid = shift; + return is_pkg_installed($hostid, "munin-node"); +} + +sub is_nagios_client { + my $hostid = shift; + return is_pkg_installed($hostid, "nagios-nrpe-server") || + is_pkg_installed($hostid, "nagios-text"); +} + sub print_munin_list { for my $hostname (sort keys %hostnames) { next unless (is_munin_client($hostnames{$hostname})); @@ -65,3 +78,90 @@ sub print_munin_list { EOF } } + +sub generate_nagios_config { + for my $hostname (sort keys %hostnames) { + my $hostid = $hostnames{$hostname}; + next unless (is_nagios_client($hostid)); + + my $ifconfigpath = get_filepath_current($hostid, "/system/ifconfig-a"); + my $peerinfopath = get_filepath_current($hostid, "/peerinfo"); + open (F, "<", $peerinfopath)||die "Unable to read from $peerinfopath"; + my ($address) = split(/\s+/, scalar <F>); + close(F); + + # first, check ping to see if the other checks should be performed + print <<EOF; +##################### $hostname ####################### +define host { + host_name $hostname + address $address +} +define service { + use server-service + host_name $hostname + service_description ping + check_command check_ping!100.0,20%!500.0,60% +} +EOF + + print <<EOF if is_pkg_installed($hostid, "openssh-server"); +define service { + use server-service + host_name $hostname + service_description ssh + check_command check_ssh +} +EOF + + my %tcpservices = + ( + 139 => { name => 'samba', package => 'samba' }, + 631 => { name => 'cups', package => 'cupsys' }, + 636 => { name => 'ldaps', package => 'slapd' }, + 3128 => { name => 'squid', package => 'squid' }, +# 10000 => { name => 'webmin', package => 'webmin' }, + ); + + for my $port (sort { $a <=> $b } keys %tcpservices) { + next if (exists $tcpservices{$port}->{package} && ! + is_pkg_installed($hostid, + $tcpservices{$port}->{package})); + my $servicename = $tcpservices{$port}->{name}; + print <<EOF; +define service { + use server-service + host_name $hostname + service_description $servicename + check_command check_tcp!$port +} +EOF + } + # check munin if munin-node is installed + # check hw and sw raid status + # check hardware status + # check free swap + # check X font server + # check LDAP + # check DNS + # check disk free space + my $path = get_filepath_current($hostid, "/system/procmounts"); + if ( -e $path ) { + open (F, "<", $path) || die "unable to read from $path"; + while (<F>) { + chomp; + my ($dev, $partition, $fs, $opts) = split; + my $warn = 10; + my $crit = 5; + print <<EOF; +define service { + use server-service + host_name $hostname + service_description Disk $partition + check_command check_disk!$warn%!$crit%!$partition +} +EOF + } + } + } +} |