X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2Fconvert-users-v3-to-v4.pl;h=43489a7c3a2fc5c5c61af9716092477a1d07ba37;hb=b29620c18cf281d199ce92bdb45e733198df2717;hp=f8ac9bf42894827bad56d117a092eb134c3a60de;hpb=0c6e2c3a5619ce9791db56632c1b22d10c60bc70;p=spider.git diff --git a/perl/convert-users-v3-to-v4.pl b/perl/convert-users-v3-to-v4.pl index f8ac9bf4..43489a7c 100755 --- a/perl/convert-users-v3-to-v4.pl +++ b/perl/convert-users-v3-to-v4.pl @@ -11,6 +11,8 @@ # make sure that modules are searched in the order local then perl +our $root; + BEGIN { # root of directory tree for this system $root = "/spider"; @@ -21,13 +23,13 @@ BEGIN { use strict; -use SysVar; +use DXVars; use DXUser; -use DXUtil; use JSON; use Data::Structure::Util qw(unbless); use Time::HiRes qw(gettimeofday tv_interval); use IO::File; +use File::Copy; use Carp; use DB_File; @@ -64,7 +66,8 @@ if (-e $ofn || -e "$ofn.n") { say "You appear to have (or are using) $ofn, creating $nfn instead"; $ofn = $nfn; } else { - say "using $ofn for output"; + $ofn = "$ofn.n"; + say "using $ofn.n for output"; } @@ -73,11 +76,12 @@ if ($convert) { my ($key, $val, $action, $count, $err) = ('','',0,0,0); my $ta = [gettimeofday]; my $ofh = IO::File->new(">$ofn") or die "cannot open $ofn ($!)\n"; - + my $oldfn = localdata("users.v$convert"); + my %oldu; LogDbg('',"Converting the User File from V$convert to $fn.v4 "); LogDbg('',"This will take a while, maybe as much as 10 secs"); - my $odbm = tie (%oldu, 'DB_File', localdata("users.v$convert"), O_RDONLY, 0666, $DB_BTREE) or confess "can't open user file: $fn.v$convert ($!) [rebuild it from user_asc?]"; + my $odbm = tie (%oldu, 'DB_File', $oldfn, O_RDONLY, 0666, $DB_BTREE) or confess "can't open user file: $oldfn ($!) [rebuild it from user_asc?]"; for ($action = R_FIRST; !$odbm->seq($key, $val, $action); $action = R_NEXT) { my $ref; if ($convert == 3) { @@ -89,7 +93,7 @@ if ($convert) { unless ($@) { if ($ref) { unbless $ref; - $ofh->print($json->encode($ref) . "\n"); + $ofh->print("$ref->{call}\t" . $json->encode($ref) . "\n"); $count++; } else { @@ -103,7 +107,7 @@ if ($convert) { undef $odbm; untie %oldu; my $t = _diffms($ta); - LogDbg('',"Conversion from users.v$convert to $ofn completed $count records $err errors $t mS"); + LogDbg('',"Conversion from $oldfn to $ofn completed $count records $err errors $t mS"); $ofh->close; } @@ -139,3 +143,35 @@ sub Log { say shift; } + +# find the correct local_data directory +# basically, if there is a local_data directory with this filename and it is younger than the +# equivalent one in the (system) data directory then return that name rather than the system one +sub localdata +{ + my $ifn = shift; + my $ofn = "$root/local_data/$ifn"; + my $tfn; + + if (-e "$root/local_data") { + $tfn = "$main::data/$ifn"; + if ((-e $tfn) && (-e $ofn)) { + $ofn = $tfn if -M $ofn < -M $tfn; + } + else { + $ofn = $tfn if -e $tfn; + } + } + + return $ofn; +} +# measure the time taken for something to happen; use Time::HiRes qw(gettimeofday tv_interval); +sub _diffms +{ + my $ta = shift; + my $tb = shift || [gettimeofday]; + my $a = int($ta->[0] * 1000) + int($ta->[1] / 1000); + my $b = int($tb->[0] * 1000) + int($tb->[1] / 1000); + return $b - $a; +} +