X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FSpot.pm;h=74b3f77319decf08c9f004a471d7cc34b46161e4;hb=c2562ed066d4ffd0714ef41eb5046e19fb5090ea;hp=b3eff00c280173abee504a4de3e765fd98c1d3bf;hpb=8bb4b460148fbc97739e8645f627cb9ab049d512;p=spider.git diff --git a/perl/Spot.pm b/perl/Spot.pm index b3eff00c..74b3f773 100644 --- a/perl/Spot.pm +++ b/perl/Spot.pm @@ -49,12 +49,21 @@ $filterdef = bless ([ ['by_zone', 'nz', 11], ['call_state', 'ns', 12], ['by_state', 'ns', 13], - ['channel', 'c', 14], - ['rbn', 'a', 4, 0, \&filterrbnspot], - ], 'Filter::Cmd'); + ['ip', 'c', 14], +# ['channel', 'c', 15], +# ['rbn', 'a', 4, 0, \&filterrbnspot], + ], 'Filter::Cmd'); $totalspots = $hfspots = $vhfspots = 0; $use_db_for_search = 0; +our $usetac = 0; +our $readback; + +if ($usetac) { + $readback = `which tac`; + chomp $readback; +} + # create a Spot Object sub new { @@ -231,7 +240,7 @@ sub add # $f5 = spotted dxcc country # $f6 = spotter dxcc country # $f7 = origin -# +# $f8 = ip address # # In addition you can specify a range of days, this means that it will start searching # from days less than today to days less than today @@ -301,28 +310,46 @@ sub search } my \$c; my \$ref; - for (\$c = \$#spots; \$c >= 0; \$c--) { - \$ref = \$spots[\$c]; - if ($expr) { - \$count++; - next if \$count < \$from; # wait until from - push(\@out, \$ref); - last if \$count >= \$to; # stop after to - } - } + if (\$readback) { + foreach \$ref (\@spots) { + if ($expr) { + \$count++; + next if \$count < $from; # wait until from + push(\@out, \$ref); + last if \$count >= $to; # stop after to + } + } + } else { + for (\$c = \$#spots; \$c >= 0; \$c--) { + \$ref = \$spots[\$c]; + if ($expr) { + \$count++; + next if \$count < $from; # wait until from + push(\@out, \$ref); + last if \$count >= $to; # stop after to + } + } + } ); + + dbg("Spot eval: $eval") if isdbg('searcheval'); - - $fp->close; # close any open files - + my $fh; + my $now = $fromdate; for ($i = $count = 0; $i < $maxdays; ++$i) { # look thru $maxdays worth of files only - my $now = $fromdate->sub($i); # but you can pick which $maxdays worth - last if $now->cmp($todate) <= 0; - - my @spots = (); - my $fh = $fp->open($now); # get the next file + my @spots; + last if $now->cmp($todate) <= 0; + + if ($readback) { + my $fn = $fp->fn($now->sub($i)); + dbg("search using tac fn: $fn $i") if isdbg('search'); + $fh = IO::File->new("$readback $fn |"); + } else { + $fh = $fp->open($now->sub($i)); # get the next file + dbg("search fn: $fp->{fn} $i") if isdbg('search'); + } if ($fh) { my $in; eval $eval; # do the search on this file