The following files were not copied over properly:
report1 sitea siteb
report2 sitea siteb sitea siteb
report3 sitea siteb sitea siteb sitea siteb
####
The following files were not copied over properly:
report1 sitea siteb
report2 sitea siteb
report3 sitea siteb
####
#!/usr/bin/perl -w
use strict;
use Time::Local;
sub _init {
my $config_dir = '/config/dir';
my $config_file = 'report_copy.cfg';
my $site_file = 'sites.cfg';
my $report_dir = '/report/dir';
my ($day, $month, $year) = (localtime)[3,4,5];
my $log_date = sprintf("%04d%02d%02d", $year + 1900, $month + 1, $day);
return $config_dir, $config_file, $site_file, $report_dir, $day, $log_date;
}
sub _read_cfg {
my ($config_dir, $config_file, $site_file) = @_;
my (%reports, %sites);
open IN, "$config_dir/$config_file"
or die "Error: Could not open $config_dir/$config_file for reading: $!\n";
while () {
chomp;
my ($name, $type, $day, $site_locations) = split;
$reports{$name} = "$type:$day:$site_locations";
}
close IN
or warn "Error: Could not close $config_dir/$config_file: $!\n";
open IN, "$config_dir/$site_file"
or die "Error: Could not open $config_dir/$site_file for reading: $!\n";
while () {
chomp;
my ($site, $folder) = split /=/;
$sites{$site} = $folder;
}
close IN
or warn "Error: Could not close $config_dir/$site_file: $!\n";
return \(%reports, %sites);
}
sub _get_reports {
my ($report_dir, $day, $log_date, $reports, $sites) = @_;
my (@site_array, %missed_reports);
for (sort keys %$reports) {
my ($type, $report_day, $site_locations) = split /:/, $reports->{$_};
if ($site_locations eq 'All') {
for my $site (sort keys %$sites) {
push @site_array, $site;
}
} else {
@site_array = split /,/, $site_locations;
}
if ($type eq 'daily') {
_copy_report($_, $report_dir, $log_date, $sites, \@site_array);
} elsif ($type eq 'monthly' && $report_day eq $day) {
_copy_report($_, $report_dir, $log_date, $sites, \@site_array);
} else {
delete $reports->{$_};
}
my $file_check;
my $problem = "";
for my $site_folder (@site_array) {
$file_check = 0;
my $folder = $sites->{$site_folder};
for my $filename () {
$file_check = 1 if $filename =~ /$_.*\.$log_date/;
}
if ($file_check == 1) {
next;
} else {
$problem .= "$site_folder ";
$missed_reports{$_} = $problem;
}
}
delete $reports->{$_};
}
return \%missed_reports;
}
sub _copy_report {
my ($report_name, $report_dir, $log_date, $sites, $site_array) = @_;
for my $site (@$site_array) {
my $result = `scp host.$site:$report_dir/${report_name}*.$log_date /disk2/$sites->{$site}/reports`;
}
}
sub _print_report {
my ($missed_reports, $log_date) = @_;
open OUT, ">> /disk2/reports/report_copy.$log_date"
or die "Error: Could not open /disk2/reports/report_copy.$log_date: $!\n";
print OUT "The following files were not copied over properly:\n\n";
for (sort keys %$missed_reports) {
print OUT "$_\t$missed_reports->{$_}\n";
}
close OUT
or warn "Error: Could not close /disk2/reports/report_copy.$log_date: $!\n";
}
my ($config_dir, $config_file, $site_file, $report_dir, $day, $log_date) = _init;
my ($reports, $sites) = _read_cfg($config_dir, $config_file, $site_file);
my $missed_reports = _get_reports($report_dir, $day, $log_date, $reports, $sites);
_print_report($missed_reports, $log_date);