use strict; use Time::Local; sub _init_values { my ($seconds, $minutes, $hours, $day, $month, $year) = localtime; my $date = sprintf("%04d%02d%02d", $year + 1900, $month + 1, $day); my $report_dir = "/reports/directory"; my $config_dir = "/config/directory"; return $date, $report_dir, $config_dir, $hours; } sub _get_list { my ($date, $report_dir, $config_dir, $hours) = @_; my %reports; if ($hours == 00) { open IN, "$config_dir/report_master_list" or die "$!"; while () { chomp; $reports{$_}++; } close IN or warn "$!"; _get_reports($date, $report_dir, $config_dir, \%reports); } elsif ($hours == 08) { open IN, "$config_dir/report_temp_list" or die "$!"; while () { chomp; $reports{$_}++; } close IN or warn "$!"; open OUT, ">> /disk2/daily_report" or die "$!"; print OUT "\n\nDaily Reports That Were Unable To Be Transferred\n"; print OUT "------------------------------------------------\n\n"; for (sort keys %reports) { print OUT "$_\n"; } print OUT "\n\n"; unlink "$config_dir/report_temp_list" or warn "$!"; } else { open IN, "$config_dir/report_temp_list" or die "$!"; while () { chomp; $reports{$_}++; } close IN or warn "$!"; _get_reports($date, $report_dir, $config_dir, \%reports); } } sub _get_reports { my ($date, $report_dir, $config_dir, $reports) = @_; my %site_map = qw( site1 fullsite1 site2 fullsite2 site3 fullsite3 site4 fullsite4 site5 fullsite5 site6 fullsite6 ); for (sort keys %$reports) { my ($report_name, $site) = split /\./; my @files = `ssh host.$site ls $report_dir`; for my $file (@files) { chomp $file; if ($file =~ /$report_name/ && $file =~ /$date/) { my $status = `ssh host.$site cat $report_dir/$file`; if ($status =~ /End of Report/) { my $transfer = `scp host.$site:$report_dir/$file /disk2/$site_map{$site}/Reports`; delete $reports->{$_}; } } } } open OUT, "> $config_dir/report_temp_list" or die "$!"; for (sort keys %$reports) { print OUT "$_\n"; } } my ($date, $report_dir, $config_dir, $hours) = _init_values; _get_list($date, $report_dir, $config_dir, $hours);