Changeset 32069 for trunk/ippToPsps/perl/checkOdmStatus.pl
- Timestamp:
- Aug 10, 2011, 11:44:13 AM (15 years ago)
- File:
-
- 1 edited
-
trunk/ippToPsps/perl/checkOdmStatus.pl (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ippToPsps/perl/checkOdmStatus.pl
r30434 r32069 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 $loadedToOdm; 25 my $loadFailed; 26 my $mergeWorthy; 27 my $merged; 94 28 95 process();29 my $statusFilter = "*"; 96 30 97 ####################################################################################### 98 # 99 # Loops through all processed exposures and checks against the ODM, then deletes if necessary 100 # 101 ######################################################################################## 102 sub process { 31 my $response = $ua->post($odmUrl, 32 [batchNameFilter => "%".$batchName, 33 statusFilter => $statusFilter, 34 fromFilter => "2010-01-01", 35 toFilter => "2099-01-01"] 36 ); 103 37 104 my $batches; 105 my $numOfBatches; 38 # '200' is the 'OK' response 39 if ($response->code != 200) { 106 40 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" ); 109 45 110 if ($numOfBatches < 1) {return 0;} 46 open (DAT, ">".$file); 47 #my ($tempFile, $tempName) = tempfile( "/tmp/ippToPsps_odmXml.XXXX", UNLINK => 0); 48 print DAT $response->content; 49 #print $response->content; 50 #close($tempFile); 111 51 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; 116 56 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}; 57 print "$file\n"; 58 #parseXml($tempName, $loadedToOdm, $loadFailed, $mergeWorthy, $merged); 138 59 139 if (!$onDatastore) {next;} 140 if ($onlyCheckUndeleted && $deleted) {next;} 141 if ($onlyCheckMergeWorthy && (!$mergeWorthy || $merged)) {next;} 142 if ($onlyCheckMerged && !$merged) {next;} 60 exit(0); 143 61 144 my $batch = ippToPsps::Batch->existing( 145 undef, 146 undef, 147 $batchId, 148 $ippToPspsDb, 149 $filePath, 150 $verbose, 151 $save_temps); 62 #unlink($tempFile); 152 63 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 status165 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 datastore175 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 files185 if (defined $filePath && $mergeWorthy && $deleted) {186 187 if($batch->deleteFile($batchId)) {$numDeleted++;}188 }189 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 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 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 64 253 65 ######################################################################################## … … 256 68 # 257 69 ######################################################################################## 258 sub parseXml {259 my ($xmlFile, $loadedToOdm, $loadFailed, $mergeWorthy, $merged) = @_;70 sub parseXml { 71 my ($xmlFile, $loadedToOdm, $loadFailed, $mergeWorthy, $merged) = @_; 260 72 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'); 266 78 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 271 97 } 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.
