IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Aug 10, 2011, 11:44:13 AM (15 years ago)
Author:
rhenders
Message:

stripped-down version for use with Jython program

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ippToPsps/perl/checkOdmStatus.pl

    r30434 r32069  
    88use XML::LibXML;
    99use File::Temp qw(tempfile);
    10 use ippToPsps::IppToPspsDb;
    11 use ippToPsps::Datastore;
    12 use ippToPsps::Batch;
    1310
    14 my $singleBatch = undef;
    15 my $verbose = undef;
    16 my $save_temps = undef;
    17 my $fromTime = undef;
    18 my $toTime = undef;
    19 my $product = undef;
    20 my $filePath = undef;
    21 my $removeUnprocessed = undef;
    22 my $onlyCheckUndeleted = undef;
    23 my $onlyCheckMergeWorthy = undef;
    24 my $onlyCheckMerged = undef;
    25 
     11my $batchName = undef;
     12my $file = undef;
    2613
    2714GetOptions(
    28         'batch|b=s' => \$singleBatch,
    29         'from|f=s' => \$fromTime,
    30         'to|t=s' => \$toTime,
    31         'product|p=s' => \$product,
    32         'location|l=s' => \$filePath,
    33         'onlyundeleted|u' => \$onlyCheckUndeleted,
    34         'onlymergeworthy|w' => \$onlyCheckMergeWorthy,
    35         'onlymerged|m' => \$onlyCheckMerged,
    36         'remove|r' => \$removeUnprocessed,
    37         'verbose|v' => \$verbose,
    38         'save_temps|s' => \$save_temps
     15        'batch|b=s' => \$batchName,
     16        'file|f=s' => \$file,
    3917        );
    4018
    41 if (@ARGV) {
    42     print "* UNKNKOWN: option                          @ARGV\n";
    43 }
    44 if (!defined $product) {
    45     print "* OPTIONAL: a datastore product name            -p <name>\n";
    46 }
    47 if (!defined $singleBatch) {
    48     print "* OPTIONAL: a single batch                      -b <batchNum>        (default = none)\n";
    49 }
    50 if (!defined $fromTime) {
    51     $fromTime = "2010-01-01";
    52     print "* OPTIONAL: from time                           -f <dateTime>        (default = $fromTime)\n";
    53 }
    54 if (!defined $toTime) {
    55     $toTime = "2099-12-31";
    56     print "* OPTIONAL: to time                             -t <dateTime>        (default = $toTime)\n";
    57 }
    58 if (!defined $filePath) {
    59     print "* OPTIONAL: location for files to be deleted    -l <path>\n";
    60 }
    61 if (!defined $onlyCheckMerged) {
    62     $onlyCheckMerged = 0;
    63     print "* OPTIONAL: only check merged batches           -m                   (default = $onlyCheckMerged)\n";
    64 }
    65 if (!defined $onlyCheckMergeWorthy) {
    66     $onlyCheckMergeWorthy = 0;
    67     print "* OPTIONAL: only check merge worthy batches     -w                   (default = $onlyCheckMergeWorthy)\n";
    68 }
    69 if (!defined $onlyCheckUndeleted) {
    70     $onlyCheckUndeleted = 0;
    71     print "* OPTIONAL: only check undeleted batches        -u                   (default = $onlyCheckUndeleted)\n";
    72 }
    73 if (!defined $removeUnprocessed) {
    74     $removeUnprocessed = 0;
    75     print "* OPTIONAL: remove unprocessed files            -r                   (default = $removeUnprocessed)\n";
    76 }
    77 if (!defined $verbose) {
    78     $verbose = 0;
    79     print "* OPTIONAL: run in verbose mode                 -v                   (default = $verbose)\n";
    80 }
    81 if (!defined $save_temps) {
    82     $save_temps = 0;
    83     print "* OPTIONAL: keep temp files                     -t                   (default = $save_temps)\n";
    84 }
    85 
    86 
    87 my $datastore = new ippToPsps::Datastore($product, 0, 0);
    88 my $ippToPspsDb = new ippToPsps::IppToPspsDb("ippToPsps", "ippdb01", "ipp", "ipp", $verbose, $save_temps);
    8919my $odmUrl = "http://web01.psps.ifa.hawaii.edu/a01/OdmWebService/OdmWebService.asmx/GetBatchStatus";
    9020my $ua = LWP::UserAgent->new;
     
    9222$ua->env_proxy;
    9323
     24my $loadedToOdm;
     25my $loadFailed;
     26my $mergeWorthy;
     27my $merged;
    9428
    95 process();
     29my $statusFilter = "*";
    9630
    97 #######################################################################################
    98 #
    99 # Loops through all processed exposures and checks against the ODM, then deletes if necessary
    100 #
    101 ########################################################################################
    102 sub process {
     31my $response = $ua->post($odmUrl,
     32        [batchNameFilter => "%".$batchName,
     33        statusFilter => $statusFilter,
     34        fromFilter => "2010-01-01",
     35        toFilter => "2099-01-01"]
     36        );
    10337
    104     my $batches;
    105     my $numOfBatches;
     38# '200' is the 'OK' response
     39if ($response->code != 200) {
    10640
    107     if (defined $singleBatch ) { $numOfBatches = $ippToPspsDb->getBatch($singleBatch, \$batches);}
    108     else { $numOfBatches = $ippToPspsDb->getBatches(\$batches, $fromTime, $toTime);}
     41    print "Problem connecting to web service for '$batchName', HTTP response status: ".$response->status_line."\n";
     42    exit(1);
     43}
     44#        print( "HTTP response status: ".$response->content."\n" );
    10945
    110     if ($numOfBatches < 1) {return 0;}
     46open (DAT, ">".$file);
     47#my ($tempFile, $tempName) = tempfile( "/tmp/ippToPsps_odmXml.XXXX", UNLINK => 0);
     48print DAT $response->content;
     49#print $response->content;
     50#close($tempFile);
    11151
    112     print "\n";
    113     printf("+----------------------+--------------+--------------+----------------+--------------+--------------+---------+----------+\n");
    114     printf("|      Timestamp       |    Batch     |  Exposure ID | Loaded to ODM? | Load failed? |Merge worthy? | Merged? | Deleted? |\n");
    115     printf("+----------------------+--------------+--------------+----------------+--------------+--------------+---------+----------+\n");
     52#${$loadedToOdm} = 0;
     53#${$loadFailed} = 0;
     54#${$mergeWorthy} = 0;
     55#${$merged} = 0;
    11656
    117     # loop round batches
    118     my $batch;
    119     my $numBatchesToCheck = 0;
    120     my $numChecked = 0;
    121     my $numRemovedFromDatastore = 0;
    122     my $numDeleted = 0;
    123     my $newMerged = 0;
    124     foreach $batch ( @{$batches} ) {
    125         my ($timestamp,
    126                 $type,
    127                 $expId,
    128                 $batchId,
    129                 $surveyType,
    130                 $deleted,
    131                 $dvoDb,
    132                 $processed,
    133                 $onDatastore,
    134                 $loadedToOdm,
    135                 $loadFailed,
    136                 $mergeWorthy,
    137                 $merged) = @{$batch};
     57print "$file\n";
     58#parseXml($tempName, $loadedToOdm, $loadFailed, $mergeWorthy, $merged);
    13859
    139         if (!$onDatastore) {next;}
    140         if ($onlyCheckUndeleted && $deleted) {next;}
    141         if ($onlyCheckMergeWorthy && (!$mergeWorthy || $merged)) {next;}
    142         if ($onlyCheckMerged && !$merged) {next;}
     60exit(0);
    14361
    144         my $batch = ippToPsps::Batch->existing(
    145                 undef,
    146                 undef,
    147                 $batchId,
    148                 $ippToPspsDb,
    149                 $filePath,
    150                 $verbose,
    151                 $save_temps);
     62    #unlink($tempFile);
    15263
    153         if (!$processed) {
    154 
    155             if ($removeUnprocessed && defined $filePath) {
    156 
    157                 if ($batch->deleteDir()) {$numDeleted++;}
    158             }
    159             next;
    160         }
    161 
    162         $numBatchesToCheck++;
    163 
    164         # if not merged or failed load, then update by polling ODM for status
    165         if (!$merged && !$loadFailed) {
    166             if (checkODM($batch->getName(), \$loadedToOdm, \$loadFailed, \$mergeWorthy, \$merged)) {
    167                
    168                 $numChecked++;
    169                 if ($merged) {$newMerged++;}
    170             }
    171             else {next;}
    172         }
    173 
    174         # delete from datastore
    175         if (defined $product && !$deleted && $loadedToOdm && ($mergeWorthy || $loadFailed)) {
    176 
    177 
    178             $deleted = $datastore->remove($batch->getName());
    179             if ($deleted) {
    180                 $ippToPspsDb->setBatchAsDeleted($batchId, $expId);
    181                 $numRemovedFromDatastore++;
    182             }
    183         }
    184         # if merged and already removed from datastore then delete files
    185         if (defined $filePath && $mergeWorthy && $deleted) {
    186 
    187             if($batch->deleteFile($batchId)) {$numDeleted++;}
    188         }
    189 
    190         # update database
    191         $ippToPspsDb->updateODMStatus($batchId, $expId, $loadedToOdm, $loadFailed, $mergeWorthy, $merged, $deleted);
    192         printf( "| %18s  | %11s  | %10d   |    %6s      |    %6s    |   %6s     | %6s  |  %5s   |\n",
    193                 $timestamp,
    194                 $batch->getName(),
    195                 $expId,
    196                 $loadedToOdm ? "yes" : "no",
    197                 $loadFailed ? "yes" : "no",
    198                 $mergeWorthy ? "yes" : "no",
    199                 $merged ? "yes" : "no",
    200                 $deleted ? "yes" : "no");
    201     }
    202 
    203     printf("+----------------------+--------------+--------------+----------------+--------------+--------------+---------+----------+\n");
    204     printf( "* Successfully checked %d batch%s out of %d\n", $numChecked, ($numChecked==1) ? "" : "es", $numBatchesToCheck);
    205     printf( "* %d newly merged batches\n", $newMerged);
    206     printf( "* Successfully removed %d batch%s from the datastore\n", $numRemovedFromDatastore, ($numRemovedFromDatastore==1) ? "" : "es");
    207     printf( "* Successfully deleted %d batch%s from local file system\n", $numDeleted, ($numDeleted==1) ? "" : "es");
    208 
    209 }
    210 
    211 ########################################################################################
    212 #
    213 # Check a single batch
    214 #
    215 ########################################################################################
    216 sub checkODM {
    217     my ($batchName, $loadedToOdm, $loadFailed, $mergeWorthy, $merged) = @_;
    218 
    219     my $statusFilter = "*";
    220 
    221     my $response = $ua->post($odmUrl,
    222             [batchNameFilter => "%".$batchName,
    223             statusFilter => $statusFilter,
    224             fromFilter => "2010-01-01",
    225             toFilter => "2099-01-01"]
    226             );
    227 
    228     # '200' is the 'OK' response
    229     if ($response->code != 200) {
    230 
    231         print "Problem connecting to web service for '$batchName', HTTP response status: ".$response->status_line."\n";
    232         return 0;
    233     }
    234     #        print( "HTTP response status: ".$response->content."\n" );
    235 
    236     my ($tempFile, $tempName) = tempfile( "/tmp/ippToPsps_odmXml.XXXX", UNLINK => !$save_temps);
    237     if ($verbose) {print $response->content. "\n";}
    238     print $tempFile $response->content;
    239     close($tempFile);
    240 
    241     ${$loadedToOdm} = 0;
    242     ${$loadFailed} = 0;
    243     ${$mergeWorthy} = 0;
    244     ${$merged} = 0;
    245 
    246     parseXml($tempName, $loadedToOdm, $loadFailed, $mergeWorthy, $merged);
    247 
    248     unlink($tempFile);
    249 
    250     return 1;
    251 }
    25264
    25365########################################################################################
     
    25668#
    25769########################################################################################
    258 sub parseXml {
    259     my ($xmlFile, $loadedToOdm, $loadFailed, $mergeWorthy, $merged) = @_;
     70    sub parseXml {
     71        my ($xmlFile, $loadedToOdm, $loadFailed, $mergeWorthy, $merged) = @_;
    26072
    261     my $parser = XML::LibXML->new;
    262     my $doc = $parser->parse_file($xmlFile);
    263     my $xc = XML::LibXML::XPathContext->new($doc);
    264     $xc->registerNs('ArrayOfOdmBatchState', 'PanSTARRS.Services.OdmWebService');
    265     my $result = $xc->findvalue('//ArrayOfOdmBatchState:BatchState');
     73        my $parser = XML::LibXML->new;
     74        my $doc = $parser->parse_file($xmlFile);
     75        my $xc = XML::LibXML::XPathContext->new($doc);
     76        $xc->registerNs('ArrayOfOdmBatchState', 'PanSTARRS.Services.OdmWebService');
     77        my $result = $xc->findvalue('//ArrayOfOdmBatchState:BatchState');
    26678
    267     if ($result =~ m/failed/) {
    268         ${$loadFailed} = 1;
    269         ${$loadedToOdm} = 1;
    270     return;
     79        if ($result =~ m/failed/) {
     80            ${$loadFailed} = 1;
     81            ${$loadedToOdm} = 1;
     82            return;
     83        }
     84
     85        $result = $xc->findvalue('//ArrayOfOdmBatchState:Message');
     86        ${$loadedToOdm} = 0;
     87        ${$mergeWorthy} = 0;
     88        ${$merged} = 0;
     89
     90        if ($result =~ m/None/) { ${$loadedToOdm} = 1;}
     91        if ($result =~ m/LoadStarted/) { ${$loadedToOdm} = 1;}
     92        if ($result =~ m/MergeWorthy/) { ${$loadedToOdm} = 1; ${$mergeWorthy} = 1;}
     93        if ($result =~ m/Merge[1-9]Completed/) { ${$loadedToOdm} = 1; ${$mergeWorthy} = 1; ${$merged} = 1;}
     94
     95
     96
    27197    }
    272 
    273     $result = $xc->findvalue('//ArrayOfOdmBatchState:Message');
    274     ${$loadedToOdm} = 0;
    275     ${$mergeWorthy} = 0;
    276     ${$merged} = 0;
    277 
    278     if ($result =~ m/None/) { ${$loadedToOdm} = 1;}
    279     if ($result =~ m/LoadStarted/) { ${$loadedToOdm} = 1;}
    280     if ($result =~ m/MergeWorthy/) { ${$loadedToOdm} = 1; ${$mergeWorthy} = 1;}
    281     if ($result =~ m/Merge[1-9]Completed/) { ${$loadedToOdm} = 1; ${$mergeWorthy} = 1; ${$merged} = 1;}
    282 }
    283 
Note: See TracChangeset for help on using the changeset viewer.