--- loncom/debugging_tools/activity_to_accesscount.pl 2003/11/14 18:24:40 1.1 +++ loncom/debugging_tools/activity_to_accesscount.pl 2006/06/27 15:01:14 1.4 @@ -1,22 +1,36 @@ #!/usr/bin/perl -w # use strict; - -sub unescape { - my $str=shift; - $str =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; - return $str; -} +use GDBM_File; +use lib '/home/httpd/lib/perl/'; +use LONCAPA; my %resourceaccess; sub main { my $file=$ARGV[0]; - print STDERR "Using $file\n"; + my $target = $ARGV[1]; + my ($owner) = ($target =~ m:.*/(.*)/nohist_accesscount.db:); + print STDERR "source: $file\ntarget: $target\nowner: $owner\n"; + my $accesstime = 0; + my $starttime = time; + if (-e $target) { + my $accessDB = &LONCAPA::locking_hash_tie($target,&GDBM_READER()); + if (! $accessDB) { + warn "Unable to tie to $target"; + return; + } + # + if (exists($accessDB->{'tabulated '.$file})) { + $accesstime = $accessDB->{'tabulated '.$file}; + } + &LONCAPA::locking_hash_untie($accessDB); + } + # my $line; open FILEID,'<'.$file; my @allaccess; - print STDERR "Access by resource\n\n"; + print STDERR "Access by resource after $accesstime\n\n"; my $numlines = 0; while ($line=) { $numlines++; @@ -38,30 +52,46 @@ sub main { shift(@accesses); while (@accesses) { my $date = shift(@accesses); + next if ($date =~ /\D/ || $date < $accesstime); my $access = shift(@accesses); next if (! defined($access) || $access eq '' || ! defined($date) || $date eq ''); $access =~ s/(\&$|^:)//g; my ($resource,$who,$domain,$post,@posts)=split(':',$access); - if (!$resource) { + if (!$resource || $resource eq '') { next; } $resource = &unescape($resource); - if ($resource !~ m:/: || $resource =~ m:/prtspool/:) { + if ($resource !~ m:/$owner/:) { next; } if ($resource =~ /___\d+___/) { (undef,$resource) = split(/___\d+___/,$resource); } next if ($resource =~ m:^/(res/adm|adm)/:); - $resource =~ s:^/?res/?::; + $resource =~ s:^/?res/::; $resourceaccess{$resource}++; } } - print STDERR 'done.'.$/; + print STDERR 'done. Updating '.$target.$/; + + my $accessDB = &LONCAPA::locking_hash_tie($target,&GDBM_WRCREAT()); + if (! $accessDB) { + warn "Unable to open $target to store data".$/; + return; + } + # while (my ($resource,$count) = each(%resourceaccess)) { + $resource = &escape($resource); + if (exists($accessDB->{$resource})) { + $accessDB->{$resource}+=$count; + } else { + $accessDB->{$resource} = $count; + } print sprintf("%10.0f",$count).':'.$resource."\n"; } + $accessDB->{'tabulated '.$file} = $starttime; + &LONCAPA::locking_hash_untie($accessDB); } main;