From 4d8e254ea4c77a348c96c24fdbc265590c75fd5c Mon Sep 17 00:00:00 2001 From: Dirk Koopman Date: Wed, 17 Nov 2021 11:41:16 +0000 Subject: [PATCH] fix spot cache clean, some detail rbn changes --- perl/RBN.pm | 14 +++++++++++++- perl/Spot.pm | 28 ++++++++++++++++++---------- 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/perl/RBN.pm b/perl/RBN.pm index 8c2fbaad..0cf5c414 100644 --- a/perl/RBN.pm +++ b/perl/RBN.pm @@ -251,8 +251,20 @@ sub normal return; } - $origin =~ s/\-(?:\d{1,2}\-)?\#$//; # get rid of all the crap we aren't interested in + # remove all extraneous crap from the origin - just leave the base callsign + $origin =~ s|^(?:[\w\d]+/)?([\w\d]+).*$|$1|; + # is this callsign in badspotter list? + if ($DXProt::badspotter->in($origin) || $DXProt::badnode->in($origin)) { + dbg("RBN: ERROR $origin is a bad spotter/node, dumped"); + return; + } + + # is the qrg valid + unless ($qrg =~ /^\d+\.\d{1,2}$/) { + dbg("RBN: ERROR qrg $qrg from $origin invalid, dumped"); + return; + } $sort ||= ''; $tx ||= ''; diff --git a/perl/Spot.pm b/perl/Spot.pm index 27b82b38..d88a5f7f 100644 --- a/perl/Spot.pm +++ b/perl/Spot.pm @@ -186,7 +186,7 @@ sub init } # initialise the cache if required - if ($spotcachedays) { + if ($spotcachedays > 0) { my $t0 = [gettimeofday]; $spotcachedays = 2 if $spotcachedays < 2; dbg "Spot::init - reading in $spotcachedays days of spots into cache"; @@ -260,18 +260,11 @@ sub add { my $buf = join('^', @_); $fp->writeunix($_[2], $buf); - if ($spotcachedays) { + if ($spotcachedays > 0) { my $now = Julian::Day->new($_[2]); my $day = _cachek($now); my $r = (exists $spotcache{$day}) ? $spotcache{$day} : ($spotcache{$day} = []); unshift @$r, \@_; - - # remove old days - while (keys %spotcache > $spotcachedays+1) { - while (sort keys %spotcache > $spotcachedays+1) { - delete $spotcache{$_}; - } - } } if ($main::dbh) { $main::dbh->begin_work; @@ -376,7 +369,7 @@ sub search my $cachekey = _cachek($this); my $rec = 0; - if ($spotcachedays && $spotcache{$cachekey}) { + if ($spotcachedays > 0 && $spotcache{$cachekey}) { foreach my $r (@{$spotcache{$cachekey}}) { ++$rec; if ($dofilter && $dxchan && $dxchan->{spotsfilter}) { @@ -584,12 +577,27 @@ sub daily { my $date = Julian::Day->new($main::systime)->sub(1); genstats($date) unless checkstats($date); + clean_cache(); } sub _cachek { return "$_[0]->[0]|$_[0]->[1]"; } + +sub clean_cache +{ + if ($spotcachedays > 0) { + my $now = Julian::Day->new($main::systime); + for (my $i = $spotcachedays; $i < $spotcachedays + 5; ++$i ) { + my $k = _cachek($now->sub($i)); + if (exists $spotcache{$k}) { + dbg("Spot::spotcache deleting day $k, more than $spotcachedays days old"); + delete $spotcache{$k}; + } + } + } +} 1; -- 2.43.0