Skip to content
Snippets Groups Projects
Commit a7402205 authored by Andreas Romeyke's avatar Andreas Romeyke
Browse files

- added help

parent 03790c71
No related branches found
No related tags found
No related merge requests found
...@@ -30,6 +30,9 @@ ...@@ -30,6 +30,9 @@
# #
# perl ./exit_strategy.pl --recover rosetta_exit_strategy/tmp.db /permanent/ # perl ./exit_strategy.pl --recover rosetta_exit_strategy/tmp.db /permanent/
# #
#
# call help with:
# perl ./exit_strategy.pl --help
############################################################################### ###############################################################################
...@@ -47,6 +50,7 @@ use XML::LibXML::XPathContext; ...@@ -47,6 +50,7 @@ use XML::LibXML::XPathContext;
use DBD::SQLite; use DBD::SQLite;
use DBI; use DBI;
use Getopt::Long; use Getopt::Long;
use Pod::Usage;
use constant DEBUG => 0; # no debug use constant DEBUG => 0; # no debug
use IO::Handle; use IO::Handle;
...@@ -390,51 +394,6 @@ sub check_if_db_conform ($string, $filename) { ...@@ -390,51 +394,6 @@ sub check_if_db_conform ($string, $filename) {
} }
} }
###############################################################################
# because ExLibris Rosetta produces filenames of following format:
# V\d+-IE\d+\.xml
# e.G.:
# V1-IE23891.xml
# V1-IE94621.xml
# V2-IE23891.xml
# …
# we must find the relevant file with highest V-value, in example the file
# "V2-IE23891.xml"
#
# this function gets an array reference with all possible files of given regEx
# and returns an array reference with reduced files using only highest V-value
# HINT, it only operates on sorted file list with fake versions (with zero-filled prefixes)
################################################################################
sub find_newest_iefile_version ($files_sorted, $files_truncated, $cnt_files) {
my $cnt_truncated = 0;
my $fh = $files_sorted->filehandle("<");
my $last_entry;
# FIXME, how many lines?
my $p = Time::Progress->new(min=>0, max=> $cnt_files);
my $i=0;
while(<$fh>) {
my $entry = $_;
$entry =~ m/^(.+?V)(\d+)(-IE\d+\.xml)$/;
if (!defined $last_entry) {
$last_entry = $entry;
}
my ($prefix, $version, $suffix) = ($1, $2, $3);
$last_entry =~ m/^(.+?V)(\d+)(-IE\d+\.xml)$/;
my ($last_prefix, $last_version, $last_suffix) = ($1, $2, $3);
if (($last_prefix eq $prefix ) && ($last_suffix eq $suffix) && ($last_version < $version)) {
} else {
$files_truncated->append($last_entry);
$cnt_truncated++;
}
print $p->report("find newest IE files: %40b ETA: %E \r", $i++);
$last_entry = $entry;
}
$files_truncated->append($last_entry);
$cnt_truncated++;
say "";
return $cnt_truncated;
}
sub searching_ie_files ($dir, $tmp_ies_unsorted_file) { sub searching_ie_files ($dir, $tmp_ies_unsorted_file) {
my $cnt_unsorted_files = 0; my $cnt_unsorted_files = 0;
my $first_two_levels_of_dirs = 0; my $first_two_levels_of_dirs = 0;
...@@ -479,65 +438,85 @@ sub searching_ie_files ($dir, $tmp_ies_unsorted_file) { ...@@ -479,65 +438,85 @@ sub searching_ie_files ($dir, $tmp_ies_unsorted_file) {
return $cnt_unsorted_files; return $cnt_unsorted_files;
} }
############################################################################### ###############################################################################
############################################################################### ###############################################################################
############# main ############################################################ ############# main ############################################################
############################################################################### ###############################################################################
############################################################################### ###############################################################################
my $tmp_ies_dir = Path::Tiny->tempdir( TEMPLATE => "exitstrategy_XXXXXXXXXXX", CLEANUP => 1); my $tmp_ies_dir = Path::Tiny->tempdir(TEMPLATE => "exitstrategy_XXXXXXXXXXX", CLEANUP => 1);
my $tmp_ies_unsorted_file = $tmp_ies_dir->child("unsorted_ies"); my $tmp_ies_unsorted_file = $tmp_ies_dir->child("unsorted_ies");
my $flag_recovery = undef; my $flag_recovery = undef;
my $flag_sqldump = undef; my $flag_sqldump = undef;
my $db_filename = $db_name.".db"; my $db_filename = $db_name . ".db";
my @ARGV_tail; my @ARGV_tail;
GetOptions( GetOptions(
"recovery" => \$flag_recovery, "help|?" => sub {
"sqlitedb-file=s" => \$db_filename, say <<"HELP";
"enable_sqldump" => \$flag_sqldump, call $0 with following options
'<>' => sub {push @ARGV_tail, @_;} --help | this help
); --recovery | set special recovery flag
if ($#ARGV_tail < 0) { --sqlitedb-file=FILE | set database to file FILE
die "you need a directory as argument\n"; --enable-sqldump | dumps a given database as SQL to STDOUT
}
if (defined $flag_recovery) { warn "recovery enabled for XML processing\n"; } create an exit-DB:
$0 [--recovery] [--sqlitedb-file=FILE] DIR
my $dir = shift @ARGV_tail;
dump an exit-DB as SQL
$0 [--sqlitedb-file=FILE] --enable-sqldump
HELP
exit;
},
"recovery" => \$flag_recovery,
"sqlitedb-file=s" => \$db_filename,
"enable_sqldump" => \$flag_sqldump,
'<>' => sub {push @ARGV_tail, @_;}
) or pod2usage(2);
if (defined $flag_recovery) {warn "recovery enabled for XML processing\n";}
if (defined $flag_sqldump) {
open my $cmd, '|-', '/usr/bin/sqlite3', $db_filename, '.dump' or die "Failed to dump DB: $!\n";
close $cmd or die "Failed to dumb DB: $!\n";
exit;
}
if ($#ARGV_tail < 0) {
die "you need a directory as argument\n";
}
if (defined $dir && -d "$dir") { my $dir = shift @ARGV_tail;
say "preparing SQL";
$tmp_ies_unsorted_file->touch(); if (defined $dir && -d "$dir") {
say "searching IE files"; say "preparing SQL";
my $cnt_unsorted_files = searching_ie_files($dir, $tmp_ies_unsorted_file); $tmp_ies_unsorted_file->touch();
# /permanent_storage/2020/04/02/IE201080/V1-FL201091.xml say "searching IE files";
# /permanent_storage/2020/04/02/IE201080/V2-FL201091.xml my $cnt_unsorted_files = searching_ie_files($dir, $tmp_ies_unsorted_file);
my $fh_unsorted_IEs = $tmp_ies_unsorted_file->openr(); # /permanent_storage/2020/04/02/IE201080/V1-FL201091.xml
my $count=0; # /permanent_storage/2020/04/02/IE201080/V2-FL201091.xml
my $progressbar =Time::Progress->new(min => 0, max => $cnt_unsorted_files, smoothing => 1); my $fh_unsorted_IEs = $tmp_ies_unsorted_file->openr();
my $dbh = DBI->connect("dbi:SQLite:dbname=$db_filename", "", "", { my $count = 0;
RaiseError => 1, my $progressbar = Time::Progress->new(min => 0, max => $cnt_unsorted_files, smoothing => 1);
sqlite_unicode => 1, my $dbh = DBI->connect("dbi:SQLite:dbname=$db_filename", "", "", {
}) or die "could not connect to database (file '$db_filename')", $DBI::errstr; RaiseError => 1,
write_database_creation($dbh); sqlite_unicode => 1,
write_tables_creation($dbh); }) or die "could not connect to database (file '$db_filename')", $DBI::errstr;
write_prepare_insert($dbh); write_database_creation($dbh);
write_index_creation($dbh); write_tables_creation($dbh);
while( <$fh_unsorted_IEs> ) { write_prepare_insert($dbh);
chomp; write_index_creation($dbh);
print $progressbar->report("parse IE files: %40b ETA: %E \r", $count++); while (<$fh_unsorted_IEs>) {
s/V0*(\d+-IE)/V$1/; # revert fake version chomp;
my $ret = parse_iexml($_, $flag_recovery); print $progressbar->report("parse IE files: %40b ETA: %E \r", $count++);
write_addsql($dbh, $ret); s/V0*(\d+-IE)/V$1/; # revert fake version
} my $ret = parse_iexml($_, $flag_recovery);
say ""; write_addsql($dbh, $ret);
$dbh->disconnect or warn("disconnecting problems, ", $dbh->errstr);
say "processed $count uniq IEs";
} else {
die "no directory given on commandline"
} }
print "\n"; say;
$dbh->disconnect or warn("disconnecting problems, ", $dbh->errstr);
say "processed $count uniq IEs";
}
else {
die "no directory given on commandline"
}
say;
1; 1;
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment