- Timestamp:
- Sep 6, 2011, 11:00:22 AM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branches/ipp-20110710/ippToPsps/perl/checkOdmStatus.pl
r30434 r32337 8 8 use XML::LibXML; 9 9 use File::Temp qw(tempfile); 10 use ippToPsps::IppToPspsDb;11 use ippToPsps::Datastore;12 use ippToPsps::Batch;13 10 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 11 my $batchName = undef; 12 my $file = undef; 26 13 27 14 GetOptions( 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, 39 17 ); 40 18 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);89 19 my $odmUrl = "http://web01.psps.ifa.hawaii.edu/a01/OdmWebService/OdmWebService.asmx/GetBatchStatus"; 90 20 my $ua = LWP::UserAgent->new; … … 92 22 $ua->env_proxy; 93 23 24 my $statusFilter = "*"; 94 25 95 process(); 26 my $response = $ua->post($odmUrl, 27 [batchNameFilter => "%".$batchName, 28 statusFilter => $statusFilter, 29 fromFilter => "2010-01-01", 30 toFilter => "2099-01-01"] 31 ); 96 32 97 ####################################################################################### 98 # 99 # Loops through all processed exposures and checks against the ODM, then deletes if necessary 100 # 101 ######################################################################################## 102 sub process { 33 # '200' is the 'OK' response 34 if ($response->code != 200) { 103 35 104 my $batches; 105 my $numOfBatches; 36 print "Problem connecting to web service for '$batchName', HTTP response status: ".$response->status_line."\n"; 37 exit(1); 38 } 106 39 107 if (defined $singleBatch ) { $numOfBatches = $ippToPspsDb->getBatch($singleBatch, \$batches);} 108 else { $numOfBatches = $ippToPspsDb->getBatches(\$batches, $fromTime, $toTime);} 109 110 if ($numOfBatches < 1) {return 0;} 111 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"); 116 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}; 138 139 if (!$onDatastore) {next;} 140 if ($onlyCheckUndeleted && $deleted) {next;} 141 if ($onlyCheckMergeWorthy && (!$mergeWorthy || $merged)) {next;} 142 if ($onlyCheckMerged && !$merged) {next;} 143 144 my $batch = ippToPsps::Batch->existing( 145 undef, 146 undef, 147 $batchId, 148 $ippToPspsDb, 149 $filePath, 150 $verbose, 151 $save_temps); 152 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)) { 40 open (DAT, ">".$file); 41 print DAT $response->content; 176 42 177 43 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) { 44 print "$file\n"; 186 45 187 if($batch->deleteFile($batchId)) {$numDeleted++;} 188 } 46 exit(0); 189 47 190 # update database191 $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 48 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 49 209 }210 211 ########################################################################################212 #213 # Check a single batch214 #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' response229 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 }252 253 ########################################################################################254 #255 # Parses ODM XML256 #257 ########################################################################################258 sub parseXml {259 my ($xmlFile, $loadedToOdm, $loadFailed, $mergeWorthy, $merged) = @_;260 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');266 267 if ($result =~ m/failed/) {268 ${$loadFailed} = 1;269 ${$loadedToOdm} = 1;270 return;271 }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.
