// Read the history from the specified history file, or from all the history files. // There are multiple history files because we do rotation. static void readHistoryFromFiles(char *JobHistoryFileName, char* constraint, ExprTree *constraintExpr) { // Print header if ((!longformat) && (!customFormat)) { short_header(); } if (JobHistoryFileName) { // If the user specified the name of the file to read, we read that file only. readHistoryFromFile(JobHistoryFileName, constraint, constraintExpr); } else { // The user didn't specify the name of the file to read, so we read // the history file, and any backups (rotated versions). int numHistoryFiles; const char **historyFiles; historyFiles = findHistoryFiles(&numHistoryFiles); if (historyFiles && numHistoryFiles > 0) { int fileIndex; if (backwards) { // Reverse reading of history files array for(fileIndex = numHistoryFiles - 1; fileIndex >= 0; fileIndex--) { readHistoryFromFile(historyFiles[fileIndex], constraint, constraintExpr); } } else { for (fileIndex = 0; fileIndex < numHistoryFiles; fileIndex++) { readHistoryFromFile(historyFiles[fileIndex], constraint, constraintExpr); } } } freeHistoryFilesList(historyFiles); } return; }
// Read the history from the specified history file, or from all the history files. // There are multiple history files because we do rotation. static void readHistoryFromFiles(bool fileisuserlog, const char *JobHistoryFileName, const char* constraint, ExprTree *constraintExpr) { printHeader(); if (JobHistoryFileName) { if (fileisuserlog) { ClassAdList jobs; if ( ! userlog_to_classads(JobHistoryFileName, jobs, NULL, 0, constraint)) { fprintf(stderr, "Error: Can't open userlog %s\n", JobHistoryFileName); exit(1); } printJobAds(jobs); jobs.Clear(); } else { // If the user specified the name of the file to read, we read that file only. readHistoryFromFileEx(JobHistoryFileName, constraint, constraintExpr, backwards); } } else { // The user didn't specify the name of the file to read, so we read // the history file, and any backups (rotated versions). int numHistoryFiles; const char **historyFiles; historyFiles = findHistoryFiles("HISTORY", &numHistoryFiles); if (!historyFiles) { fprintf( stderr, "Error: No history file is defined\n"); fprintf(stderr, "\n"); print_wrapped_text("Extra Info: " "The variable HISTORY is not defined in " "your config file. If you want Condor to " "keep a history of past jobs, you must " "define HISTORY in your config file", stderr ); exit(1); } if (historyFiles && numHistoryFiles > 0) { int fileIndex; if (backwards) { // Reverse reading of history files array for(fileIndex = numHistoryFiles - 1; fileIndex >= 0; fileIndex--) { readHistoryFromFileEx(historyFiles[fileIndex], constraint, constraintExpr, backwards); } } else { for (fileIndex = 0; fileIndex < numHistoryFiles; fileIndex++) { readHistoryFromFileEx(historyFiles[fileIndex], constraint, constraintExpr, backwards); } } freeHistoryFilesList(historyFiles); } } return; }