make the RESPOTTING work again
[spider.git] / perl / RBN.pm
index 6ec93569b01c0bd837217803c2abf553b2d0fa29..57a0a15ec862baf19624e3cde81567422711452f 100644 (file)
@@ -104,6 +104,7 @@ our $maxdeviants = 5;                       # the number of deviant QRGs to record for skimmer recor
 sub init
 {
        $json = DXJSON->new;
+       $json->canonical(0);
        if (check_cache()) {
                $noinrush = 1;
        } else {
@@ -338,7 +339,7 @@ sub normal
                my $respot = 0;
                if ($cand && ref $cand) {
                        if (@$cand <= CData) {
-                               unless ($self->{minspottime} > 0 && $now - $cand->[CTime] >= $self->{minspottime}) {
+                               if ($self->{minspottime} > 0 && $now - $cand->[CTime] < $self->{minspottime}) {
                                        dbg("RBN: key: '$sp' call: $call qrg: $qrg DUPE \@ ". atime(int $cand->[CTime])) if $dbgrbn;
                                        return;
                                }
@@ -352,10 +353,8 @@ sub normal
                } elsif ($cand) {
                        dbg("RBN: key '$sp' = '$cand' not ref");
                        return;
-               }
-
-               # here we either have an existing spot record buildup on the go, or we need to create the first one
-               unless ($cand) {
+               } else {
+                       # new spot / frequency
                        $spots->{$sp} = $cand = [$now, 0];
                        dbg("RBN: key: '$sp' call: $call qrg: $qrg NEW" . ($respot ? ' RESPOT' : '')) if $dbgrbn;
                }
@@ -385,7 +384,7 @@ sub normal
 
                ++$self->{queue}->{$sp};# unless @$cand>= CData; # queue the KEY (not the record)
 
-               dbg("RBN: key: '$sp' ADD RECORD call: $call qrg: $qrg origin: $origin") if $dbgrbn;
+               dbg("RBN: key: '$sp' ADD RECORD call: $call qrg: $qrg origin: $origin respot: $respot") if $dbgrbn;
 
                push @$cand, $r;
 
@@ -572,6 +571,8 @@ sub process
                                # we have a candidate, create qualitee value(s);
                                unless (@$cand > CData) {
                                        dbg "RBN: QUEUE key '$sp' MISSING RECORDS, IGNORED" . dd($cand) if isdbg 'rbnqueue';
+                                       delete $spots->{$sp}; # don't remember it either - this means that a spot HAS to come in with sufficient spotters to be processed.
+                                       delete $dxchan->{queue}->{$sp};
                                        next;
                                }
                                dbg "RBN: QUEUE PROCESSING key: '$sp' $now >= $cand->[CTime]" if isdbg 'rbnqueue'; 
@@ -706,7 +707,6 @@ sub process
                                # clear out the data and make this now just "spotted", but no further action required until respot time
                                dbg "RBN: QUEUE key '$sp' cleared" if isdbg 'rbn';
 
-                               delete $spots->{$sp};
                                delete $dxchan->{queue}->{$sp};
 
                                # calculate new sp (which will be 70% likely the same as the old one)
@@ -716,7 +716,10 @@ sub process
                                my $nsp = "$r->[RCall]|$nqrg";
                                if ($sp ne $nsp) {
                                        dbg("RBN:SKIM CHANGE KEY sp '$sp' -> '$nsp' for storage") if $rbnskim;
+                                       delete $spots->{$sp};
                                        $spots->{$nsp} = [$now, $cand->[CQual]];
+                               } else {
+                                       $spots->{$sp} = [$now, $cand->[CQual]];
                                }
                        }
                        else {
@@ -793,7 +796,7 @@ sub finish
 sub write_cache
 {
        my $ta = [ gettimeofday ];
-       $json->indent(1) if isdbg 'rbncache';
+       $json->indent(1)->canonical(1) if isdbg 'rbncache';
        my $s = eval {$json->encode($spots)};
        if ($s) {
                my $fh = IO::File->new(">$cachefn") or confess("writing $cachefn $!");
@@ -801,10 +804,12 @@ sub write_cache
                $fh->close;
        } else {
                dbg("RBN:Write_cache error '$@'");
+               return;
        }
-       $json->indent(0);
+       $json->indent(0)->canonical(0);
        my $diff = _diffms($ta);
-       dbg("RBN:WRITE_CACHE time to write: $diff mS");
+       my $size = sprintf('%.3fKB', (length($s) / 1000));
+       dbg("RBN:WRITE_CACHE size: $size time to write: $diff mS");
 }
 
 sub check_cache