X-Git-Url: http://dxcluster.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FRBN.pm;h=57a0a15ec862baf19624e3cde81567422711452f;hb=26a25e640fb1b9c7806988cc949b557116c278bd;hp=6ec93569b01c0bd837217803c2abf553b2d0fa29;hpb=bd8b8aa6d37a7dde70d093c5552c29f519ac9613;p=spider.git diff --git a/perl/RBN.pm b/perl/RBN.pm index 6ec93569..57a0a15e 100644 --- a/perl/RBN.pm +++ b/perl/RBN.pm @@ -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