#!/usr/bin/perl -w # # Plugin to monitor NTP statistics # # Parameters understood: # # config (required) # autoconf (optional - used by munin-node-configure) # suggest (optional - used by munin-node-configure) # # Config variables: # # lowercase - lowercase hostnames after lookup # # $Log$ # Revision 1.4 2004/11/21 20:19:09 jimmyo # Don't suggest localhost peer. # # Revision 1.3 2004/11/21 20:12:32 jimmyo # Cosmetics. # # Revision 1.2 2004/11/21 19:55:28 jimmyo # Upped generic/ntp_ to auto family. # # Revision 1.1 2004/11/21 19:35:23 jimmyo # Corrected file name. # # Revision 1.2 2004/09/08 15:25:33 ilmari # Use /usr/bin/perl in all perl shebang lines. # # Revision 1.1 2004/01/30 15:07:38 jimmyo # Added generic plugins ntp_ and ntp_states to manual family (SF#887000). # # # # # Magic markers - optional - used by installation scripts and # munin-node-configure: # #%# family=auto #%# capabilities=autoconf suggest # use strict; use Net::hostent; use Socket; if ($ARGV[0] and $ARGV[0] eq "autoconf") { `ntpq -c help >/dev/null 2>/dev/null`; if ($? eq "0") { if (`ntpq -c "hostnames no" -c peers | wc -l` > 0) { print "yes\n"; exit 0; } else { print "no (unable to list peers)\n"; exit 1; } } else { print "no (ntpq not found)\n"; exit 1; } } if ($ARGV[0] and $ARGV[0] eq "suggest") { my @lines = `ntpq -c "hostnames no" -c peers`; foreach (@lines) { next unless /^.(\d+\.\d+\.\d+\.\d+)/; next if /^.224\.0\.1\.1/; next if /^.127\./; my $addr = $1; my $name = gethostbyaddr(inet_aton($addr)); $name = defined $name ? $name->name : $addr; $name = lc $name if exists $ENV{"lowercase"}; $name =~ s/[\.-]/_/g; print $name, "\n"; } exit 0; } $0 =~ /ntp_(.+)*$/; my $name = $1; exit 2 unless defined $name; my $round_rovin = 0; my $round_rovinsv; if ($name =~ /nict_go_jp/) { $round_rovin = 1; $round_rovinsv = "nict_go_jp"; } if ($ARGV[0] and $ARGV[0] eq "config") { my @lines = `ntpq -c "hostnames no" -c peers`; my $host; foreach (@lines) { next unless /^.(\d+\.\d+\.\d+\.\d+)/; next if /^.224\.0\.1\.1/; my $addr = $1; my $host = gethostbyaddr(inet_aton($addr)); $host = defined $host ? $host->name : $addr; $host = lc $host if exists $ENV{"lowercase"}; my $host_ = $host; $host_ =~ s/[\.-]/_/g; if ($round_rovin == 1) { if ($host_ =~ m/$round_rovinsv/i) { } else { next unless $host_ eq $name; } } else { next unless $host_ eq $name; } print "graph_title NTP statistics for peer $host\n"; } print "graph_args --base 1000 --vertical-label msec --lower-limit 0\n"; print "delay.label Delay\n"; print "delay.draw LINE2\n"; print "offset.label Offset\n"; print "offset.draw LINE2\n"; print "jitter.label Jitter\n"; print "jitter.draw LINE2\n"; exit 0; } my @lines = `ntpq -c "hostnames no" -c peers`; foreach (@lines) { next unless /^.(\d+\.\d+\.\d+\.\d+)/; next if /^.224\.0\.1\.1/; my $addr = $1; my $host = gethostbyaddr(inet_aton($addr)); $host = defined $host ? $host->name : $addr; $host = lc $host if exists $ENV{"lowercase"}; $host =~ s/[\.-]/_/g; if ($round_rovin == 1) { if ($host =~ m/$round_rovinsv/i) { } else { next unless $host eq $name; } } else { next unless $host eq $name; } my @F = split; print <<"EOT"; delay.value $F[7] offset.value $F[8] jitter.value $F[9] EOT } exit 0; # vim:syntax=perl