#! /usr/bin/perl use strict ; use warnings ; package Probe::Ntpq ; use base 'Probe' ; # ntp_offset msec ntpq offset # ntp_freq real ntpq frequency sub ITEMS { [ { name => 'ntp_offset' , kind => 'msec' , args => [ qw(offset) ] } , { name => 'ntp_freq' , kind => 'real' , args => [ qw(frequency) ] } ] ; } ; sub main { my $self = shift ; my $itms = shift ; # items to probe : [ item, ... ] my $clnt = shift ; # main::CLIENT my $hnam = $itms -> [ 0 ] -> hnam ; my $tget = Util -> hostname eq $hnam ? 'localhost' : $hnam ; my $prog = Util::find_bin ( 'ntpq' ) ; my @cmds = map { sprintf "rv 0 %s", $_ -> args -> [ 0 ] } @$itms ; my @prog = ( $prog , ( map { ( '-c', $_ ) } @cmds ) , $tget ) ; my ( $err, $xit, $sig, @lines ) = Probe::Util::run_prog ( @prog ) ; if ( $err ) { $_ -> perr ( $err ) for @$itms ; } else { chomp @lines ; my $line = join ' ', @lines ; for my $item ( @$itms ) { my $clas = $item -> args -> [ 0 ] ; if ( $line =~ /\b$clas=(\S+)/ ) { my $val = $1 ; chop $val if $val =~ /,$/ ; $val /= 1000 if $clas eq 'offset' ; $val = Probe::Util::secs_expire ( $val ) if $clas eq 'expire' ; $item -> set_val ( abs $val ) ; } } } } 1 ;