changed ping regime to be a rolling list of up to ten
authordjk <djk>
Thu, 18 Nov 1999 23:22:10 +0000 (23:22 +0000)
committerdjk <djk>
Thu, 18 Nov 1999 23:22:10 +0000 (23:22 +0000)
an ak1a disconnect will always send a PC39

perl/DXChannel.pm
perl/DXProt.pm

index dce4fb5002bb1d277b76527e9e3e81749565cf1a..9f7b8d180fefec8ce6f9184b0bbc122b5fc9bbc6 100644 (file)
@@ -81,8 +81,7 @@ use vars qw(%channels %valid);
                  pingint => '9,Ping Interval ',
                  nopings => '9,Ping Obs Count',
                  lastping => '9,Ping last sent,atime',
-          pingrec => '9,Pings no rec',
-                 pingtime => '9,Ping totaltime',
+                 pingtime => '9,Ping totaltime,parray',
                  pingave => '0,Ping ave time',
                 );
 
index 9888380adcad3fe9d1e8fb7a86dd4019e90327df..67f64b79064616092577d3cbabab6629a26cc7ca 100644 (file)
@@ -136,8 +136,7 @@ sub start
        $self->pingint($user->pingint || 3*60);
        $self->nopings(3);
        $self->lastping($main::systime);
-       $self->pingtime(0);
-       $self->pingrec(0);
+       $self->pingtime([ ]);
 
        Log('DXProt', "$call connected");
 }
@@ -711,14 +710,18 @@ sub normal
                                                        my $t = tv_interval($r->{t}, [ gettimeofday ]);
                                                        if ($dxchan->is_user) {
                                                                my $s = sprintf "%.2f", $t; 
-                                                               my $ave = $tochan->pingave if $tochan;
+                                                               my $ave = sprintf "%.2f", $tochan ? ($tochan->pingave || $t) : $t;
                                                                $dxchan->send($dxchan->msg('pingi', $field[2], $s, $ave))
                                                        } elsif ($dxchan->is_ak1a) {
                                                                if ($tochan) {
                                                                        $tochan->nopings(3); # pump up the timer
-                                                                       $tochan->{pingtime} += $t;
-                                                                       $tochan->{pingrec} += 1;
-                                                                       $tochan->{pingave} = $tochan->{pingtime} / $tochan->{pingrec};
+                                                                       push @{$tochan->pingtime}, $t;
+                                                                       shift @{$tochan->pingtime} if @{$tochan->pingtime} > 10;
+                                                                       my $st;
+                                                                       for (@{$tochan->pingtime}) {
+                                                                               $st += $_;
+                                                                       }
+                                                                       $tochan->{pingave} = $st / @{$tochan->pingtime};
                                                                }
                                                        } 
                                                }
@@ -806,6 +809,8 @@ sub finish
        my $call = $self->call;
        my $ref = DXCluster->get_exact($call);
        
+       $self->send_now("D", DXProt::pc39($main::mycall, $self->msg('disc1', "System Op")));
+
        # unbusy and stop and outgoing mail
        my $mref = DXMsg::get_busy($call);
        $mref->stop_msg($call) if $mref;