Merge branch 'mojo' of ssh://server/scm/spider into mojo
authorDirk Koopman <djk@tobit.co.uk>
Wed, 15 Feb 2017 22:50:34 +0000 (22:50 +0000)
committerDirk Koopman <djk@tobit.co.uk>
Wed, 15 Feb 2017 22:50:34 +0000 (22:50 +0000)
Conflicts:
Changes
perl/cluster.pl

Changes
UPGRADE.mojo
perl/cluster.pl
perl/rbn.pl

diff --git a/Changes b/Changes
index 13fa2e16b734fefd460299963369ab26175db6be..ac17a93fc41780132741c246af680446dbabd276 100644 (file)
--- a/Changes
+++ b/Changes
@@ -1,3 +1,6 @@
+15Feb17=======================================================================
+1. Update UPGRADE.mojo a bit
+2. Add local::lib so that it can be used for non-root installations.
 09Jan17=======================================================================
 1. Fix mojo branch clean install issues (failing to find $main::data et al)
 02Jan17=======================================================================
index 378b943f51dd75cf3322d6bb2bf98470f85a29e0..c6d3d3390f658e0b6c66895bd67d7735579c54ff 100644 (file)
@@ -11,7 +11,7 @@ the node. I am also using a modern, event driven, web socket "manager" called Mo
 which is considerably more efficient than what went before (but is not necessary for small
 nodes). There are some 200-400 user nodes out there that will definitely see the difference
 in terms of both CPU usage and general responsiveness. Using Mojolicious also brings the
-tantalising possibility of grafting on a web frontend, as it where, to the "side" of a
+tantalising possibility of grafting on a web frontend, as it were, to the "side" of a
 DXSpider node. But serious work on this won't start until we have a stable base to work
 on. Apart from anything else there will, almost certainly, need to be some internal data
 structure reorganisation before a decent web frontend could be constructed.
@@ -42,6 +42,8 @@ Prerequisites:
 Install cpamminus:
 
        sudo apt-get install cpanminus
+or
+    wget -O - https://cpanmin.us | perl - --sudo App::cpanminus
 or
        sudo apt-get install curl
        curl -L https://cpanmin.us | perl - --sudo App::cpanminus
index 4aa81c62e939b52467dbbe1a4bb24de4b5a69c02..054a22ca718dbde98003e13f4824ff76b738ceca 100755 (executable)
@@ -21,6 +21,12 @@ use vars qw($root $is_win $systime);
 BEGIN {
        umask 002;
 
+       # take into account any local::lib that might be present
+       eval {
+               require local::lib;
+       };
+       import local::lib unless ($@);
+
        # root of directory tree for this system
        $root = "/spider";
        $root = $ENV{'DXSPIDER_ROOT'} if $ENV{'DXSPIDER_ROOT'};
@@ -69,7 +75,7 @@ use DXVars;
 use SysVar;
 
 use strict;
-                       
+
 use Mojo::IOLoop;
 
 use Msg;
index eb2c743ecd9f2ff46348a96939532975451a2162..8438b8e6549b3f3087756df762b28c03cc614542 100755 (executable)
@@ -25,29 +25,34 @@ my $wantcw = 1;
 my $wantrtty = 1;
 my $wantpsk = 1;
 my $wantbeacon = 1;
+my $wantdx = 1;
+my $wantraw = 0;
 my $showrbn;
 my $help = 0;
 my $man = 0;
 my $mycall;
 
+#Getopt::Long::Configure( qw(auto_abbrev) );
 GetOptions('host=s' => \$host,
                   'port=i' => \$port,
                   'debug' => \$dbg,
                   'rbn' => \$showrbn,
                   'stats' => \$showstats,
-                  'repeattime=i' => sub { $minspottime = $_[1] * 60 },
+                  'raw' => \$wantraw,
+                  'repeattime|rt=i' => sub { $minspottime = $_[1] * 60 },
                   'want=s' => sub {
                           my ($name, $value) = @_;
-                          $wantcw = $wantrtty = $wantpsk = $wantbeacon = 0;
+                          $wantcw = $wantrtty = $wantpsk = $wantbeacon = $wantdx = 0;
                           for (split /[:,\|]/, $value) {
                                   ++$wantcw if /^cw$/i;
                                   ++$wantpsk if /^psk$/i;
                                   ++$wantrtty if /^rtty$/i;
                                   ++$wantbeacon if /^beacon$/i;
+                                  ++$wantdx if /^dx$/i;
                           }
                   },
                   'help|?' => \$help,
-                  man => \$man,
+                  'man' => \$man,
                   '<>' => sub { $mycall = shift },
                  ) or pod2usage(2);
 
@@ -58,7 +63,7 @@ pod2usage(-exitval => 0, -verbose => 2) if $man;
 
 
 for ($attempts = 1; $attempts <= 5; ++$attempts) {
-       say "admin,connecting to $host $port.. (attempt $attempts) " if $dbg;
+       say "ADMIN,connecting to $host $port.. (attempt $attempts) " if $dbg;
        $sock = IO::Socket::IP->new(
                                                                PeerHost => $host,
                                                                PeerPort => $port,
@@ -67,10 +72,10 @@ for ($attempts = 1; $attempts <= 5; ++$attempts) {
        last if $sock;
 }
 
-die "admin,Cannot connect to $host:$port after 5 attempts $!" unless $sock;
-say "admin,connected" if $dbg;
-print $sock "$mycall\r\n";
-say "admin,call sent" if $dbg;
+die "ADMIN,Cannot connect to $host:$port after 5 attempts $!" unless $sock;
+say "ADMIN,connected" if $dbg;
+#print $sock "$mycall\r\n";
+#say "ADMIN,call $mycall sent" if $dbg;
 
 my %d;
 my %spot;
@@ -85,8 +90,15 @@ while (<$sock>) {
        my $tim = time;
 
        # parse line
-       my (undef, undef, $origin, $qrg, $call, $mode, $s, $m, $spd, $u, $sort, $t) = split /[:\s]+/;
-       if ($t) {
+       say "RAW,$_" if $wantraw;
+
+       if (/call:/) {
+print $sock "$mycall\r\n";
+say "ADMIN,call $mycall sent" if $dbg;
+       }
+
+       my (undef, undef, $origin, $qrg, $call, $mode, $s, $m, $spd, $u, $sort, $t, $tx) = split /[:\s]+/;
+       if ($t || $tx) {
 
                # We have an RBN data line, dedupe it very simply on time, ignore QRG completely.
                # This works because the skimmers are NTP controlled (or should be) and will receive
@@ -95,11 +107,21 @@ while (<$sock>) {
                ++$noraw;
                next if $d{$p};
 
+               # fix up times for things like 'NXDXF B' etc
+               if ($tx && $t != /^\d{4}Z$/) {
+                       if ($tx =~ /^\d{4}Z$/) {
+                               $t = $tx;
+                       } else {
+                               say "ERR,$_";
+                               next;
+                       }
+               }
+
                # new RBN input
                $d{$p} = $tim;
                ++$norbn;
                $qrg = sprintf('%.1f', nearest(.1, $qrg));     # to nearest 100Hz (to catch the odd multiple decpl QRG [eg '7002.07']).
-               say join(',', "RBN", $origin, $qrg, $call, $mode, $s, $m, $spd, $u, $sort, $t) if $dbg || $showrbn;
+               say join(',', "RBN", $origin, $qrg, $call, $mode, $s, $m, $spd, $u, $sort, $t) if !$wantraw && ($dbg || $showrbn);
 
                # Determine whether to "SPOT" it based on whether we have not seen it before (near this QRG) or,
                # if we have, has it been a "while" since the last time we spotted it? If it has been spotted
@@ -117,6 +139,7 @@ while (<$sock>) {
                                goto periodic if !$wantcw  && $mode =~ /^CW/;
                                goto periodic if !$wantrtty && $mode =~ /^RTTY/;
                                goto periodic if !$wantpsk && $mode =~ /^PSK/;
+                               goto periodic if !$wantdx && $mode =~ /^DX/;
                        }
 
                        ++$nospot;
@@ -125,7 +148,7 @@ while (<$sock>) {
                        $spot{$sp} = $tim;
                }
        } else {
-               say "data,$_" if $dbg;
+               say "DATA,$_" if $dbg && !$wantraw;
        }
 
  periodic:
@@ -142,7 +165,7 @@ while (<$sock>) {
                                ++$count;
                        }
                }
-               say "admin,rbn cache: $removed removed $count remain" if $dbg;
+               say "ADMIN,rbn cache: $removed removed $count remain" if $dbg;
                $count = $removed = 0;
                while (my ($k,$v) = each %spot) {
                        if ($tim-$v > $minspottime*2) {
@@ -152,7 +175,7 @@ while (<$sock>) {
                                ++$count;
                        }
                }
-               say "admin,spot cache: $removed removed $count remain" if $dbg;
+               say "ADMIN,spot cache: $removed removed $count remain" if $dbg;
 
                say join(',', "STAT", $noraw, $norbn, $nospot) if $showstats;
                $noraw = $norbn = $nospot = 0;
@@ -195,9 +218,9 @@ As default, this program will connect to C<telnet.reversebeacon.net>. Use this a
 
 As default, this program will connect to port 7000. Use this argument to change that to some other port.
 
-=item B<-want>=cw,rtty,psk,beacon
+=item B<-want>=cw,rtty,psk,beacon,dx
 
-The program will print all spots in all classes [cw, rtty, psk, beacon]. You can choose one or more of
+The program will print all spots in all classes in the 'mode/calling' column [cw, rtty, psk, beacon, dx]. You can choose one or more of
 these classes if you want specific types of spots.
 
 =item B<-stats>
@@ -215,6 +238,10 @@ but with a RESPOT tag instead. Set this argument to 0 (or less) if you do not wa
 
 Show the de-duplicated RBN lines as they come in.
 
+=item B<-raw>
+
+Show the raw RBN lines as they come in.
+
 =back
 
 =head1 DESCRIPTION
@@ -234,5 +261,17 @@ Like this:
   SPOT,SK3W-#,3600.0,OK0EN,CW,13,dB,11,WPM,BEACON,2152Z
   STAT,263,64,27
 
+If the -raw flag is set then these lines will be interspersed with the raw line from the RBN source, prefixed 
+with "RAW,". For example:
+
+  RAW,DX de PJ2A-#:    14025.4  IP0TRC         CW    16 dB  31 WPM  CQ      1307Z
+  RAW,DX de PJ2A-#:    10118.9  K1JD           CW     2 dB  28 WPM  CQ      1307Z
+  RAW,DX de K2PO-#:     1823.4  HL5IV          CW     8 dB  22 WPM  CQ      1307Z
+  SPOT,K2PO-#,1823.4,HL5IV,CW,8,dB,22,WPM,CQ,1307Z
+  RAW,DX de LZ7AA-#:   14036.6  HA8GZ          CW     7 dB  27 WPM  CQ      1307Z
+  RAW,DX de DF4UE-#:   14012.0  R7KM           CW    32 dB  33 WPM  CQ      1307Z
+  RAW,DX de G7SOZ-#:   14012.2  R7KM           CW    17 dB  31 WPM  CQ      1307Z
+
+
 =cut