#!/usrx/local/perl5/bin/perl

#####################################################
# sms_file_list - Listing with sms job info
# nwprod_file_list - Listing with nwprod file names
# output_file_list - Listing with Job Output file names
#####################################################
$FIXutil=$ENV{'FIXutil'};
$OUTPUT_DIR=$ENV{'OUTPUT_DIR'};
$ON_DEMAND_DIR=$ENV{'ON_DEMAND_OUTPUT_DIR'};
$DATA=$ENV{'DATA'};

$on_demand_job_list="$FIXutil/on_demand_job_list";

$sms_file_list="$DATA/sms_config";
$nwprod_file_list="$DATA/nwprodlist";
$output_file_list="$DATA/outdirlist";

$output_job_by_nwprod="$DATA/job_by_nwprod";
$output_nwprod_by_job="$DATA/nwprod_by_job";
$output_nwprod_not_used="$DATA/nwprod_not_used";

#####################################################
# Build nwprod List File
#####################################################
`find /nwprod/exec -type f         > $nwprod_file_list`;
`find /nwprod/parm -type f         >> $nwprod_file_list`;
`find /nwprod/fix -type f          >> $nwprod_file_list`;
`find /nwprod/jobs -type f         >> $nwprod_file_list`;
`find /nwprod/ush -type f          >> $nwprod_file_list`;
`find /nwprod/scripts -type f      >> $nwprod_file_list`;
`find /nwprod/util/ush -type f     >> $nwprod_file_list`;
`find /nwprod/util/parm -type f    >> $nwprod_file_list`;
`find /nwprod/util/fix -type f     >> $nwprod_file_list`;
`find /nwprod/util/exec -type f    >> $nwprod_file_list`;

#####################################################
# Get Date to Find Yesterday's Output Directory
#####################################################
$epoch=time;
$epochm1=$epoch-86400;
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=gmtime($epochm1);
$mon=$mon+1;
$year=$year+1900;
if($mon < 10){$mon="0$mon"};
if($mday < 10){$mday="0$mday"};
$datestring="$year$mon$mday";

`find $OUTPUT_DIR/$datestring -type f > $output_file_list`;
`find $ON_DEMAND_DIR -type f >> $output_file_list`;

#####################################################
# Init Hashes
#####################################################
%output_name = ();
%model_name = ();
%num_nodes = ();
%num_tasks = ();

%nwprod_used = ();

%nwprod_by_job = ();
%job_by_nwprod = ();

%on_demand_found = ();
%on_demand_stored = ();

#####################################################
# Read sms_file_list File
#####################################################
open(FILE,"$on_demand_job_list") || return -1;
while(<FILE>)
   {
    chop;
    $on_demand_found{$_}="NO";
    $on_demand_stored{$_}="NO";
   }
close(FILE);

#####################################################
# Read sms_file_list File
#####################################################
open(FILE,"$sms_file_list") || return -1;
while(<FILE>)
   {
    chop;
    ($job,$model,$output,$nodes,$tasks)=split(/\,/);

    $job=~tr [A-Z] [a-z];

    if($output ne "")
       {
        $output_name{$job}=$output;
        $model_name{$job}=$model;
        $num_nodes{$job}=$nodes;
        $num_tasks{$job}=$tasks;
       }
   }
close(FILE);

#####################################################
# Read nwprod_file_list File
#####################################################
open(FILE,"$nwprod_file_list") || return -1;
while(<FILE>)
   {
    chop;
    $nwprod_used{$_}="NO";
   }
close(FILE);

#####################################################
# Read output_file_list File
#####################################################
open(FILE,"$output_file_list") || return -1;
while(<FILE>)
   {
    chop;
    $asp_output_name=$_;
    OUTLOOP: foreach $job (keys %output_name)
       {
        if($asp_output_name =~ /$output_name{$job}/ && 
           ($on_demand_found{$job} =~ /NO/ || $on_demand_found{$job} eq ""))
           {
            #print "$asp_output_name\n";
            if($asp_output_name =~ /$OUTPUT_DIR\/$datestring/ &&
               $on_demand_found{$job} =~ /NO/)
               {
                $on_demand_found{$job}=$asp_output_name;
                print "Found $job\n";
               }
            if($asp_output_name =~ /$ON_DEMAND_DIR/ &&
               $on_demand_stored{$job} =~ /NO/)
               {
                $on_demand_stored{$job}=$asp_output_name;
                print "Stored $job\n";
               }

            open(OUTPUT_FILE,"$asp_output_name") || return -1;
            while(<OUTPUT_FILE>)
               {
                chop;
                $in=$_;

                 if($in =~ /\/nwprod\//)
                   {
                    foreach $token (split(/\s+|\=|\<|\>|\&|\"|\+|\[|\]|\-/,$in))
                       {
                        if($nwprod_used{$token} ne "")
                           {
                            $nwprod_file=$token;
                            $nwprod_used{$nwprod_file}="YES";
                            if($nwprod_by_job{$job} eq "")
                               {
                                $nwprod_by_job{$job}=$nwprod_file;
                               }
                            else
                               {
                                if($nwprod_by_job{$job} !~ /$nwprod_file/)
                                   {
                                    $nwprod_by_job{$job}="$nwprod_by_job{$job},$nwprod_file";
                                   }
                               }
                            if($job_by_nwprod{$nwprod_file} eq "")
                               {
                                $job_by_nwprod{$nwprod_file}=$job;
                               }
                            else
                               {
                                if($job_by_nwprod{$nwprod_file} !~ /$job/)
                                   {
                                    $job_by_nwprod{$nwprod_file}="$job_by_nwprod{$nwprod_file},$job";
                                   }
                               }
                           }
                       }
                   }
               }
            close(OUTPUT_FILE);
            last OUTLOOP;
           }
        else
           {
            if($asp_output_name =~ /$output_name{$job}/ && 
               $asp_output_name =~ /$ON_DEMAND_DIR/ &&
               $on_demand_stored{$job} =~ /NO/ &&
               $on_demand_stored{$job} ne "")
               {
                $on_demand_stored{$job}=$asp_output_name;
                print "Stored $job\n";
               }
           }
       }
   }
close(FILE);

#####################################################
# Move On Demand Output Files
#####################################################
foreach $key (keys %on_demand_found)
   {
    if($on_demand_stored{$key} =~ /NO/ &&
       $on_demand_found{$key} ne "NO")
       {
        `cp $on_demand_found{$key} $ON_DEMAND_DIR/.`; 
       }
   }

#####################################################
# Create output of nwprod files not found in a job output
#####################################################
open(OUTPUT,">$output_nwprod_not_used");
select(OUTPUT);
foreach $key (sort keys %nwprod_used)
   {
    if($nwprod_used{$key} eq "NO")
       {
        print "$nwprod_used{$key} - $key\n";
       }
   }
select(STDOUT);
close(OUTPUT);

#####################################################
# Create output index of nwprod files by job
#####################################################
open(OUTPUT,">$output_nwprod_by_job");
select(OUTPUT);
foreach $job (sort keys %nwprod_by_job)
   {
    print "$job|$nwprod_by_job{$job}\n";
   }
select(STDOUT);
close(OUTPUT);

#####################################################
# Create output index of jobs by nwprod files
#####################################################
open(OUTPUT,">$output_job_by_nwprod");
select(OUTPUT);
foreach $nwprod (sort keys %job_by_nwprod)
   {
    print "$nwprod|$job_by_nwprod{$nwprod}\n";
   }
select(STDOUT);
close(OUTPUT);
