summaryrefslogtreecommitdiffstats
path: root/contrib/ntp/scripts/stats.ulrich.patches
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/ntp/scripts/stats.ulrich.patches')
-rw-r--r--contrib/ntp/scripts/stats.ulrich.patches1003
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[$
+
OpenPOWER on IntegriCloud