master branch working convert-users-v3-to-v4.pl

This commit is contained in:
Dirk Koopman 2020-05-20 15:45:28 +01:00
parent df50cc60aa
commit c4fd691793

View File

@ -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,9 +23,8 @@ 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);
@ -75,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) {
@ -105,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;
}
@ -141,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;
}