package Ernad::Rif; ## functions to use on Rifs use strict; use warnings; use Carp qw(confess); use Ernad::Constant; use File::Basename; use Krichel::Shoti; use base 'Ernad'; # ## retrieves issuedate from report's filename # ## sub find_issuedate_from_file { sub issuedate { my $f=shift; my $file = shift // confess "I need a file name here"; my $rif_ext=$Ernad::Constant::c->{'rif_ext'} or die; my $date_regx=$Ernad::Constant::c->{'date_regx'} or die; $file=basename($file); if((not $file=~m|$rif_ext$|) and (not $file=~m|$rif_ext\.gz$|)) { #warn "file $file is not a rif"; } ## to be contnued here my $namf_regx=$date_regx.'_'.$date_regx. $file=~m|^($date_regx)|; my $issuedate=$1; return $issuedate; } ## gets an available, not necesary enabled repcode from a file sub repcode { my $f=shift; my $e=$f->{'e'} // $main::e // confess "Where is my erimp?"; my $file=shift or confess "I need a file name here."; ## first try my $test=$file; $test=~s|\.gz$||; ## written in haste on 2018-12-11 if($test=~m|/([^- /]+-[^- /]+)/[^- /]+/\d{4}-\d{2}-\d{2}_[0-9a-z]{6}\.amf\.xml|) { my $repcode=$1; return $repcode; } ## This code left-over from before Recon #foreach my $part (reverse split('/',$file)) { # if(defined($e->{'report'}->{$part})) { # return $part; # } #} foreach my $part (reverse split('/',$file)) { if($e->{'r'}->is_it_available($part)) { return $part; } } return ''; } # ## FixMe: should be obsoleted # ## retrieves issuedate from report's filename # ## sub find_time_from_file { sub tist { my $f=shift; my $file = shift; my $rif_ext=$Ernad::Constant::c->{'rif_ext'} or die; my $date_regx=$Ernad::Constant::c->{'date_regx'} or die; $file=basename($file); if((not $file=~m|$rif_ext$|) and (not $file=~m|$rif_ext\.gz$|)) { #warn "file $file is not a rif"; } ## Xmas 2017 if($file=~m|^($date_regx)_(\d{10})|) { my $tist=$2; return $tist; } if($file=~m|^($date_regx)_([0-9a-z]{6})|) { my $shoti=$2; my $tist=&Krichel::Shoti::ekam($shoti); return $tist; } confess "I can't find the time from the file $file."; return undef; } # ## sub get_rif_tist { sub get_tist { my $f=shift; my $rif=shift; my $rif_ext=$Ernad::Constant::c->{'rif_ext'} or die; my $date_regx=$Ernad::Constant::c->{'date_regx'} or die; $rif=basename($rif); ## Xmas 2017 if($rif=~m|\d{4}-\d{2}-\d{2}_([0-9a-z]{6})$rif_ext(\.gz)?$|) { my $shoti=$1; my $tist=&Krichel::Shoti::ekam($shoti); return $tist; } if($rif=~m|\d{4}-\d{2}-\d{2}_(\d{10})$rif_ext(\.gz)?$|) { my $tist=$1; return $tist; } confess "I can not parse '$rif'."; } # # ## only used in ReportState.pm # ## compares reports by their names # ## returns 1 if first rif is younger # ## sub is_first_rif_more_recent { sub is_first_more_recent { my $f=shift; my $rif_1=shift; my $rif_2=shift; my $tist_1=$f->tist($rif_1); my $tist_2=$f->tist($rif_2); if ($tist_1 >= $tist_2) { return 1; } return 0; } # # ## Splits riff's fullname by path, date and timestamp # ## Returns 1 if the riffname matches this template, 0 otherwise # ## FixMe: only used in ReportState.pm. It shoud be used # ## wheneever we need a strict rif name # ## sub split_rif_name { sub split_rif_name { my $f=shift; my ( $fn, $path, $date, $ts ) = @_; my $rif_extension=$Ernad::Constant::c->{'rif_ext'} or die; #my $rif_extension='.amf.xml'; ## Xmas 2017 if ( $fn =~ m/(.*\/)?([\d-]+)_([0-9a-z]{6})($rif_extension)$/g ) { $$path = $1; $$date = $2; my $shoti=$3; my $tist=&Krichel::Shoti::ekam($shoti); $$ts = $tist; return 1; } if ( $fn =~ m/(.*\/)?([\d-]+)_(\d{10})($rif_extension)$/g ) { $$path = $1; $$date = $2; $$ts = $3; return 1; } if ( $fn =~ m/(.*\/)?([\d-]+)_([0-9a-z]{6})($rif_extension)\.gz$/g ) { $$path = $1; $$date = $2; my $shoti=$3; my $tist=&Krichel::Shoti::ekam($shoti); $$ts = $tist; return 1; } if ( $fn =~ m/(.*\/)?([\d-]+)_(\d{10})($rif_extension)\.gz$/g ) { $$path = $1; $$date = $2; $$ts = $3; return 1; } ## we need to return 0 here becasue the caller submits us '.'; return 0; #confess "I can't split the rif '$fn'."; #return 0; } sub is { my $f=shift; my $fn = shift(); my $rif_extension=$Ernad::Constant::c->{'rif_ext'} or die; #my $rif_extension='.amf.xml'; ## 2018-01-15 my $bana=basename($fn); if($bana=~m|^\d{4}-\d{2}-\d{2}_([0-9a-z]{6})($rif_extension)$|) { return 1; } if($bana=~m|^\d{4}-\d{2}-\d{2}_([0-9a-z]{6})($rif_extension)\.gz$|) { return 1; } if($bana=~m|^\d{4}-\d{2}-\d{2}_(\d{10})($rif_extension)$|) { return 1; } if($bana=~m|^\d{4}-\d{2}-\d{2}_(\d{10})($rif_extension)\.gz$|) { return 1; } ## Xmas 2017 return 1 if( $fn =~ m/(.*\/)?([\d-]+)_([0-9a-z]{6})($rif_extension)$/g ); return 1 if( $fn =~ m/(.*\/)?([\d-]+)_([0-0a-z]{6})($rif_extension)\.gz$/g ); return 1 if( $fn =~ m/(.*\/)?([\d-]+)_(\d+)($rif_extension)$/g ); return 1 if( $fn =~ m/(.*\/)?([\d-]+)_(\d+)($rif_extension)\.gz$/g ); ## namf files return 1 if( $fn =~ m/\d{4}-\d{2}-\d{2}_\d{4}-\d{2}-\d{2}($rif_extension)(\.gz)?$/g ); return 0; } sub is_namf { my $f=shift; my $fufi = shift(); my $bana=basename($fufi); my $rif_extension=$Ernad::Constant::c->{'rif_ext'}; ## Xmas 2017 if($bana =~ m/(\d{4}-\d{2}-\d{2})_([0-9a-z]{6})($rif_extension)$/) { return 1; } if($bana =~ m/(\d{4}-\d{2}-\d{2})_([0-9a-z]{6})($rif_extension)\.gz$/) { return 1; } if($bana =~ m/(\d{4}-\d{2}-\d{2})_(\d+)($rif_extension)$/) { return 1; } if($bana =~ m/(\d{4}-\d{2}-\d{2})_(\d+)($rif_extension)\.gz$/) { return 1; } return 0; } sub by_date { my $f=shift(); my $issuedate = shift() // confess "I need an issuedate here."; my $rif_extension=$Ernad::Constant::c->{'rif_ext'} or die; my $shoti=&Krichel::Shoti::now(); my $fn=$issuedate."_$shoti".$rif_extension; return $fn; } ## was find_impna_from_rif sub impna { my $f=shift; my $file=shift or confess "I need a file name here."; my $home_dir=$ENV{'HOME'} // '/home/ernad'; my $ernad_dir="$home_dir/ernad"; my $etc_dir="$ernad_dir/etc"; ## use the etc dir ## we don't check if the file is there ... foreach my $part (reverse split('/',$file)) { if(-d "$etc_dir/$part") { return $part; } } return ''; } sub stage { my $f=shift; my $fufi=shift; my $stage=basename(dirname($fufi)); ## bad hack if(length($stage) == 2) { return "source/$stage"; } return $stage; } 1;