fix export_user so that it cleans out old users
[spider.git] / perl / DXUser.pm
index 2c562ac70ed538d12373150fd08b2e15944a1b4f..7c9a4b369e56de0f63aabe15bf242d7e1ebe31dc 100644 (file)
@@ -25,7 +25,7 @@ $BRANCH = sprintf( "%d.%03d", q$Revision$ =~ /\d+\.\d+\.(\d+)\.(\d+)/  || (0,0))
 $main::build += $VERSION;
 $main::branch += $BRANCH;
 
-use vars qw(%u $dbm $filename %valid $lastoperinterval $lasttime $lru $lrusize);
+use vars qw(%u $dbm $filename %valid $lastoperinterval $lasttime $lru $lrusize $tooold);
 
 %u = ();
 $dbm = undef;
@@ -33,6 +33,7 @@ $filename = undef;
 $lastoperinterval = 60*24*60*60;
 $lasttime = 0;
 $lrusize = 2000;
+$tooold = 86400 * 365;         # this marks an old user who hasn't given enough info to be useful
 
 # hash of valid elements and a simple prompt
 %valid = (
@@ -79,7 +80,8 @@ $lrusize = 2000;
                  wantpc90 => '1,Req PC90,yesno',
                  wantnp => '1,Req New Protocol,yesno',
                  wantpc16 => '9,Want Users from node,yesno',
-                 wantsendpc16 => '9,Send users to node,yesno',
+                 wantsendpc16 => '9,Send PC16,yesno',
+                 wantroutepc19 => '9,Route PC19,yesno',
                  lastoper => '9,Last for/oper,cldatetime',
                  nothere => '0,Not Here Text',
                  registered => '9,Registered?,yesno',
@@ -91,7 +93,6 @@ $lrusize = 2000;
 #no strict;
 sub AUTOLOAD
 {
-       my $self = shift;
        no strict;
        my $name = $AUTOLOAD;
   
@@ -102,12 +103,7 @@ sub AUTOLOAD
        # this clever line of code creates a subroutine which takes over from autoload
        # from OO Perl - Conway
        *$AUTOLOAD = sub {@_ > 1 ? $_[0]->{$name} = $_[1] : $_[0]->{$name}};
-       &$AUTOLOAD($self, @_);
-#      *{$AUTOLOAD} = sub {@_ > 1 ? $_[0]->{$name} = $_[1] : $_[0]->{$name}} ;
-#      if (@_) {
-#              $self->{$name} = shift;
-#      }
-#      return $self->{$name};
+       goto &$AUTOLOAD;
 }
 
 #use strict;
@@ -122,9 +118,9 @@ sub init
        confess "need a filename in User" if !$fn;
        $fn .= ".v2";
        if ($mode) {
-               $dbm = tie (%u, 'DB_File', $fn, O_CREAT|O_RDWR, 0666, $DB_BTREE) or confess "can't open user file: $fn ($!)";
+               $dbm = tie (%u, 'DB_File', $fn, O_CREAT|O_RDWR, 0666, $DB_BTREE) or confess "can't open user file: $fn ($!) [rebuild it from user_asc?]";
        } else {
-               $dbm = tie (%u, 'DB_File', $fn, O_RDONLY, 0666, $DB_BTREE) or confess "can't open user file: $fn ($!)";
+               $dbm = tie (%u, 'DB_File', $fn, O_RDONLY, 0666, $DB_BTREE) or confess "can't open user file: $fn ($!) [rebuild it from user_asc?]";
        }
        
        $filename = $fn;
@@ -346,6 +342,7 @@ sub export
 
        my $count = 0;
        my $err = 0;
+       my $del = 0;
        my $fh = new IO::File ">$fn" or return "cannot open $fn ($!)";
        if ($fh) {
                my $key = 0;
@@ -427,18 +424,29 @@ print "There are $count user records and $err errors\n";
                        }
                        my $ref = decode($val);
                        if ($ref) {
+                               my $t = $ref->{lastin} || 0;
+                               if ($main::systime > $t + $tooold) {
+                                       unless ($ref->{lat} && $ref->{long} || $ref->{qth} || $ref->{qra}) {
+                                               eval {$dbm->del($key)};
+                                               dbg(carp("Export Error2: $key\t$val\n$@")) if $@;
+                                               Log('DXCommand', "$ref->{call} deleted, too old");
+                                               $del++;
+                                               next;
+                                       }
+                               }
+                               # only store users that are reasonably active or have useful information
                                print $fh "$key\t" . $ref->encode . "\n";
                                ++$count;
                        } else {
-                               Log('DXCommand', "Export Error2: $key\t$val");
+                               Log('DXCommand', "Export Error3: $key\t$val");
                                eval {$dbm->del($key)};
-                               dbg(carp("Export Error2: $key\t$val\n$@")) if $@;
+                               dbg(carp("Export Error3: $key\t$val\n$@")) if $@;
                                ++$err;
                        }
                } 
         $fh->close;
     } 
-       return "$count Users $err Errors ('sh/log Export' for details)";
+       return "$count Users $del Deleted $err Errors ('sh/log Export' for details)";
 }
 
 #
@@ -595,6 +603,11 @@ sub wantsendpc16
        return _want('sendpc16', @_);
 }
 
+sub wantroutepc16
+{
+       return _want('routepc16', @_);
+}
+
 sub wantlogininfo
 {
        my $self = shift;