diff options
Diffstat (limited to 'contrib/ntp/scripts/stats.ulrich.patches')
-rw-r--r-- | contrib/ntp/scripts/stats.ulrich.patches | 1003 |
1 files changed, 1003 insertions, 0 deletions
diff --git a/contrib/ntp/scripts/stats.ulrich.patches b/contrib/ntp/scripts/stats.ulrich.patches new file mode 100644 index 0000000..fe642f6 --- /dev/null +++ b/contrib/ntp/scripts/stats.ulrich.patches @@ -0,0 +1,1003 @@ + +Received: from huey2.ee.udel.edu by mail.eecis.udel.edu id aa25207; + 10 Dec 1997 10:39 EST +Received: from copland.udel.edu by huey.udel.edu id aa16958; + 10 Dec 1997 10:39 EST +Received: from rrzs2.rz.uni-regensburg.de (rrzs2.rz.uni-regensburg.de [132.199.1.2]) by copland.udel.edu (8.8.5/8.7.3) with ESMTP id KAA21293 for <mills@udel.edu>; Wed, 10 Dec 1997 10:39:12 -0500 (EST) +Received: from ngate.ngate.uni-regensburg.de (ngate.rz.uni-regensburg.de [132.199.3.13]) + by rrzs2.rz.uni-regensburg.de (8.8.5/8.8.5) with SMTP id QAA19974 + for <mills@udel.edu>; Wed, 10 Dec 1997 16:38:42 +0100 (MET) +Received: from rkdvmks1.ngate.uni-regensburg.de by ngate.ngate.uni-regensburg.de; Wed, 10 Dec 97 16:39 MET +Received: from rkdvmks1.ngate.uni-regensburg.de by kgate.ngate.uni-regensburg.de; Wed, 10 Dec 97 15:38 GMT +Received: from RKDVMKS1/SpoolDir by rkdvmks1.ngate.uni-regensburg.de (Mercury 1.32); + 10 Dec 97 16:38:34 +0100 +Received: from SpoolDir by RKDVMKS1 (Mercury 1.32); 10 Dec 97 16:38:06 +0100 +From: Ulrich Windl <ulrich.windl@rz.uni-regensburg.de> +Organization: Universitaet Regensburg, Klinikum +To: mills@udel.edu +Date: Wed, 10 Dec 1997 16:38:04 +0100 +MIME-Version: 1.0 +Content-Type: text/plain; charset=US-ASCII +Content-transfer-encoding: 7BIT +Subject: Big patch to scripts/monitoring +Priority: normal +X-mailer: Pegasus Mail for Windows (v2.53/R1) +Message-ID: <103AB9D209F5@rkdvmks1.ngate.uni-regensburg.de> + +Dave, there's another big patch against scripts/monitoring. The Perl +programs in there are rather old. As they are quite nice thogh, I +decided to update them for the latest version of Perl, namely 5.004. + +I'll include the description of changes and the patch. + +Ulrich + +Here is a description of changes made in ntploopwatch: + +Corrected most warnings that PERL 5.004 might emit. Corrected signal +handlers to make them work again. Corrected scaling (at least I +think). Supported case when output is sent to file or printer and +there is no X11 available. Fixed number of month in xlabels of the +plot. + +Added the ability to specify printer for GNUplot other that +PostScript. Use hostname if $STATHOST is not given in configuration +file. Corrected verbosity level for some messages. Added ability to +specify a non-standard print command. + +Perl 5.004_04 does no longer ignore ``-w--*-perl-*-''. Made some +cosmetic changes and added a timescale of 10 minutes. + +(Other programs are functionally unchanged. lr.pl is a PERL module now.) + + +Index: README +=================================================================== +RCS file: /home/windl/NTP/mon-REP/monitoring/README,v +retrieving revision 1.1.1.1 +retrieving revision 1.2 +diff -u -r1.1.1.1 -r1.2 +--- README 1993/08/24 19:29:34 1.1.1.1 ++++ README 1997/10/23 17:51:37 1.2 +@@ -1,14 +1,14 @@ + This directory contains support for monitoring the local clock of xntp daemons. + +-WARNING: The scripts and routines contained in this directory are bete realease! +- Do not depend on their correct operation. They are, however, in regular +- use at University of Erlangen-Nuernberg. No severe problems are known +- for this code. ++WARNING: The scripts and routines contained in this directory are beta ++ release! Do not depend on their correct operation. They are, ++ however, in regular use at University of Erlangen-Nuernberg. ++ No severe problems are known for this code. + + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + PLEASE THINK TWICE BEFORE STARTING MONITORING REMOTE XNTP DEAMONS !!!! + MONITORING MAY INCREASE THE LOAD OF THE DEAMON MONITORED AND MAY +-INCREASE THE NETWORK LOAD SIGNIFICANTLY ++INCREASE THE NETWORK LOAD SIGNIFICANTLY + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + +@@ -23,8 +23,8 @@ + It sends a set_trap request to each server given and dumps the + trap messages received. It handles refresh of set_trap. + Currently it handles only NTP V2, however the NTP V3 servers +- also accept v2 requests. It will not interpret v3 system and peer +- stati correctly. ++ also accept v2 requests. It will not interpret v3 system and ++ peer stati correctly. + + usage: + ntptrap [-n] [-p <port>] [-l <debug-output>] servers... +@@ -72,7 +72,9 @@ + + if a timeout occurs the next sample is tried after delay/2 seconds + +- The script will terminate after MAX_FAIL (currently 60) consecutive errors. ++ The script will terminate after MAX_FAIL (currently 60) ++ consecutive errors. ++ + Errors are counted for: + - error on send call + - error on select call +@@ -114,10 +116,10 @@ + command line values would be replaced by settings from the config file. + + printer: specify printer to print plot +- BSD print systems semantics apply; if printer is omitted +- the name "ps" is used; plots are prepared using +- PostScript, thus the printer should best accept +- postscript input ++ BSD print systems semantics apply; if printer ++ is omitted the name "ps" is used; plots are ++ prepared using PostScript, thus the printer ++ should best accept postscript input + + For the following see also the comments in loopwatch.config.SAMPLE + +@@ -139,8 +141,10 @@ + within display range + + timelocal.pl: +- used during conversion of ISO_DATE_TIME values specified in loopwatch +- config files to unix epoch values (seconds since 1970-01-01_00:00_00 UTC) ++ ++ used during conversion of ISO_DATE_TIME values specified in ++ loopwatch config files to unix epoch values (seconds since ++ 1970-01-01_00:00_00 UTC) + + A version of this file is distributed with perl-4.x, however, + it has a bug related to dates crossing 1970, causing endless loops.. +Index: lr.pl +=================================================================== +RCS file: /home/windl/NTP/mon-REP/monitoring/lr.pl,v +retrieving revision 1.1.1.1 +retrieving revision 1.4 +diff -u -r1.1.1.1 -r1.4 +--- lr.pl 1993/08/24 19:29:33 1.1.1.1 ++++ lr.pl 1997/10/23 17:51:37 1.4 +@@ -9,9 +9,14 @@ + ;# Frank Kardel, Rainer Pruy + ;# Friedrich-Alexander Universitaet Erlangen-Nuernberg + ;# ++;# Copyright (c) 1997 by ++;# Ulrich Windl <Ulrich.Windl@rz.uni-regensburg.de> ++;# (Converted to a PERL 5.004 package) + ;# + ;############################################################# + ++package lr; ++ + ## + ## y = A + Bx + ## +@@ -23,123 +28,124 @@ + ## + ## interface + ## +-*lr_init = *lr'lr_init; #';# &lr_init(tag); initialize data set for tag +-*lr_sample = *lr'lr_sample; #';# &lr_sample(x,y,tag); enter sample +-*lr_Y = *lr'lr_Y; #';# &lr_Y(x,tag); compute y for given x +-*lr_X = *lr'lr_X; #';# &lr_X(y,tag); compute x for given y +-*lr_r = *lr'lr_r; #';# &lr_r(tag); regression coeffizient +-*lr_cov = *lr'lr_cov; #';# &lr_cov(tag); covariance +-*lr_A = *lr'lr_A; #';# &lr_A(tag); +-*lr_B = *lr'lr_B; #';# &lr_B(tag); +-*lr_sigma = *lr'lr_sigma; #';# &lr_sigma(tag); standard deviation +-*lr_mean = *lr'lr_mean; #';# &lr_mean(tag); ++;# init(tag); initialize data set for tag ++;# sample(x, y, tag); enter sample ++;# Y(x, tag); compute y for given x ++;# X(y, tag); compute x for given y ++;# r(tag); regression coefficient ++;# cov(tag); covariance ++;# A(tag); ++;# B(tag); ++;# sigma(tag); standard deviation ++;# mean(tag); + ######################### + +-package lr; +- +-sub tagify +-{ +- local($tag) = @_; +- if (defined($tag)) +- { +- *lr_n = eval "*${tag}_n"; +- *lr_sx = eval "*${tag}_sx"; +- *lr_sx2 = eval "*${tag}_sx2"; +- *lr_sxy = eval "*${tag}_sxy"; +- *lr_sy = eval "*${tag}_sy"; +- *lr_sy2 = eval "*${tag}_sy2"; +- } +-} +- +-sub lr_init ++sub init + { +- &tagify($_[$[]) if defined($_[$[]); ++ my $self = shift; + +- $lr_n = 0; +- $lr_sx = 0.0; +- $lr_sx2 = 0.0; +- $lr_sxy = 0.0; +- $lr_sy = 0.0; +- $lr_sy2 = 0.0; ++ $self->{n} = 0; ++ $self->{sx} = 0.0; ++ $self->{sx2} = 0.0; ++ $self->{sxy} = 0.0; ++ $self->{sy} = 0.0; ++ $self->{sy2} = 0.0; + } + +-sub lr_sample ++sub sample($$$) + { +- local($_x, $_y) = @_; +- +- &tagify($_[$[+2]) if defined($_[$[+2]); ++ my $self = shift; ++ my($_x, $_y) = @_; + +- $lr_n++; +- $lr_sx += $_x; +- $lr_sy += $_y; +- $lr_sxy += $_x * $_y; +- $lr_sx2 += $_x**2; +- $lr_sy2 += $_y**2; ++ ++($self->{n}); ++ $self->{sx} += $_x; ++ $self->{sy} += $_y; ++ $self->{sxy} += $_x * $_y; ++ $self->{sx2} += $_x**2; ++ $self->{sy2} += $_y**2; + } + +-sub lr_B ++sub B($) + { +- &tagify($_[$[]) if defined($_[$[]); ++ my $self = shift; + +- return 1 unless ($lr_n * $lr_sx2 - $lr_sx**2); +- return ($lr_n * $lr_sxy - $lr_sx * $lr_sy) / ($lr_n * $lr_sx2 - $lr_sx**2); ++ return 1 unless ($self->{n} * $self->{sx2} - $self->{sx}**2); ++ return ($self->{n} * $self->{sxy} - $self->{sx} * $self->{sy}) ++ / ($self->{n} * $self->{sx2} - $self->{sx}**2); + } + +-sub lr_A ++sub A($) + { +- &tagify($_[$[]) if defined($_[$[]); ++ my $self = shift; + +- return ($lr_sy - &lr_B * $lr_sx) / $lr_n; ++ return ($self->{sy} - B($self) * $self->{sx}) / $self->{n}; + } + +-sub lr_Y ++sub Y($$) + { +- &tagify($_[$[]) if defined($_[$[]); ++ my $self = shift; + +- return &lr_A + &lr_B * $_[$[]; ++ return A($self) + B($self) * $_[$[]; + } + +-sub lr_X ++sub X($$) + { +- &tagify($_[$[]) if defined($_[$[]); ++ my $self = shift; + +- return ($_[$[] - &lr_A) / &lr_B; ++ return ($_[$[] - A($self)) / B($self); + } + +-sub lr_r ++sub r($) + { +- &tagify($_[$[]) if defined($_[$[]); ++ my $self = shift; + +- local($s) = ($lr_n * $lr_sx2 - $lr_sx**2) * ($lr_n * $lr_sy2 - $lr_sy**2); ++ my $s = ($self->{n} * $self->{sx2} - $self->{sx}**2) ++ * ($self->{n} * $self->{sy2} - $self->{sy}**2); + + return 1 unless $s; + +- return ($lr_n * $lr_sxy - $lr_sx * $lr_sy) / sqrt($s); ++ return ($self->{n} * $self->{sxy} - $self->{sx} * $self->{sy}) / sqrt($s); + } + +-sub lr_cov ++sub cov($) + { +- &tagify($_[$[]) if defined($_[$[]); ++ my $self = shift; + +- return ($lr_sxy - $lr_sx * $lr_sy / $lr_n) / ($lr_n - 1); ++ return ($self->{sxy} - $self->{sx} * $self->{sy} / $self->{n}) ++ / ($self->{n} - 1); + } + +-sub lr_sigma ++sub sigma($) + { +- &tagify($_[$[]) if defined($_[$[]); ++ my $self = shift; + +- return 0 if $lr_n <= 1; +- return sqrt(($lr_sy2 - ($lr_sy * $lr_sy) / $lr_n) / ($lr_n)); ++ return 0 if $self->{n} <= 1; ++ return sqrt(($self->{sy2} - ($self->{sy} * $self->{sy}) / $self->{n}) ++ / ($self->{n})); + } + +-sub lr_mean ++sub mean($) + { +- &tagify($_[$[]) if defined($_[$[]); ++ my $self = shift; + +- return 0 if $lr_n <= 0; +- return $lr_sy / $lr_n; ++ return 0 if $self->{n} <= 0; ++ return $self->{sy} / $self->{n}; + } + +-&lr_init(); ++sub new ++{ ++ my $class = shift; ++ my $self = { ++ (n => undef, ++ sx => undef, ++ sx2 => undef, ++ sxy => undef, ++ sy => undef, ++ sy2 => undef) ++ }; ++ bless $self, $class; ++ init($self); ++ return $self; ++} + + 1; +Index: ntp.pl +=================================================================== +RCS file: /home/windl/NTP/mon-REP/monitoring/ntp.pl,v +retrieving revision 1.1.1.1 +retrieving revision 1.3 +diff -u -r1.1.1.1 -r1.3 +--- ntp.pl 1993/08/24 19:29:34 1.1.1.1 ++++ ntp.pl 1997/10/23 18:19:41 1.3 +@@ -1,4 +1,4 @@ +-#!/local/bin/perl ++#!/usr/bin/perl -w + ;# + ;# ntp.pl,v 3.1 1993/07/06 01:09:09 jbj Exp + ;# +@@ -43,7 +43,7 @@ + ;# N key + ;# N2 checksum + +-;# first bye of packet ++;# first byte of packet + sub pkt_LI { return ($_[$[] >> 6) & 0x3; } + sub pkt_VN { return ($_[$[] >> 3) & 0x7; } + sub pkt_MODE { return ($_[$[] ) & 0x7; } +@@ -223,6 +223,7 @@ + { + &getval(&psw_PSel($_[$[]),*PeerSelection); + } ++ + sub PeerEvent + { + &getval(&psw_PCode($_[$[]),*PeerEvent); +@@ -394,14 +395,14 @@ + $lastseen = 1 if !&pkt_M($r_e_m_op); + if (!defined(%FRAGS)) + { +- (&pkt_M($r_e_m_op) ? " more" : "")."\n"; ++ print((&pkt_M($r_e_m_op) ? " more" : "")."\n"); + $FRAGS{$offset} = $data; + ;# save other info + @FRAGS = ($status,$associd,&pkt_OP($r_e_m_op),$seq,$auth_keyid,$r_e_m_op); + } + else + { +- (&pkt_M($r_e_m_op) ? " more" : "")."\n"; ++ print((&pkt_M($r_e_m_op) ? " more" : "")."\n"); + ;# add frag to previous - combine on the fly + if (defined($FRAGS{$offset})) + { +Index: ntploopstat +=================================================================== +RCS file: /home/windl/NTP/mon-REP/monitoring/ntploopstat,v +retrieving revision 1.1.1.1 +retrieving revision 1.3 +diff -u -r1.1.1.1 -r1.3 +--- ntploopstat 1993/08/24 19:29:32 1.1.1.1 ++++ ntploopstat 1997/11/23 19:07:12 1.3 +@@ -1,4 +1,5 @@ +-#!/local/bin/perl -w--*-perl-*- ++#!/usr/bin/perl -w ++# --*-perl-*- + ;# + ;# ntploopstat,v 3.1 1993/07/06 01:09:11 jbj Exp + ;# +@@ -22,7 +23,7 @@ + ;# (Should have implemented &gettimeofday()..) + ;# + +-$0 =~ s!^.*/([^/]+)$!\1!; # beautify script name ++$0 =~ s!^.*/([^/]+)$!$1!; # beautify script name + + $ntpserver = 'localhost'; # default host to poll + $delay = 60; # default sampling rate +Index: ntploopwatch +=================================================================== +RCS file: /home/windl/NTP/mon-REP/monitoring/ntploopwatch,v +retrieving revision 1.1.1.1 +retrieving revision 1.14 +diff -u -r1.1.1.1 -r1.14 +--- ntploopwatch 1993/10/22 14:28:18 1.1.1.1 ++++ ntploopwatch 1997/12/07 17:06:36 1.14 +@@ -1,4 +1,5 @@ +-#!/local/bin/perl -w--*-perl-*- ++#!/usr/bin/perl -w ++#--*-perl-*- + ;# + ;# ntploopwatch,v 3.1 1993/07/06 01:09:13 jbj Exp + ;# +@@ -9,12 +10,17 @@ + ;# Copyright (c) 1992 + ;# Rainer Pruy Friedrich-Alexander Universitaet Erlangen-Nuernberg + ;# ++;# Copyright (c) 1997 ++;# Ulrich Windl <Ulrich.Windl@rz.uni-regensburg.de> ++;# (Corrections for Perl5 and other fixes) + ;# + ;############################################################# +-$0 =~ s!^.*/([^/]+)$!\1!; ++$0 =~ s!^.*/([^/]+)$!$1!; + $F = ' ' x length($0); + $|=1; + ++use 5.004; # require 5.004 ++ + $ENV{'SHELL'} = '/bin/sh'; # use bourne shell + + undef($config); +@@ -23,17 +29,17 @@ + undef($samples); + undef($StartTime); + undef($EndTime); +-($a,$b) if 0; # keep -w happy ++ + $usage = <<"E-O-P"; + usage: +- to watch statistics permanently: ++ to watch statistics periodically: + $0 [-v[<level>]] [-c <config-file>] [-d <working-dir>] + $F [-h <hostname>] + + to get a single print out specify also +- $F -P[<printer>] [-s<samples>] +- $F [-S <start-time>] [-E <end-time>] +- $F [-Y <MaxOffs>] [-y <MinOffs>] ++ $F -P[[<term_type:>]<printer>] ++ $F [-s<samples>] [-S <start-time>] [-E <end-time>] ++ $F [-Y <MaxOffs>] [-y <MinOffs>] + + If You like long option names, You can use: + -help +@@ -41,21 +47,28 @@ + -d +directory + -h +host + -v +verbose[=<level>] +- -P +printer[=<printer>] ++ -P +printer[=[<term_type>:]<printer>[:<print_cmd>]] + -s +samples[=<samples>] + -S +starttime + -E +endtime + -Y +maxy + -y +miny + ++If <printer> is prefixed with a <term_type> and a colon, the <term_type> ++given is used as terminal fpr gnuplot. + If <printer> contains a '/' (slash character) output is directed to + a file of this name instead of delivered to a printer. ++If suffix :<print_cmd> is given, the suffix is used as the print command, ++and <printer> is ignored. If blanks are needed inside <term_type> or ++<print_cmd>, just use underscores instead. + E-O-P + + ;# add directory to look for lr.pl and timelocal.pl (in front of current list) + unshift(@INC,"/src/NTP/v3/xntp/monitoring"); + + require "lr.pl"; # linear regresion routines ++my $lr_offs = new lr; ++my $lr_freq = new lr; + + $MJD_1970 = 40587; # from ntp.h (V3) + $RecordSize = 48; # usually a line fits into 42 bytes +@@ -171,16 +184,20 @@ + + ;# configuration file + $config = "loopwatch.config" unless defined($config); +-($STATHOST = $config) =~ s!.*loopwatch\.config.([^/\.]*)$!\1! ++($STATHOST = $config) =~ s!.*loopwatch\.config.([^/\.]+)$!$1! + unless defined($STATHOST); +-($STATTAG = $STATHOST) =~ s/^([^\.\*\s]+)\..*$/\1/; ++if ($STATHOST eq $config) { ++ require "hostname.pl"; ++ $STATHOST = hostname(); ++} ++($STATTAG = $STATHOST) =~ s/^([^\.\*\s]+)\..*$/$1/; + + $srcprefix =~ s/\$STATHOST/$STATHOST/g; + + ;# plot command +-@plotcmd=("gnuplot", +- '-title', "Ntp loop filter statistics $STATHOST", +- '-name', "NtpLoopWatch_$STATTAG"); ++@plotcmd=("gnuplot"); ++push(@plotcmd, '-title', "NTP loop filter statistics for $STATHOST", ++ '-name', "NtpLoopWatch_$STATTAG") unless $PrintIt; + $tmpfile = "/tmp/ntpstat.$$"; + + ;# other variables +@@ -211,9 +228,8 @@ + $?>>8,$? & 0xff)) if $?; + exit(1) if $? && defined($Plotpid) && $pid == $Plotpid; + } +-&sigchld if 0; +-$SIG{'CHLD'} = "sigchld"; +-$SIG{'CLD'} = "sigchld"; ++$SIG{'CHLD'} = \&sigchld; ++$SIG{'CLD'} = \&sigchld; + + sub abort + { +@@ -221,8 +237,7 @@ + defined($Plotpid) && kill('TERM',$Plotpid); + die("$0: received signal SIG$_[$[] - exiting\n"); + } +-&abort if 0; # make -w happy - &abort IS used +-$SIG{'INT'} = $SIG{'HUP'} = $SIG{'QUIT'} = $SIG{'TERM'} = $SIG{'PIPE'} = "abort"; ++$SIG{'INT'} = $SIG{'HUP'} = $SIG{'QUIT'} = $SIG{'TERM'} = $SIG{'PIPE'} = \&abort; + + ;# + sub abs +@@ -248,7 +263,7 @@ + open(STDOUT,">&STDERR") || + die("$0: failed to redirect STDOUT of plot command: $!\n"); + +- print STDOUT "plot command running as $$\n"; ++ print STDOUT "plot command has PID $$\n"; + + exec @plotcmd; + die("$0: failed to exec (@plotcmd): $!\n"); +@@ -275,128 +290,83 @@ + s/^([^\#]*[^\#\s]?)\s*\#.*$//; + next if /^\s*$/; + +- s/^\s*([^=\s]*)\s*=\s*(.*\S)\s*$/\1=\2/; ++ s/^\s*([^=\s]*)\s*=\s*(.*\S)\s*$/$1=$2/; + +- ($c,$v) = split(/=/,$_,2); ++ ($c,$v) = ($1, $2); + print "processing \"$c=$v\"\n" if $verbose > 3; +- ($c eq "delay") && ($delay = $v,1) && next; +- ($c eq 'samples') && (!defined($PrintIt) || !defined($samples)) && +- ($samples = $v,1) && next; +- ($c eq 'srcprefix') && (($srcprefix=$v)=~s/\$STATHOST/$STATHOST/g,1) +- && next; +- ($c eq 'showoffs') && +- ($showoffs = ($v eq 'yes' || $v eq 'y' || $v != 0),1) && next; +- ($c eq 'showfreq') && +- ($showfreq = ($v eq 'yes' || $v eq 'y' || $v != 0),1) && next; +- ($c eq 'showcmpl') && +- ($showcmpl = ($v eq 'yes' || $v eq 'y' || $v != 0),1) && next; +- ($c eq 'showoreg') && +- ($showoreg = ($v eq 'yes' || $v eq 'y' || $v != 0),1) && next; +- ($c eq 'showfreg') && +- ($showfreg = ($v eq 'yes' || $v eq 'y' || $v != 0),1) && next; +- +- ($c eq 'exit') && (unlink($tmpfile),die("$0: exit by config request\n")); +- +- ($c eq 'freqbase' || +- $c eq 'cmplscale') && +- do { +- if (! defined($v) || $v eq "" || $v eq 'dynamic') +- { +- eval "undef(\$$c);"; +- } +- else +- { +- eval "\$$c = \$v;"; +- } +- next; +- }; +- ($c eq 'timebase') && +- do { +- if (! defined($v) || $v eq "" || $v eq "dynamic") +- { +- undef($timebase); +- } +- else +- { +- $timebase=&date_time_spec2seconds($v); +- } +- }; +- ($c eq 'EndTime') && +- do { +- next if defined($EndTime) && defined($PrintIt); +- if (! defined($v) || $v eq "" || $v eq "none") +- { +- undef($EndTime); +- } +- else +- { +- $EndTime=&date_time_spec2seconds($v); +- } +- }; +- ($c eq 'StartTime') && +- do { +- next if defined($StartTime) && defined($PrintIt); +- if (! defined($v) || $v eq "" || $v eq "none") +- { +- undef($StartTime); +- } +- else +- { +- $StartTime=&date_time_spec2seconds($v); +- } +- }; +- +- ($c eq 'MaxY') && +- do { +- next if defined($MaxY) && defined($PrintIt); +- if (! defined($v) || $v eq "" || $v eq "none") +- { +- undef($MaxY); +- } +- else +- { +- $MaxY=$v; +- } +- }; +- +- ($c eq 'MinY') && +- do { +- next if defined($MinY) && defined($PrintIt); +- if (! defined($v) || $v eq "" || $v eq "none") +- { +- undef($MinY); +- } +- else +- { +- $MinY=$v; +- } +- }; +- +- ($c eq 'deltaT') && +- do { +- if (!defined($v) || $v eq "") +- { +- undef($deltaT); +- } +- else +- { +- $deltaT = $v; +- } +- next; +- }; +- ($c eq 'verbose') && ! defined($PrintIt) && +- do { +- if (!defined($v) || $v == 0) +- { +- $verbose = 0; +- } +- else +- { +- $verbose = $v; +- } +- next; +- }; +- ;# otherwise: silently ignore unrecognized config line ++ if ($c eq "delay") { ++ $delay = $v; ++ } elsif ($c eq 'samples') { ++ $samples = $v if (!defined($PrintIt) || !defined($samples)); ++ } elsif ($c eq 'srcprefix') { ++ ($srcprefix = $v) =~ s/\$STATHOST/$STATHOST/g; ++ } elsif ($c eq 'showoffs') { ++ $showoffs = ($v =~ /^yes$|^y$|^1$/); ++ } elsif ($c eq 'showfreq') { ++ $showfreq = ($v =~ /^yes$|^y$|^1$/); ++ } elsif ($c eq 'showcmpl') { ++ $showcmpl = ($v =~ /^yes$|^y$|^1$/); ++ } elsif ($c eq 'showoreg') { ++ $showoreg = ($v =~ /^yes$|^y$|^1$/); ++ } elsif ($c eq 'showfreg') { ++ $showfreg = ($v =~ /^yes$|^y$|^1$/); ++ } elsif ($c eq 'exit') { ++ unlink($tmpfile); die("$0: exit by config request\n"); ++ } elsif ($c eq 'freqbase' || $c eq 'cmplscale') { ++ if (! defined($v) || $v eq "" || $v eq 'dynamic') { ++ eval "undef(\$$c);"; ++ } else { ++ eval "\$$c = \$v;"; ++ } ++ } elsif ($c eq 'timebase') { ++ if (! defined($v) || $v eq "" || $v eq "dynamic") { ++ undef($timebase); ++ } else { ++ $timebase=&date_time_spec2seconds($v); ++ } ++ } elsif ($c eq 'EndTime') { ++ next if defined($EndTime) && defined($PrintIt); ++ if (! defined($v) || $v eq "" || $v eq "none") { ++ undef($EndTime); ++ } else { ++ $EndTime=&date_time_spec2seconds($v); ++ } ++ } elsif ($c eq 'StartTime') { ++ next if defined($StartTime) && defined($PrintIt); ++ if (! defined($v) || $v eq "" || $v eq "none") { ++ undef($StartTime); ++ } else { ++ $StartTime=&date_time_spec2seconds($v); ++ } ++ } elsif ($c eq 'MaxY') { ++ next if defined($MaxY) && defined($PrintIt); ++ if (! defined($v) || $v eq "" || $v eq "none") { ++ undef($MaxY); ++ } else { ++ $MaxY=$v; ++ } ++ } elsif ($c eq 'MinY') { ++ next if defined($MinY) && defined($PrintIt); ++ if (! defined($v) || $v eq "" || $v eq "none") { ++ undef($MinY); ++ } else { ++ $MinY=$v; ++ } ++ } elsif ($c eq 'deltaT') { ++ if (!defined($v) || $v eq "") { ++ undef($deltaT); ++ } else { ++ $deltaT = $v; ++ } ++ } elsif ($c eq 'verbose' && ! defined($PrintIt)) { ++ if (!defined($v) || $v == 0) { ++ $verbose = 0; ++ } else { ++ $verbose = $v; ++ } ++ } else { ++ ;# otherwise: silently ignore unrecognized config line ++ } + } + close(CF); + ;# set show defaults when nothing selected +@@ -413,16 +383,16 @@ + print " showcmpl\t= $showcmpl\n"; + print " showoreg\t= $showoreg\n"; + print " showfreg\t= $showfreg\n"; +- printf " timebase\t= %s",defined($timebase)?&ctime($timebase):"dynamic\n"; +- printf " freqbase\t= %s\n",defined($freqbase) ?"$freqbase":"dynamic"; +- printf " cmplscale\t= %s\n",defined($cmplscale)?"$cmplscale":"dynamic"; +- printf " StartTime\t= %s",defined($StartTime)?&ctime($StartTime):"none\n"; +- printf " EndTime\t= %s", defined($EndTime) ? &ctime($EndTime):"none\n"; +- printf " MaxY\t= %s",defined($MaxY)? $MaxY :"none\n"; +- printf " MinY\t= %s",defined($MinY)? $MinY :"none\n"; ++ printf " timebase\t= %s", defined($timebase) ? &ctime($timebase) : "dynamic\n"; ++ printf " freqbase\t= %s\n", defined($freqbase) ? "$freqbase" : "dynamic"; ++ printf " cmplscale\t= %s\n", defined($cmplscale) ? "$cmplscale" : "dynamic"; ++ printf " StartTime\t= %s", defined($StartTime) ? &ctime($StartTime) : "none\n"; ++ printf " EndTime\t= %s", defined($EndTime) ? &ctime($EndTime):"none\n"; ++ printf " MaxY\t= %s", defined($MaxY) ? $MaxY : "none\n"; ++ printf " MinY\t= %s", defined($MinY) ? $MinY : "none\n"; + print " verbose\t= $verbose\n"; + } +-print "configuration file read\n" if $verbose > 2; ++ print "configuration file read\n" if $verbose > 2; + } + + sub make_doplot +@@ -443,10 +413,9 @@ + ;# number of integral seconds to get at least 12 tic marks on x axis + $t = int(($maxtime - $mintime) / 12 + 0.5); + $t = 1 unless $t; # prevent $t to be zero +- foreach $i (30, +- 60,5*60,15*60,30*60, +- 60*60,2*60*60,6*60*60,12*60*60, +- 24*60*60,48*60*60) ++ foreach $i (30, 60, ++ 5*60, 10*60, 15*60, 30*60, 60*60, ++ 2*60*60, 6*60*60, 12*60*60, 24*60*60, 48*60*60) + { + last if $t < $i; + $t = $t - ($t % $i); +@@ -458,31 +427,30 @@ + $i <= $maxtime + $t; + $i += $t, $c=",") + { ++ my ($sec, $min, $hour, $mday, $mon, $year, $wday) = localtime($i); ++ + $s .= $c; + ((int($i / $t) % 2) && + ($s .= sprintf("'' %lf",($i - $LastTimeBase)/3600))) || + (($t <= 60) && + ($s .= sprintf("'%d:%02d:%02d' %lf", +- (localtime($i))[$[+2,$[+1,$[+0], +- ($i - $LastTimeBase)/3600))) ++ $hour, $min, $sec, ($i - $LastTimeBase) / 3600))) + || (($t <= 2*60*60) && + ($s .= sprintf("'%d:%02d' %lf", +- (localtime($i))[$[+2,$[+1], +- ($i - $LastTimeBase)/3600))) ++ $hour, $min, ($i - $LastTimeBase) / 3600))) + || (($t <= 12*60*60) && + ($s .= sprintf("'%s %d:00' %lf", +- $Day[(localtime($i))[$[+6]], +- (localtime($i))[$[+2], +- ($i - $LastTimeBase)/3600))) ++ $Day[$wday], $hour, ++ ($i - $LastTimeBase) / 3600))) + || ($s .= sprintf("'%d.%d-%d:00' %lf", +- (localtime($i))[$[+3,$[+4,$[+2], +- ($i - $LastTimeBase)/3600)); ++ $mday, $mon + 1, $hour, ++ ($i - $LastTimeBase) / 3600)); + } + $doplot .= "set xtics ($s)\n"; + + chop($xts = &ctime($mintime)); + chop($xte = &ctime($maxtime)); +- $doplot .= "set xlabel 'Start: $xts -- Time Scale -- End: $xte'\n"; ++ $doplot .= "set xlabel 'Start: $xts -- Time Scale -- End: $xte'\n"; + $doplot .= "set yrange [" ; + $doplot .= defined($MinY) ? sprintf("%lf", $MinY) : $miny; + $doplot .= ':'; +@@ -518,22 +486,22 @@ + $c = ","); + $showoreg && $showoffs && + ($doplot .= sprintf($regfmt, $c, +- &lr_B('offs'),&lr_A('offs'), +- "offset ", +- &lr_B('offs'), +- ((&lr_A('offs')) < 0 ? '-' : '+'), +- &abs(&lr_A('offs')), &lr_r('offs'), ++ $lr_offs->B(),$lr_offs->A(), ++ "offset", ++ $lr_offs->B(), ++ (($lr_offs->A()) < 0 ? '-' : '+'), ++ &abs($lr_offs->A()), $lr_offs->r(), + "[ms]"), + $c = ","); + $showfreg && $showfreq && + ($doplot .= sprintf($regfmt, $c, +- &lr_B('freq') * $FreqScale, +- (&lr_A('freq') + $minfreq) * $FreqScale - $LastFreqBase, ++ $lr_freq->B() * $FreqScale, ++ ($lr_freq->A() + $minfreq) * $FreqScale - $LastFreqBase, + "frequency", +- &lr_B('freq') * $FreqScale, +- ((&lr_A('freq') + $minfreq) * $FreqScale - $LastFreqBase) < 0 ? '-' : '+', +- &abs((&lr_A('freq') + $minfreq) * $FreqScale - $LastFreqBase), +- &lr_r('freq'), ++ $lr_freq->B() * $FreqScale, ++ (($lr_freq->A() + $minfreq) * $FreqScale - $LastFreqBase) < 0 ? '-' : '+', ++ &abs(($lr_freq->A() + $minfreq) * $FreqScale - $LastFreqBase), ++ $lr_freq->r(), + "[${FreqScaleInv}ppm]"), + $c = ","); + $doplot .= "\n"; +@@ -583,7 +551,7 @@ + $#loffset = $[ - 1; + $#filekey = $[ - 1; + print "memory allocation ready\n" if $verbose > 2; +- sleep(3) if $verbose > 1; ++ sleep(3) if $verbose > 2; + + if (index($in,"/") < $[) + { +@@ -606,7 +574,6 @@ + ;# rescan directory on changes + $Lsdir = $sdir; + $Ltime = (stat($sdir))[$[+9]; +- </X{> if 0; # dummy line - calm down my formatter + local(@newfiles) = < ${in}*[0-9] >; + local($st_dev,$st_ino,$st_mtime,$st_size,$name,$key,$modified); + +@@ -626,7 +593,7 @@ + $F_key{$name} = $key; + $modified++; + } +- if (!defined($F_name{$key}) || $F_name{$key} != $name) ++ if (!defined($F_name{$key}) || $F_name{$key} ne $name) + { + $F_name{$key} = $name; + $modified++; +@@ -643,9 +610,9 @@ + } + if ($modified) + { +- print "new data \"$name\" key: $key;\n" if $verbose > 1; ++ print "new data \"$name\" key: $key;\n" if $verbose > 2; + print " size: $st_size; mtime: $st_mtime;\n" +- if $verbose > 1; ++ if $verbose > 2; + $F_last{$key} = $F_first{$key} = $st_mtime; + $F_first{$key}--; # prevent zero divide later on + ;# now compute derivated attributes +@@ -692,7 +659,7 @@ + } + close(IN); + print(" first: ",$F_first{$key}, +- " last: ",$F_last{$key},"\n") if $verbose > 1; ++ " last: ",$F_last{$key},"\n") if $verbose > 2; + } + } + ;# now reclaim memory used for files no longer referenced ... +@@ -739,7 +706,7 @@ + } + ;# create list sorted by time + @F_files = sort {$F_first{$a} <=> $F_first{$b}; } keys(%F_name); +- if ($verbose > 1) ++ if ($verbose > 2) + { + print "Resulting file list:\n"; + foreach (@F_files) +@@ -797,7 +764,7 @@ + print "guess start according to StartTime ($StartTime)\n" + if $verbose > 3; + +- if ($fpos[$[] eq 'start') ++ if (defined $fpos[$[] && $fpos[$[] eq 'start') + { + if (grep($_ eq $fpos[$[+1],@f)) + { +@@ -1001,9 +968,9 @@ + $t += $F[$[+1]; # add seconds + fraction + + ;# multiply offset by 1000 to get ms - try to avoid float op +- (($F[$[+2] =~ s/(\d*)\.(\d{3})(\d*)/\1\2.\3/) && ++ (($F[$[+2] =~ s/(\d*)\.(\d{3})(\d*)/$1$2.$3/) && + $F[$[+2] =~ s/0+([\d\.])/($1 eq '.') ? '0.' : $1/e) # strip leading zeros +- || $F[$[+2] *= 1000; ++ || ($F[$[+2] *= 1000); + + + ;# skip samples out of specified time range +@@ -1036,8 +1003,8 @@ + print "input scanned ($l lines/",scalar(@time)," samples)\n" + if $verbose > 1; + +- &lr_init('offs'); +- &lr_init('freq'); ++ $lr_offs->init(); ++ $lr_freq->init(); + + if (@time) + { +@@ -1047,17 +1014,17 @@ + local($freqbase) unless defined($freqbase); + local($cmplscale) unless defined($cmplscale); + +- undef($mintime,$maxtime,$minoffs,$maxoffs, +- $minfreq,$maxfreq,$mincmpl,$maxcmpl, +- $miny,$maxy); ++ undef $mintime; undef $maxtime; undef $minoffs; undef $maxoffs; ++ undef $minfreq; undef $maxfreq; undef $mincmpl; undef $maxcmpl; ++ undef $miny; undef $maxy; + + print "computing ranges\n" if $verbose > 2; + + $LastCnt = @time; + + ;# @time is in ascending order (;-) +- $mintime = @time[$[]; +- $maxtime = @time[$#time]; ++ $mintime = $time[$[]; ++ $maxtime = $time[$#time]; + unless (defined($timebase)) + { + local($time,@X) = (time); +@@ -1081,24 +1048,24 @@ + ;# (otherwise a (shift(@a1),shift(a2)) would do), + ;# I dont like to make copies of these arrays as they may be huge + $i = $[; +- &lr_sample(($time[$i]-$timebase)/3600,$offs[$ + |