MyString MultiLogFiles::loadValueFromSubFile(const MyString &strSubFilename, const MyString &directory, const char *keyword) { dprintf( D_FULLDEBUG, "MultiLogFiles::loadValueFromSubFile(%s, %s, %s)\n", strSubFilename.Value(), directory.Value(), keyword ); TmpDir td; if ( directory != "" ) { MyString errMsg; if ( !td.Cd2TmpDir(directory.Value(), errMsg) ) { dprintf(D_ALWAYS, "Error from Cd2TmpDir: %s\n", errMsg.Value()); return ""; } } StringList logicalLines; if ( fileNameToLogicalLines( strSubFilename, logicalLines ) != "" ) { return ""; } MyString value(""); // Now look through the submit file logical lines to find the // value corresponding to the keyword. const char *logicalLine; while( (logicalLine = logicalLines.next()) != NULL ) { MyString submitLine(logicalLine); MyString tmpValue = getParamFromSubmitLine(submitLine, keyword); if ( tmpValue != "" ) { value = tmpValue; } } // // Check for macros in the value -- we currently don't // handle those. // if ( value != "" ) { if ( strchr(value.Value(), '$') ) { dprintf(D_ALWAYS, "MultiLogFiles: macros not allowed " "in %s in DAG node submit files\n", keyword); value = ""; } } if ( directory != "" ) { MyString errMsg; if ( !td.Cd2MainDir(errMsg) ) { dprintf(D_ALWAYS, "Error from Cd2MainDir: %s\n", errMsg.Value()); return ""; } } return value; }
int MultiLogFiles::getQueueCountFromSubmitFile(const MyString &strSubFilename, const MyString &directory, MyString &errorMsg) { dprintf( D_FULLDEBUG, "MultiLogFiles::getQueueCountFromSubmitFile(%s, %s)\n", strSubFilename.Value(), directory.Value() ); int queueCount = 0; errorMsg = ""; MyString fullpath(""); if ( directory != "" ) { fullpath = directory + DIR_DELIM_STRING + strSubFilename; } else { fullpath = strSubFilename; } StringList logicalLines; if ( (errorMsg = fileNameToLogicalLines( strSubFilename, logicalLines)) != "" ) { return -1; } // Now look through the submit file logical lines to find any // queue commands, and count up the total number of job procs // to be queued. const char * paramName = "queue"; const char *logicalLine; while( (logicalLine = logicalLines.next()) != NULL ) { MyString submitLine(logicalLine); submitLine.Tokenize(); const char *DELIM = " "; const char *rawToken = submitLine.GetNextToken( DELIM, true ); if ( rawToken ) { MyString token(rawToken); token.trim(); if ( !strcasecmp(token.Value(), paramName) ) { rawToken = submitLine.GetNextToken( DELIM, true ); if ( rawToken ) { queueCount += atoi( rawToken ); } else { queueCount++; } } } } return queueCount; }
DEFiRet; if(runModConf->bLogToSyslog) doSubmitMsg((uchar*)ln); if(runModConf->logfile != NULL) doLogToFile(ln, lenLn); RETiRet; } /* callback for statsobj * Note: usrptr exists only to satisfy requirements of statsobj callback interface! */ static rsRetVal doStatsLine(void __attribute__((unused)) *usrptr, const char *const str) { DEFiRet; iRet = submitLine(str, strlen(str)); RETiRet; } /* the function to generate the actual statistics messages * rgerhards, 2010-09-09 */ static void generateStatsMsgs(void) { struct rusage ru; int r; r = getrusage(RUSAGE_SELF, &ru); if(r != 0) { dbgprintf("impstats: getrusage() failed with error %d, zeroing out\n", errno);
/////////////////////////////////////////////////////////////////////////////// // Note: this method should get speeded up (see Gnats PR 846). MyString MultiLogFiles::loadLogFileNameFromSubFile(const MyString &strSubFilename, const MyString &directory, bool &isXml, bool usingDefaultNode) { dprintf( D_FULLDEBUG, "MultiLogFiles::loadLogFileNameFromSubFile(%s, %s)\n", strSubFilename.Value(), directory.Value() ); TmpDir td; if ( directory != "" ) { MyString errMsg; if ( !td.Cd2TmpDir(directory.Value(), errMsg) ) { dprintf(D_ALWAYS, "Error from Cd2TmpDir: %s\n", errMsg.Value()); return ""; } } StringList logicalLines; if ( fileNameToLogicalLines( strSubFilename, logicalLines ) != "" ) { return ""; } MyString logFileName(""); MyString initialDir(""); MyString isXmlLogStr(""); // Now look through the submit file logical lines to find the // log file and initial directory (if specified) and combine // them into a path to the log file that's either absolute or // relative to the DAG submit directory. Also look for log_xml. const char *logicalLine; while( (logicalLine = logicalLines.next()) != NULL ) { MyString submitLine(logicalLine); MyString tmpLogName = getParamFromSubmitLine(submitLine, "log"); if ( tmpLogName != "" ) { logFileName = tmpLogName; } // If we are using the default node log, we don't care // about these if( !usingDefaultNode ) { MyString tmpInitialDir = getParamFromSubmitLine(submitLine, "initialdir"); if ( tmpInitialDir != "" ) { initialDir = tmpInitialDir; } MyString tmpLogXml = getParamFromSubmitLine(submitLine, "log_xml"); if ( tmpLogXml != "" ) { isXmlLogStr = tmpLogXml; } } } if ( !usingDefaultNode ) { // // Check for macros in the log file name -- we currently don't // handle those. // // If we are using the default node, we don't need to check this if ( logFileName != "" ) { if ( strstr(logFileName.Value(), "$(") ) { dprintf(D_ALWAYS, "MultiLogFiles: macros ('$(...') not allowed " "in log file name (%s) in DAG node submit files\n", logFileName.Value()); logFileName = ""; } } // Do not need to prepend initialdir if we are using the // default node log if ( logFileName != "" ) { // Prepend initialdir to log file name if log file name is not // an absolute path. if ( initialDir != "" && !fullpath(logFileName.Value()) ) { logFileName = initialDir + DIR_DELIM_STRING + logFileName; } // We do this in case the same log file is specified with a // relative and an absolute path. // Note: we now do further checking that doesn't rely on // comparing paths to the log files. wenger 2004-05-27. CondorError errstack; if ( !makePathAbsolute( logFileName, errstack ) ) { dprintf(D_ALWAYS, "%s\n", errstack.getFullText().c_str()); return ""; } } isXmlLogStr.lower_case(); isXml = (isXmlLogStr == "true"); if ( directory != "" ) { MyString errMsg; if ( !td.Cd2MainDir(errMsg) ) { dprintf(D_ALWAYS, "Error from Cd2MainDir: %s\n", errMsg.Value()); return ""; } } } return logFileName; }