Latest version of RBN code
[spider.git] / perl / DXUser.pm
index b33f882384e63d161a18ecd0a8cfecca2f3b4837..0b72a680f363a4bbcf45f6912217c110ccec5f6b 100644 (file)
@@ -27,7 +27,7 @@ $dbm = undef;
 $filename = undef;
 $lastoperinterval = 60*24*60*60;
 $lasttime = 0;
-$lrusize = 2000;
+$lrusize = 10000;
 $tooold = 86400 * 365;         # this marks an old user who hasn't given enough info to be useful
 $v3 = 0;
 our $maxconnlist = 3;                  # remember this many connection time (duration) [start, end] pairs
@@ -44,6 +44,7 @@ our $maxconnlist = 3;                 # remember this many connection time (duration) [start,
                  email => '0,E-mail Address,parray',
                  priv => '9,Privilege Level',
                  lastin => '0,Last Time in,cldatetime',
+                 lastseen => '0,Last Seen,cldatetime',
                  passwd => '9,Password,yesno',
                  passphrase => '9,Pass Phrase,yesno',
                  addr => '0,Full Address',
@@ -100,6 +101,7 @@ our $maxconnlist = 3;                       # remember this many connection time (duration) [start,
                  maxconnect => '1,Max Connections',
                  startt => '0,Start Time,cldatetime',
                  connlist => '1,Connections,parraydifft',
+                 width => '0,Preferred Width'
                 );
 
 #no strict;
@@ -213,6 +215,7 @@ sub process
 
 sub finish
 {
+       $dbm->sync;
        undef $dbm;
        untie %u;
 }
@@ -238,6 +241,7 @@ sub new
 #      confess "can't create existing call $call in User\n!" if $u{$call};
 
        my $self = $pkg->alloc($call);
+       $self->{lastseen} = $main::systime;
        $self->put;
        return $self;
 }
@@ -254,7 +258,10 @@ sub get
        
        # is it in the LRU cache?
        my $ref = $lru->get($call);
-       return $ref if $ref && ref $ref eq 'DXUser';
+       if ($ref && ref $ref eq 'DXUser') {
+               $ref->{lastseen} = $main::systime;
+               return $ref;
+       }
        
        # search for it
        unless ($dbm->get($call, $data)) {
@@ -274,6 +281,7 @@ sub get
                        }
                        return undef;
                }
+               $ref->{lastseen} = $main::systime;
                $lru->put($call, $ref);
                return $ref;
        }
@@ -406,7 +414,7 @@ sub close
        my $self = shift;
        my $startt = shift;
        my $ip = shift;
-       $self->{lastin} = $main::systime;
+       $self->{lastseen} = $self->{lastin} = $main::systime;
        # add a record to the connect list
        my $ref = [$startt || $self->{startt}, $main::systime];
        push @$ref, $ip if $ip;
@@ -532,10 +540,10 @@ print "There are $count user records and $err errors\n";
                                my $eval = $val;
                                my $ekey = $key;
                                $eval =~ s/([\%\x00-\x1f\x7f-\xff])/sprintf("%%%02X", ord($1))/eg; 
-                               $ekey =~ s/([\%\x00-\x1f\x7f-\xff])/sprintf("%%%02X", ord($1))/eg; 
-                               LogDbg('DXCommand', "Export Error1: $ekey\t$eval");
+                               $ekey =~ s/([\%\x00-\x1f\x7f-\xff])/sprintf("%%%02X", ord($1))/eg;
+                               LogDbg('DXCommand', "Export Error1: invalid call '$key' => '$val'");
                                eval {$dbm->del($key)};
-                               dbg(carp("Export Error1: $ekey\t$eval\n$@")) if $@;
+                           dbg(carp("Export Error1: delete $key => '$val' $@")) if $@;
                                ++$err;
                                next;
                        }
@@ -546,7 +554,7 @@ print "There are $count user records and $err errors\n";
                                if ($ref->is_user && !$ref->{priv} && $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 $@;
+                                               dbg(carp("Export Error2: delete '$key' => '$val' $@")) if $@;
                                                LogDbg('DXCommand', "$ref->{call} deleted, too old");
                                                $del++;
                                                next;
@@ -556,9 +564,9 @@ print "There are $count user records and $err errors\n";
                                print $fh "$key\t" . $ref->asc_encode($basic_info_only) . "\n";
                                ++$count;
                        } else {
-                               LogDbg('DXCommand', "Export Error3: $key\t" . carp($val) ."\n$@");
+                               LogDbg('DXCommand', "Export Error3: '$key'\t" . carp($val) ."\n$@");
                                eval {$dbm->del($key)};
-                               dbg(carp("Export Error3: $key\t$val\n$@")) if $@;
+                               dbg(carp("Export Error3: delete '$key' => '$val' $@")) if $@;
                                ++$err;
                        }
                }