Changeset 30049 for trunk/ippTools/src/regtool.c
- Timestamp:
- Dec 15, 2010, 1:29:28 PM (15 years ago)
- Location:
- trunk
- Files:
-
- 3 edited
-
. (modified) (1 prop)
-
ippTools/src (modified) (1 prop)
-
ippTools/src/regtool.c (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk
- Property svn:mergeinfo changed
/branches/czw_branch/20101203 (added) merged: 29907-29909,29965,29982,30014,30017-30018,30047-30048
- Property svn:mergeinfo changed
-
trunk/ippTools/src
- Property svn:mergeinfo changed
/branches/czw_branch/20101203/ippTools/src (added) merged: 29908,29965,29982,30014
- Property svn:mergeinfo changed
-
trunk/ippTools/src/regtool.c
r27748 r30049 34 34 static bool pendingimfileMode(pxConfig *config); 35 35 static bool addprocessedimfileMode(pxConfig *config); 36 static bool checkburntoolimfileMode(pxConfig *config); 37 static bool pendingburntoolimfileMode(pxConfig *config); 36 38 static bool processedimfileMode(pxConfig *config); 37 39 static bool revertprocessedimfileMode(pxConfig *config); … … 72 74 // imfile 73 75 MODECASE(REGTOOL_MODE_PENDINGIMFILE, pendingimfileMode); 76 MODECASE(REGTOOL_MODE_CHECKBURNTOOLIMFILE, checkburntoolimfileMode); 77 MODECASE(REGTOOL_MODE_PENDINGBURNTOOLIMFILE, pendingburntoolimfileMode); 74 78 MODECASE(REGTOOL_MODE_ADDPROCESSEDIMFILE, addprocessedimfileMode); 75 79 MODECASE(REGTOOL_MODE_PROCESSEDIMFILE, processedimfileMode); … … 176 180 } 177 181 182 static bool checkburntoolimfileMode(pxConfig *config) 183 { 184 PS_ASSERT_PTR_NON_NULL(config,false); 185 186 // required 187 PXOPT_LOOKUP_STR(exp_name, config->args, "-exp_name", true, false); 188 PXOPT_LOOKUP_STR(class_id, config->args, "-class_id", true, false); 189 PXOPT_LOOKUP_STR(date, config->args, "-date", true, false); 190 PXOPT_LOOKUP_S32(valid_burntool, config->args, "-valid_burntool", true, false); 191 // optional 192 PXOPT_LOOKUP_STR(camera, config->args, "-inst", false, false); 193 PXOPT_LOOKUP_STR(telescope, config->args, "-telescope", false, false); 194 PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false); 195 psString query = pxDataGet("regtool_checkburntoolimfile.sql"); 196 if (!query) { 197 psError(PXTOOLS_ERR_SYS, false, "failed to retrieve SQL statement"); 198 return false; 199 } 200 psString rep = psStringCopy(query); 201 psFree(query); 202 query = rep; 203 204 psStringSubstitute(&query,exp_name,"@EXP_NAME@"); 205 psStringSubstitute(&query,class_id,"@CLASS_ID@"); 206 psStringSubstitute(&query,date,"@DATE@"); 207 208 fprintf(stderr,"%s",query); 209 210 if (!p_psDBRunQuery(config->dbh, query)) { 211 // XXX PS_EXIT_PROG_ERROR (incorrect SQL) or SYS_ERROR (database comms) 212 psError(PXTOOLS_ERR_PROG, false, "database error"); 213 psFree(query); 214 return false; 215 } 216 psFree(query); 217 218 psArray *output = p_psDBFetchResult(config->dbh); 219 if (!output) { 220 psErrorCode err = psErrorCodeLast(); 221 switch (err) { 222 case PS_ERR_DB_CLIENT: 223 psError(PXTOOLS_ERR_SYS, false, "database error"); 224 case PS_ERR_DB_SERVER: 225 psError(PXTOOLS_ERR_PROG, false, "database error"); 226 default: 227 psError(PXTOOLS_ERR_PROG, false, "unknown error"); 228 } 229 230 return false; 231 } 232 if (!psArrayLength(output)) { 233 psTrace("regtool", PS_LOG_INFO, "no rows found"); 234 psFree(output); 235 return true; 236 } 237 238 psString previous_uri = NULL; 239 bool ok_to_burn = true; 240 bool already_burned = true; 241 for (long i = 0; i < output->n; i++) { 242 psMetadata *row = output->data[i]; 243 244 if ((psMetadataLookupS32(NULL,row,"is_downloaded") != 1)|| 245 (psMetadataLookupS32(NULL,row,"is_registered") != 1)) { 246 ok_to_burn = false; 247 } 248 if (already_burned == false) { 249 ok_to_burn = false; 250 } 251 if (abs(psMetadataLookupS32(NULL,row,"burntool_state")) == valid_burntool) { 252 already_burned = true; 253 } 254 else { 255 already_burned = false; 256 } 257 258 if (previous_uri) { 259 psMetadataAddStr(row,PS_LIST_TAIL,"previous_uri",PS_META_REPLACE,"",previous_uri); 260 psFree(previous_uri); 261 } 262 psMetadataAddBool(row,PS_LIST_TAIL,"burnable",PS_META_REPLACE,"",ok_to_burn); 263 psMetadataAddBool(row,PS_LIST_TAIL,"already_burned",PS_META_REPLACE,"",already_burned); 264 previous_uri = psStringCopy(psMetadataLookupStr(NULL,row,"uri")); 265 } 266 267 // negate simple so the default is true 268 if (!ippdbPrintMetadatas(stdout, output, "regBurntoolImfile", !simple)) { 269 psError(PXTOOLS_ERR_PROG, false, "failed to print array"); 270 psFree(output); 271 return false; 272 } 273 274 psFree(output); 275 276 277 return(true); 278 279 } 280 281 static bool pendingburntoolimfileMode(pxConfig *config) 282 { 283 PS_ASSERT_PTR_NON_NULL(config,false); 284 285 // required 286 PXOPT_LOOKUP_STR(date, config->args, "-date", true, false); 287 PXOPT_LOOKUP_S32(valid_burntool, config->args, "-valid_burntool", true, false); 288 // optional 289 PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false); 290 PXOPT_LOOKUP_BOOL(ignore_state, config->args, "-ignore_state", false); 291 psString query = pxDataGet("regtool_pendingburntoolimfile.sql"); 292 if (!query) { 293 psError(PXTOOLS_ERR_SYS, false, "failed to retrieve SQL statement"); 294 return false; 295 } 296 psString rep = psStringCopy(query); 297 psFree(query); 298 query = rep; 299 300 psStringSubstitute(&query,date,"@DATE@"); 301 302 fprintf(stderr,"%s",query); 303 304 if (!p_psDBRunQuery(config->dbh, query)) { 305 // XXX PS_EXIT_PROG_ERROR (incorrect SQL) or SYS_ERROR (database comms) 306 psError(PXTOOLS_ERR_PROG, false, "database error"); 307 psFree(query); 308 return false; 309 } 310 psFree(query); 311 312 psArray *output = p_psDBFetchResult(config->dbh); 313 if (!output) { 314 psErrorCode err = psErrorCodeLast(); 315 switch (err) { 316 case PS_ERR_DB_CLIENT: 317 psError(PXTOOLS_ERR_SYS, false, "database error"); 318 case PS_ERR_DB_SERVER: 319 psError(PXTOOLS_ERR_PROG, false, "database error"); 320 default: 321 psError(PXTOOLS_ERR_PROG, false, "unknown error"); 322 } 323 324 return false; 325 } 326 if (!psArrayLength(output)) { 327 psTrace("regtool", PS_LOG_INFO, "no rows found"); 328 psFree(output); 329 return true; 330 } 331 332 psString previous_uri = NULL; 333 psString this_uri = NULL; 334 bool ok_to_burn = true; 335 bool already_burned = true; 336 psString previous_class_id = NULL; 337 psString this_class_id = NULL; 338 psArray *results = psArrayAllocEmpty(60); // List of suggested imfiles to burntool. 339 340 for (long i = 0; i < output->n; i++) { 341 psMetadata *row = output->data[i]; 342 343 // Add the information about this row and the previous, if it exists. 344 // Write the class_id stuff for debugging. 345 this_class_id = psStringCopy(psMetadataLookupStr(NULL,row,"tmp_class_id")); 346 psStringSubstitute(&this_class_id,"XY","ota"); 347 psMetadataAddStr(row,PS_LIST_TAIL,"this_class_id",PS_META_REPLACE,"",this_class_id); 348 if (previous_class_id) { 349 psMetadataAddStr(row,PS_LIST_TAIL,"previous_class_id",PS_META_REPLACE,"",previous_class_id); 350 } 351 352 // Determine if we've crossed a class_id boundary, as this resets the bits. 353 if (previous_class_id) { 354 if (strcmp(this_class_id,previous_class_id) != 0) { 355 ok_to_burn = true; 356 already_burned = true; 357 previous_uri = NULL; 358 } 359 } 360 361 // Write the URIs as well. 362 this_uri = psStringCopy(psMetadataLookupStr(NULL,row,"uri")); // Duplicate, but helpful for my debugging. 363 psMetadataAddStr(row,PS_LIST_TAIL,"this_uri",PS_META_REPLACE,"",this_uri); 364 if (previous_uri) { 365 psMetadataAddStr(row,PS_LIST_TAIL,"previous_uri",PS_META_REPLACE,"",previous_uri); 366 } 367 368 // Check the two status variables 369 // Convert bits of the SQL query into booleans describing the data state 370 if ((psMetadataLookupS32(NULL,row,"is_downloaded") != 1)|| 371 (psMetadataLookupS32(NULL,row,"is_registered") != 1)) { 372 ok_to_burn = false; 373 } 374 if (already_burned == false) { 375 ok_to_burn = false; 376 } 377 if (abs(psMetadataLookupS32(NULL,row,"burntool_state")) == valid_burntool) { 378 already_burned = true; 379 } 380 else { 381 already_burned = false; 382 } 383 psMetadataAddBool(row,PS_LIST_TAIL,"burnable",PS_META_REPLACE,"",ok_to_burn); 384 psMetadataAddBool(row,PS_LIST_TAIL,"already_burned",PS_META_REPLACE,"",already_burned); 385 386 // Check the uri for this exposure 387 if (!this_uri) { 388 ok_to_burn = false; 389 already_burned = false; 390 391 // Save this round for next round. 392 psFree(previous_class_id); 393 psFree(previous_uri); 394 previous_class_id = psStringCopy(psMetadataLookupStr(NULL,row,"tmp_class_id")); 395 psStringSubstitute(&previous_class_id,"XY","ota"); 396 previous_uri = psStringCopy(psMetadataLookupStr(NULL,row,"uri")); // Save for next round. 397 continue; 398 } 399 400 // printf("STATUS: %s %s %s %s (%d %d)\n",this_uri,previous_uri,this_class_id,previous_class_id,ok_to_burn,already_burned); 401 402 // If the state of this imfile is not "pending_burntool" then we can't burn it. 403 if (!ignore_state) { 404 psString imfile_state = psMetadataLookupStr(NULL,row,"imfile_state"); 405 406 if (!imfile_state) { // imfile state is NULL, so we probably aren't registered. 407 ok_to_burn = false; 408 409 // Save this round for next round. 410 psFree(previous_class_id); 411 psFree(previous_uri); 412 previous_class_id = psStringCopy(psMetadataLookupStr(NULL,row,"tmp_class_id")); 413 psStringSubstitute(&previous_class_id,"XY","ota"); 414 previous_uri = psStringCopy(psMetadataLookupStr(NULL,row,"uri")); // Save for next round. 415 continue; 416 } 417 if (strcmp("pending_burntool",imfile_state) != 0) { // Probably the state is full, do not twiddle states 418 // Save this round for next round. 419 psFree(previous_class_id); 420 psFree(previous_uri); 421 previous_class_id = psStringCopy(psMetadataLookupStr(NULL,row,"tmp_class_id")); 422 psStringSubstitute(&previous_class_id,"XY","ota"); 423 previous_uri = psStringCopy(psMetadataLookupStr(NULL,row,"uri")); // Save for next round. 424 continue; 425 } 426 } 427 428 // Determine if we've already suggested an entry for this ota, and if not, copy this 429 // suggestion into our output result list. 430 if (!ok_to_burn || already_burned) { 431 // Save this round for next round. 432 psFree(previous_class_id); 433 psFree(previous_uri); 434 previous_class_id = psStringCopy(psMetadataLookupStr(NULL,row,"tmp_class_id")); 435 psStringSubstitute(&previous_class_id,"XY","ota"); 436 previous_uri = psStringCopy(psMetadataLookupStr(NULL,row,"uri")); // Save for next round. 437 continue; 438 } 439 // If we're here, then we think we could potentially burntool this file. 440 psArrayAdd(results,results->n,row); 441 442 // Save this round for next round. 443 psFree(previous_class_id); 444 psFree(previous_uri); 445 previous_class_id = psStringCopy(psMetadataLookupStr(NULL,row,"tmp_class_id")); 446 psStringSubstitute(&previous_class_id,"XY","ota"); 447 previous_uri = psStringCopy(psMetadataLookupStr(NULL,row,"uri")); // Save for next round. 448 } 449 450 // negate simple so the default is true 451 if (!ippdbPrintMetadatas(stdout, results, "regPendingBurntoolImfile", !simple)) { 452 psError(PXTOOLS_ERR_PROG, false, "failed to print array"); 453 psFree(output); 454 psFree(results); 455 return false; 456 } 457 458 psFree(output); 459 psFree(results); 460 461 462 return(true); 463 464 } 465 466 178 467 179 468 static bool addprocessedimfileMode(pxConfig *config) … … 250 539 PXOPT_LOOKUP_S32(bytes, config->args, "-bytes", false, false); 251 540 PXOPT_LOOKUP_STR(md5sum, config->args, "-md5sum", false, false); 252 541 PXOPT_LOOKUP_BOOL(video_cells, config->args, "-video_cells", false); 542 253 543 PXOPT_LOOKUP_S16(fault, config->args, "-fault", false, false); 254 544 PXOPT_LOOKUP_S16(quality, config->args, "-quality", false, false); … … 323 613 bytes, 324 614 md5sum, 615 video_cells, 325 616 0 // burntool_state 326 617 )) { … … 809 1100 PXOPT_LOOKUP_F32(moon_phase, config->args, "-moon_phase", false, false); 810 1101 PXOPT_LOOKUP_STR(label, config->args, "-label", false, false); 1102 PXOPT_LOOKUP_STR(data_group, config->args, "-data_group", false, false); 1103 PXOPT_LOOKUP_STR(dist_group, config->args, "-dist_group", false, false); 1104 PXOPT_LOOKUP_STR(chip_workdir,config->args, "-chip_workdir", false, false); 811 1105 PXOPT_LOOKUP_STR(hostname, config->args, "-hostname", false, false); 812 1106 … … 1008 1302 // else continue on... 1009 1303 1010 1304 chip_workdir = chip_workdir ? chip_workdir : workdir; 1011 1305 // insert an entry into the chipPendingExp table 1012 1306 // this can only be run as the newExp's state has been set to stop 1013 1307 if (!pxchipQueueByExpTag(config, 1014 1308 exp_id, 1015 workdir,1309 chip_workdir, 1016 1310 label, 1017 NULL, // data_group 1018 NULL, // dist_group 1311 data_group, 1312 dist_group, 1019 1313 reduction, 1020 1314 NULL, // expgroup … … 1092 1386 PXOPT_COPY_F64(config->args, where, "-posang_min", "posang", ">="); 1093 1387 PXOPT_COPY_F64(config->args, where, "-posang_max", "posang", "<"); 1094 PXOPT_COPY_STR(config->args, where, "-object", "object", "=="); 1388 PXOPT_COPY_STR(config->args, where, "-object", "object", "LIKE"); 1389 PXOPT_COPY_STR(config->args, where, "-obs_mode", "obs_mode", "LIKE"); 1390 PXOPT_COPY_STR(config->args, where, "-comment", "comment", "LIKE"); 1095 1391 PXOPT_COPY_F32(config->args, where, "-sun_angle_min", "sun_angle", ">="); 1096 1392 PXOPT_COPY_F32(config->args, where, "-sun_angle_max", "sun_angle", "<");
Note:
See TracChangeset
for help on using the changeset viewer.
