use File::Basename;
(%param)=&init();
while(true) {
&proces(%param);
sleep($param{wait});
}
sub init {
open(CFG, "< flexcopy.ini") or die "Can't find config fi
+le => $!\n";
while(<CFG>){
$linea = $_;
chomp($linea);
if($linea =~ /\[/){
}else{
if($linea =~ /\#/){
}else{
($key, $content)=split(/=/, $linea)
+;
if($key){
$param{$key}=$content;
}
}
}
}
close(CFG);
if (!$param{error_class}){
if (!$param{mailhost}){
print "Error in CFG file\nPlease consult MANIFEST.TXT\
+n";
exit;
}
if (!$param{admin_mail}){
print "Error in CFG file\nPlease consult MANIFEST.TXT\
+n";
exit;
}
}else{
if (lc($param{error_class}) eq "default"){
if (!$param{mailhost}){
print "Error in CFG file\nPlease consult MANIFEST.
+TXT\n";
exit;
}
if (!$param{admin_mail}){
print "Error in CFG file\nPlease consult MANIFEST.
+TXT\n";
exit;
}
}elsif(lc($param{error_class}) eq "tivoli"){
if (!$param{tivoli_host}){
print "Error in CFG file\nPlease consult MANIFEST.
+TXT\n";
exit;
}
if (!$param{tivoli_aplicacion}){
print "Error in CFG file\nPlease consult MANIFEST.
+TXT\n";
exit;
}
if (!$param{tivoli_instancia}){
print "Error in CFG file\nPlease consult MANIFEST.
+TXT\n";
exit;
}
if (!$param{tivoli_clase}){
print "Error in CFG file\nPlease consult MANIFEST.
+TXT\n";
exit;
}
if (!$param{tivoli_source}){
print "Error in CFG file\nPlease consult MANIFEST.
+TXT\n";
exit;
}
}else{
print "Error in CFG file\nPlease consult MANIFEST.TXT\
+n";
exit;
}
}
use Net::Domain qw(hostname hostfqdn hostdomain);
$param{hostname}=hostname();
&logging(%param);
return(%param);
}
sub logging {
(%param)=@_;
use Time::localtime;
$now = ctime();
chop($now);
if(uc($param{log}) eq "Y"){
open(LOG, ">$param{log_name}");
print LOG "Cluster Archive Service 1.0\n";
print LOG "Realizado por Arquitectura Tecno
+logica - Banco Rio.\n";
print LOG "--------------------------------
+-------------------\n\n";
print LOG "$now\n";
print LOG "for $param{tailn} tails\n";
print LOG "Wait Time = $param{wait} s
+eg.\n\n";
print LOG "Logging...\n";
print LOG "-----------------------------------------------
+---------------------------------------------------------------------
+------------------------------------------------------------------\n"
+;
print LOG "Archive: Fecha:
+ Accion: Origen:
+ Destino: Hostname:\n";
print LOG "-----------------------------------------------
+---------------------------------------------------------------------
+------------------------------------------------------------------\n"
+;
close(LOG);
}
return();
}
sub proces {
(%param)=@_;
open(LOG, ">>$param{log_name}");
$tail = 1;
while ($tail < ($param{tailn}+1)){
$src = "src_tail_".$tail;
$prd = "prd_tail_".$tail;
$bkp = "bkp_tail_".$tail;
$ndw = "ndw_tail_".$tail;
opendir(DIR, $param{$ndw}) || die "Can't open $param{$ndw}
+ => $!\n";
@listing2 = readdir(DIR);
closedir DIR;
foreach $file (@listing2){
chomp($file);
if($file){
if($file eq "."){
}elsif($file eq ".."){
}else{
&replica($file);
}
}
}
opendir(DIR, $param{$src}) || die "Can't open $param{$src}
+ => $!\n";
@listing = readdir(DIR);
closedir DIR;
foreach $file (@listing){
chomp($file);
if($file){
if($file eq "."){
}elsif($file eq ".."){
}else{
&master($file);
}
}
}
$tail = $tail + 1;
}
close(LOG);
return();
}
sub master {
($file)=@_;
use File::Copy;
$control_fx = 0;
$origen = $param{$src};
$destino = $param{$prd};
$accion = "COPY";
($fecha)=&fecha_log();
write(LOG) if(uc($param{log}) eq "Y");
$source = $param{$src}."\\".$file;
if (-e $param{$prd}){
copy($source,$param{$prd}) or $control_fx=1;
}
$contador = 0;
while ($control_fx eq 1){
$control_fx = 0;
&Error_msg("1");
$wait_error = ($param{wait}/2);
sleep($wait_error);
copy($source,$param{$prd}) or $control_fx=1;
$contador = ++$contador;
if ($contador eq 11){
return();
}
}
$origen = $param{$src};
$destino = $param{$bkp};
$accion = "COPY";
($fecha)=&fecha_log();
write(LOG) if(uc($param{log}) eq "Y");
if (-e $param{$bkp}){
$control_fx = 0;
copy($source,$param{$bkp}) or $control_fx=1;
}
if ($control_fx eq 0){
$origen = $param{$src};
$destino = "";
$accion = "REMOVE";
($fecha)=&fecha_log();
write(LOG) if(uc($param{log}) eq "Y");
unlink($source);
}else{
&Error_msg("2");
$origen = $param{$src};
$destino = $param{$nwd};
$accion = "COPY";
($fecha)=&fecha_log();
write(LOG) if(uc($param{log}) eq "Y");
move($source,$param{$ndw});
}
return();
}
sub replica {
($file)=@_;
use File::Copy;
$source = $param{$ndw}."\\".$file;
$origen = $param{$nwd};
$destino = $param{$bkp};
$accion = "COPY";
($fecha)=&fecha_log();
write(LOG) if(uc($param{log}) eq "Y");
$control_fx = 0;
if (-e $param{$bkp}){
copy($source,$param{$bkp}) or $control_fx=1;
}
if ($control_fx eq 0){
$origen = $param{$src};
$destino = "";
$accion = "REMOVE";
($fecha)=&fecha_log();
write(LOG) if(uc($param{log}) eq "Y");
unlink($source);
}else{
&Error_msg("3");
$origen = $param{$src};
$destino = $param{$ndw};
$accion = "MOVE";
($fecha)=&fecha_log();
write(LOG) if(uc($param{log}) eq "Y");
move($source,$param{$ndw});
}
return();
}
sub fecha_log {
use Time::localtime;
$T=localtime;
my ($wday, $hour, $min, $sec, $year,$mon, $mday)=($T->wday, $T->ho
+ur, $T->min, $T->sec, $T->year+1900,$T->mon+1,$T->mday);
my $out = sprintf "%02.0f\/%02.0f\/%0004.0f %02.0f\:%02.0f\:%02.0f
+",$mday,$mon,$year,$hour,$min,$sec;
return($out);
}
sub Error_msg {
($error_code)=@_;
$error_class = $param{error_class};
if (!$param{ermsg_host}){
$ermsg_host = "localhost";
}else{
$ermsg_host = lc($param{ermsg_host});
}
if (!$param{error_class}){
$error_class = "default";
}else{
$error_class = lc($param{error_class});
}
if (!$param{ermsg_warning1}){
$error_msg2 = "Warning in Copy to BKP";
}else{
$error_msg2 = lc($param{ermsg_warning1});
}
if (!$param{ermsg_warning2}){
$error_msg3 = "Warning in Copy to BKP over";
}else{
$error_msg3 = lc($param{ermsg_warning2});
}
if (!$param{ermsg_critical}){
$error_msg1 = "Critical in Copy to PRD";
}else{
$error_msg1 = lc($param{ermsg_critical});
}
if ($error_code eq 1){
$message = $error_msg1;
$status = "CRITICAL";
}elsif($error_code eq 2){
$message = $error_msg2;
$status = "HARMLESS";
}elsif($error_code eq 3){
$message = $error_msg3;
$status = "HARMLESS";
}
if ($error_class eq "default"){
use Net::SMTP;
$smtp = Net::SMTP->new($param{mailhost});
$smtp->mail("Flexcopy");
$smtp->to($param{admin_mail});
$smtp->data();
$smtp->datasend("To: $param{admin_mail}\n");
$smtp->datasend("\n");
$smtp->datasend($message."\n");
$smtp->dataend();
$smtp->quit;
}elsif ($error_class eq "tivoli"){
$tivmsg = "postemsg -S $param{tivoli_host} -r $status -m \"".$
+message."\" hostname=$param{hostname} aplicacion=$param{tivoli_aplica
+cion} instancia=$param{tivoli_instancia} $param{tivoli_clase} $param{
+tivoli_source}";
system($tivmsg);
}
return();
}
format LOG =
@<<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<
+<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<
+<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$file,$fecha,$accion,$origen,$destino,$param{hostname}
.
|