Changeset 10990 for trunk/FACT++
- Timestamp:
- 06/10/11 19:27:14 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/FACT++/src/dataLogger.cc
r10974 r10990 243 243 ///boolean to know whether we should close and reopen daily files or not 244 244 bool fDailyFileDayChangedAlready; 245 public: 246 /*************************************************** 247 * STATIC COMMAND NAMES 248 ***************************************************/ 249 ///Define all the static names 250 static const char* fConfigDay; 251 static const char* fConfigRun; 252 static const char* fConfigRunNumber; 253 static const char* fConfigLog; 254 static const char* fTransStart; 255 static const char* fTransStop; 256 static const char* fTransStartRun; 257 static const char* fTransStopRun; 258 static const char* fTransReset; 259 static const char* fTransWait; 260 static const char* fRunNumberInfo; ///< This is the name of the dimInfo received to specify the run number. It must be updated once the final name will be defined 261 static const char* fPrintCommand; 262 static const char* fDebugOnOff; 263 static const char* fStatsPeriod; 264 static const char* fStartStopOpenedFiles; 265 static const char* fStartStopNumSubsAndFits; 266 static const char* fSetRunTimeOutDelay; 245 267 246 private: 268 247 /*************************************************** … … 277 256 ///Reporting method for the services info received 278 257 void ReportPlease(DimInfo* I, SubscriptionType& sub); 258 259 int ConfigureFileName(string &target, const string &type, const EventImp &evt); 279 260 ///Configuration of the nightly file path 280 261 int ConfigureNightlyFileName(const Event& evt); … … 366 347 ///creates a group fits file based on a list of files to be grouped 367 348 void CreateFitsGrouping(map<string, vector<string> >& filesToGroup, int runNumber); 349 350 bool OpenStream(shared_ptr<ofstream> stream, const string &filename); 368 351 ///Open the relevant text files related to a particular run 369 352 int OpenRunFile(RunNumberType& run); … … 565 548 void DataLogger::CheckForOfstreamError(ofstream& out) 566 549 { 567 if ( !out.good())568 {569 Error("An error occured while writing to a text file. Closing it"); 570 if (out.is_open())571 out.close();572 SetCurrentState(kSM_WriteError);573 }550 if (out.good()) 551 return; 552 553 Error("An error occured while writing to a text file. Closing it"); 554 if (out.is_open()) 555 out.close(); 556 SetCurrentState(kSM_WriteError); 574 557 } 575 558 // -------------------------------------------------------------------------- … … 858 841 } 859 842 860 //static members initialization861 //since I do not check the transition/config names any longer, indeed maybe these could be hard-coded... but who knows what will happen in the future ?862 const char* DataLogger::fConfigDay = "CONFIG_DAY";863 const char* DataLogger::fConfigRun = "CONFIG_RUN";864 const char* DataLogger::fConfigRunNumber = "CONFIG_RUN_NUMBER";865 const char* DataLogger::fConfigLog = "LOG";866 const char* DataLogger::fTransStart = "START";867 const char* DataLogger::fTransStop = "STOP";868 const char* DataLogger::fTransStartRun = "START_RUN";869 const char* DataLogger::fTransStopRun = "STOP_RUN";870 const char* DataLogger::fTransReset = "RESET";871 const char* DataLogger::fTransWait = "WAIT_RUN_NUMBER";872 const char* DataLogger::fRunNumberInfo = "RUN_NUMBER";873 const char* DataLogger::fPrintCommand = "PRINT";874 const char* DataLogger::fDebugOnOff = "DEBUG";875 const char* DataLogger::fStatsPeriod = "STATS_PERIOD";876 const char* DataLogger::fStartStopOpenedFiles = "OPENED_FILES_SRVC";877 const char* DataLogger::fStartStopNumSubsAndFits = "NUM_SUBS_SRVC";878 const char* DataLogger::fSetRunTimeOutDelay = "RUN_TIMEOUT";879 880 843 // -------------------------------------------------------------------------- 881 844 // … … 944 907 AddStateName(kSM_BadNightlyConfig, "ErrNightlyFolder", "The folder for the nighly summary files is invalid."); 945 908 AddStateName(kSM_BadRunConfig, "ErrRunFolder", "The folder for the run files is invalid."); 946 AddStateName(kSM_WriteError, "ErrWrite", "An error occured while writing to a file."); 947 948 /*Add the possible transitions for this machine*/ 949 AddEvent(kSM_NightlyOpen, fTransStart, kSM_Ready, kSM_BadNightlyConfig) 950 (boost::bind(&DataLogger::StartPlease, this)) 951 ("Start the nightly logging. Nightly file location must be specified already"); 952 953 AddEvent(kSM_Ready, fTransStop, kSM_NightlyOpen, kSM_WaitingRun, kSM_Logging, kSM_WriteError) 954 (boost::bind(&DataLogger::GoToReadyPlease, this)) 955 ("Stop all data logging, close all files."); 956 957 AddEvent(kSM_Logging, fTransStartRun, kSM_WaitingRun, kSM_BadRunConfig) 958 (boost::bind(&DataLogger::StartRunPlease, this)) 959 ("Start the run logging. Run file location must be specified already."); 960 961 AddEvent(kSM_WaitingRun, fTransStopRun, kSM_Logging) 962 (boost::bind(&DataLogger::StopRunPlease, this)) 963 ("Wait for a run to be started, open run-files as soon as a run number arrives."); 964 965 AddEvent(kSM_Ready, fTransReset, kSM_Error, kSM_BadNightlyConfig, kSM_BadRunConfig, kSM_WriteError) 966 (boost::bind(&DataLogger::GoToReadyPlease, this)) 967 ("Transition to exit error states. Closes the nightly file if already opened."); 968 969 AddEvent(kSM_WaitingRun, fTransWait, kSM_NightlyOpen) 970 (boost::bind(&DataLogger::NightlyToWaitRunPlease, this)); 971 972 /*Add the possible configurations for this machine*/ 973 AddEvent(fConfigDay, "C", kSM_Ready, kSM_BadNightlyConfig) 974 (boost::bind(&DataLogger::ConfigureNightlyFileName, this, _1)) 975 ("Configure the folder for the nightly files." 976 "|Path[string]:Absolute or relative path name where the nightly files should be stored."); 977 978 AddEvent(fConfigRun, "C", kSM_Ready, kSM_BadNightlyConfig, kSM_NightlyOpen, kSM_WaitingRun, kSM_BadRunConfig) 979 (boost::bind(&DataLogger::ConfigureRunFileName, this, _1)) 980 ("Configure the folder for the run files." 981 "|Path[string]:Absolute or relative path name where the run files should be stored."); 982 983 AddEvent(fConfigRunNumber, "X", kSM_Ready, kSM_NightlyOpen, kSM_WaitingRun, kSM_BadRunConfig, kSM_Logging) 984 (boost::bind(&DataLogger::ConfigureRunNumber, this, _1)) 985 ("Configure the run number. Cannot be done in logging state"); 986 987 //Provide a print command 988 ostringstream str; 989 str << kSM_Ready << " " << kSM_NightlyOpen << " " << kSM_WaitingRun << " " << kSM_Logging << " " << kSM_BadNightlyConfig << " " << kSM_WriteError; 990 str << " " << kSM_BadRunConfig; 991 AddEvent(fPrintCommand, str.str().c_str(), "") 992 (boost::bind(&DataLogger::PrintStatePlease, this, _1)) 993 ("Print information about the internal status of the data logger."); 909 AddStateName(kSM_WriteError, "ErrWrite", "An error occured while writing to a file."); 910 911 // Add the possible transitions for this machine 912 AddEvent(kSM_NightlyOpen, "START", kSM_Ready, kSM_BadNightlyConfig) 913 (boost::bind(&DataLogger::StartPlease, this)) 914 ("Start the nightly logging. Nightly file location must be specified already"); 915 916 AddEvent(kSM_Ready, "STOP", kSM_NightlyOpen, kSM_WaitingRun, kSM_Logging, kSM_WriteError) 917 (boost::bind(&DataLogger::GoToReadyPlease, this)) 918 ("Stop all data logging, close all files."); 919 920 AddEvent(kSM_Logging, "START_RUN", kSM_WaitingRun, kSM_BadRunConfig) 921 (boost::bind(&DataLogger::StartRunPlease, this)) 922 ("Start the run logging. Run file location must be specified already."); 923 924 AddEvent(kSM_WaitingRun, "STOP_RUN", kSM_Logging) 925 (boost::bind(&DataLogger::StopRunPlease, this)) 926 ("Wait for a run to be started, open run-files as soon as a run number arrives."); 927 928 AddEvent(kSM_Ready, "RESET", kSM_Error, kSM_BadNightlyConfig, kSM_BadRunConfig, kSM_WriteError) 929 (boost::bind(&DataLogger::GoToReadyPlease, this)) 930 ("Transition to exit error states. Closes the any open file."); 931 932 AddEvent(kSM_WaitingRun, "WAIT_FOR_RUN_NUMBER", kSM_NightlyOpen) 933 (boost::bind(&DataLogger::NightlyToWaitRunPlease, this)) 934 ("Go to waiting for run number state. In this state with any received run-number a new file is opened."); 935 936 // Add the possible configurations for this machine 937 AddEvent("SET_NIGHTLY_FOLDER", "C", kSM_Ready, kSM_BadNightlyConfig) 938 (boost::bind(&DataLogger::ConfigureNightlyFileName, this, _1)) 939 ("Configure the base folder for the nightly files." 940 "|Path[string]:Absolute or relative path name where the nightly files should be stored."); 941 942 AddEvent("SET_RUN_FOLDER", "C", kSM_Ready, kSM_BadNightlyConfig, kSM_NightlyOpen, kSM_WaitingRun, kSM_BadRunConfig) 943 (boost::bind(&DataLogger::ConfigureRunFileName, this, _1)) 944 ("Configure the base folder for the run files." 945 "|Path[string]:Absolute or relative path name where the run files should be stored."); 946 947 AddEvent("SET_RUN_NUMBER", "X", kSM_Ready, kSM_NightlyOpen, kSM_WaitingRun, kSM_BadRunConfig, kSM_Logging) 948 (boost::bind(&DataLogger::ConfigureRunNumber, this, _1)) 949 ("Configure the run number. Cannot be done in logging state"); 950 951 // Provide a print command 952 AddEvent("PRINT") 953 (boost::bind(&DataLogger::PrintStatePlease, this, _1)) 954 ("Print information about the internal status of the data logger."); 994 955 995 956 OpenFileToDim fToDim; … … 1020 981 fNumSubAndFitsIsOn = true; 1021 982 1022 //provide services control commands 1023 AddEvent(fDebugOnOff, "B:1", kSM_NightlyOpen, kSM_Logging, kSM_WaitingRun, kSM_Ready) 1024 (boost::bind(&DataLogger::SetDebugOnOff, this, _1)) 1025 ("Switch debug mode on off. Debug mode prints ifnormation about every service written to a file." 1026 "|Enable[bool]:Enable of disable debug mode (yes/no)."); 1027 1028 AddEvent(fStatsPeriod, "F", kSM_NightlyOpen, kSM_Logging, kSM_WaitingRun, kSM_Ready) 1029 (boost::bind(&DataLogger::SetStatsPeriod, this, _1)) 1030 ("Interval in which the data-logger statistics service (STATS) is updated." 1031 "Interval[s]:Floating point value in seconds."); 1032 1033 AddEvent(fStartStopOpenedFiles, "B:1", kSM_NightlyOpen, kSM_Logging, kSM_WaitingRun, kSM_Ready) 1034 (boost::bind(&DataLogger::SetOpenedFilesOnOff ,this, _1)) 1035 ("Switch off the service which distributes information about the open files."); 1036 1037 AddEvent(fStartStopNumSubsAndFits, "B:1", kSM_NightlyOpen, kSM_Logging, kSM_WaitingRun, kSM_Ready) 1038 (boost::bind(&DataLogger::SetNumSubsAndFitsOnOff, this, _1)) 1039 ("Switch off the service which distributes information about the number of subscriptions and open files."); 1040 1041 AddEvent(fSetRunTimeOutDelay, "L:1", kSM_Ready, kSM_NightlyOpen, kSM_Logging, kSM_WaitingRun) 1042 (boost::bind(&DataLogger::SetRunTimeoutDelay, this, _1)) 1043 ("Set the timeout delay for old run numbers."); 983 // provide services control commands 984 AddEvent("SET_DEUG_MODE", "B:1", kSM_NightlyOpen, kSM_Logging, kSM_WaitingRun, kSM_Ready) 985 (boost::bind(&DataLogger::SetDebugOnOff, this, _1)) 986 ("Switch debug mode on or off. Debug mode prints ifnormation about every service written to a file." 987 "|Enable[bool]:Enable of disable debug mode (yes/no)."); 988 989 AddEvent("SET_STATISTICS_UPDATE_INTERVAL", "F", kSM_NightlyOpen, kSM_Logging, kSM_WaitingRun, kSM_Ready) 990 (boost::bind(&DataLogger::SetStatsPeriod, this, _1)) 991 ("Interval in which the data-logger statistics service (STATS) is updated." 992 "Interval[s]:Floating point value in seconds."); 993 994 AddEvent("ENABLE_FILENAME_SERVICES", "B:1", kSM_NightlyOpen, kSM_Logging, kSM_WaitingRun, kSM_Ready) 995 (boost::bind(&DataLogger::SetOpenedFilesOnOff ,this, _1)) 996 ("Switch service which distributes information about the open files on or off." 997 "|Enable[bool]:Enable of disable filename services (yes/no)."); 998 999 AddEvent("ENABLE_NUMSUBS_SERVICE", "B:1", kSM_NightlyOpen, kSM_Logging, kSM_WaitingRun, kSM_Ready) 1000 (boost::bind(&DataLogger::SetNumSubsAndFitsOnOff, this, _1)) 1001 ("Switch the service which distributes information about the number of subscriptions and open files on or off." 1002 "|Enable[bool]:Enable of disable NUM_SUBS service (yes/no)."); 1003 1004 AddEvent("SET_RUN_TIMEOUT", "L:1", kSM_Ready, kSM_NightlyOpen, kSM_Logging, kSM_WaitingRun) 1005 (boost::bind(&DataLogger::SetRunTimeoutDelay, this, _1)) 1006 ("Set the timeout delay for old run numbers." 1007 "|timeout[min]:Time out in minutes after which files for expired runs are closed."); 1044 1008 1045 1009 fDestructing = false; … … 1197 1161 return; 1198 1162 1199 CheckForRunNumber(I); 1163 // FIXME: Here we have to check if we have received the 1164 // service with the run-number. 1165 // CheckForRunNumber(I); has been removed because we have to 1166 // subscribe to this service anyway and hence we have the pointer 1167 // (no need to check for the name) 1200 1168 1201 1169 ReportPlease(I, y->second); … … 1207 1175 TrimOldRunNumbers(); 1208 1176 } 1177 1178 bool DataLogger::OpenStream(shared_ptr<ofstream> stream, const string &filename) 1179 { 1180 if (stream->is_open()) 1181 { 1182 ostringstream str; 1183 str << filename << " was already open when trying to open it."; 1184 Error(str); 1185 return false; 1186 } 1187 1188 errno = 0; 1189 stream->open(filename.c_str(), ios_base::out | ios_base::app); 1190 if (errno != 0) 1191 { 1192 ostringstream str; 1193 str << "Unable to open " << filename << ": " << strerror(errno) << " (errno=" << errno << ")"; 1194 Error(str); 1195 return false; 1196 } 1197 1198 if (!stream->is_open()) 1199 { 1200 ostringstream str; 1201 str << "File " << filename << " not open as it ought to be."; 1202 Error(str); 1203 return false; 1204 } 1205 1206 return true; 1207 } 1208 1209 1209 // -------------------------------------------------------------------------- 1210 1210 // … … 1215 1215 { 1216 1216 #ifdef RUN_LOGS 1217 if (run.logFile->is_open()) 1218 { 1219 ostringstream str; 1220 str << "Log file " << run.logName << " was already open when trying to open it in OpenRunFile"; 1221 Error(str); 1217 // open log file 1218 run.logName = CompileFileName(fRunFilePath, run.runNumber, "", "log"); 1219 if (!OpenStream(run.logFile, run.logName)) 1222 1220 return -1; 1223 }1224 run.logName = CompileFileName(fRunFilePath, run.runNumber, "", "log");1225 1226 errno = 0;1227 run.logFile->open(run.logName.c_str(), ios_base::out | ios_base::app);1228 if (errno != 0)1229 {1230 ostringstream str;1231 str << "Unable to open log-file " << run.logName << ": " << strerror(errno) << " (errno=" << errno << ")";1232 Error(str);1233 }1234 1221 #endif 1235 //open report file 1222 1223 // open report file 1236 1224 run.reportName = CompileFileName(fRunFilePath, run.runNumber, "", "rep"); 1237 if (run.reportFile->is_open()) 1238 { 1239 ostringstream str; 1240 str << "Report file " << run.reportName << " was already open when trying to open it in OpenRunFile"; 1241 Error(str); 1225 if (!OpenStream(run.reportFile, run.reportName)) 1242 1226 return -1; 1243 } 1244 1245 errno = 0; 1246 run.reportFile->open(run.reportName.c_str(), ios_base::out | ios_base::app); 1247 if (errno != 0) 1248 { 1249 ostringstream str; 1250 str << "Unable to open rep-file " << run.reportName << ": " << strerror(errno) << " (errno=" << errno << ")"; 1251 Error(str); 1252 } 1253 1254 #ifdef RUN_LOGS 1255 if (!run.logFile->is_open() || !run.reportFile->is_open()) 1256 #else 1257 if (!run.reportFile->is_open()) 1258 #endif 1259 { 1260 ostringstream str; 1261 str << "Something went wrong while openning files "; 1262 #ifdef RUN_LOGS 1263 str << run.logName << " and "; 1264 #endif 1265 str << run.reportName; 1266 Error(str); 1267 return -1; 1268 } 1227 1269 1228 //get the size of the newly opened file. 1270 1229 #ifdef RUN_LOGS … … 1322 1281 void DataLogger::CheckForRunNumber(DimInfo* I) 1323 1282 { 1324 if (strstr(I->getName(), fRunNumberInfo) != NULL)1283 if (strstr(I->getName(), "SET_RUN_NUMBER") != NULL) 1325 1284 {//assumes that the run number is an integer 1326 1285 //check if some run number entries can be deleted leave one so that two remain after adding the new one … … 1451 1410 catch (const runtime_error &e) 1452 1411 { 1453 Out() << kRed << e.what() << endl;1454 1412 ostringstream str; 1455 str << " Could not properly parse the data forservice " << sub.dimInfo->getName();1456 str << " reason: " << e.what() << ". Entry ignored";1413 str << "Parsing service " << sub.dimInfo->getName(); 1414 str << " failed: " << e.what(); 1457 1415 Error(str); 1458 1416 return; … … 1485 1443 else 1486 1444 {//write entry to both Nightly and run logs 1487 string n = I->getName();1488 1445 ostringstream msg; 1489 msg << n<< ": " << I->getString();1446 msg << I->getName() << ": " << I->getString(); 1490 1447 1491 1448 if (fNightlyLogFile.is_open()) 1492 1449 { 1493 MessageImp nightlyMess(fNightlyLogFile); 1494 nightlyMess.Write(cTime, msg.str().c_str(), fQuality); 1450 MessageImp(fNightlyLogFile).Write(cTime, msg.str().c_str(), fQuality); 1495 1451 CheckForOfstreamError(fNightlyLogFile); 1496 1452 } 1497 1453 if (targetRunFile && targetRunFile->is_open()) 1498 1454 { 1499 MessageImp runMess(*targetRunFile); 1500 runMess.Write(cTime, msg.str().c_str(), fQuality); 1455 MessageImp(*targetRunFile).Write(cTime, msg.str().c_str(), fQuality); 1501 1456 CheckForOfstreamError(*targetRunFile); 1502 1457 } … … 1635 1590 int DataLogger::SetDebugOnOff(const Event& evt) 1636 1591 { 1637 bool backupDebug = fDebugIsOn; 1592 const bool backupDebug = fDebugIsOn; 1593 1638 1594 fDebugIsOn = evt.GetBool(); 1595 1639 1596 if (fDebugIsOn == backupDebug) 1640 Warn("Warning: debug mode was already in the requested state"); 1641 else 1642 { 1643 ostringstream str; 1644 str << "Debug mode is now " << fDebugIsOn; 1645 Message(str); 1646 } 1597 Message("Debug mode was already in the requested state."); 1598 1599 ostringstream str; 1600 str << "Debug mode is now " << fDebugIsOn; 1601 Message(str); 1602 1647 1603 return GetCurrentState(); 1648 1604 } … … 1657 1613 int DataLogger::SetStatsPeriod(const Event& evt) 1658 1614 { 1659 float backupDuration = fStatsPeriodDuration; 1615 const float backupDuration = fStatsPeriodDuration; 1616 1660 1617 fStatsPeriodDuration = evt.GetFloat(); 1618 1661 1619 if (fStatsPeriodDuration < 0) 1662 1620 { … … 1667 1625 if (!finite(fStatsPeriodDuration))// != fStatsPeriodDuration) 1668 1626 { 1669 Error("Provided duration does not appear to be a valid float. discarding it.");1627 Error("Provided duration does not appear to be a valid float. Discarding it."); 1670 1628 fStatsPeriodDuration = backupDuration; 1671 1629 return GetCurrentState(); 1672 1630 } 1673 1631 if (backupDuration == fStatsPeriodDuration) 1674 Warn("Warning: statistics period was not modified: supplied value already in use"); 1632 Warn("Statistics period not modified. Supplied value already in use."); 1633 1634 if (fStatsPeriodDuration == 0.0f) 1635 Message("Statistics are now OFF"); 1675 1636 else 1676 1637 { 1677 if (fStatsPeriodDuration == 0.0f) 1678 Message("Statistics are now OFF"); 1679 else 1680 { 1681 ostringstream str; 1682 str << "Statistics period is now " << fStatsPeriodDuration << " seconds"; 1683 Message(str); 1684 } 1685 } 1638 ostringstream str; 1639 str << "Statistics period is now " << fStatsPeriodDuration << " seconds"; 1640 Message(str); 1641 } 1642 1686 1643 return GetCurrentState(); 1687 1644 } … … 1696 1653 int DataLogger::SetOpenedFilesOnOff(const Event& evt) 1697 1654 { 1698 bool backupOpened = fOpenedFilesIsOn; 1655 const bool backupOpened = fOpenedFilesIsOn; 1656 1699 1657 fOpenedFilesIsOn = evt.GetBool(); 1658 1700 1659 if (fOpenedFilesIsOn == backupOpened) 1701 Warn("Warning: opened files service mode was already in the requested state"); 1702 else 1703 { 1704 ostringstream str; 1705 str << "Opened files service mode is now " << fOpenedFilesIsOn; 1706 Message(str); 1707 } 1660 Message("Opened files service mode was already in the requested state."); 1661 1662 ostringstream str; 1663 str << "Opened files service mode is now " << fOpenedFilesIsOn; 1664 Message(str); 1665 1708 1666 return GetCurrentState(); 1709 1710 } 1667 } 1668 1711 1669 // -------------------------------------------------------------------------- 1712 1670 // … … 1720 1678 { 1721 1679 const bool backupSubs = fNumSubAndFitsIsOn; 1680 1722 1681 fNumSubAndFitsIsOn = evt.GetBool(); 1723 1682 1724 1683 if (fNumSubAndFitsIsOn == backupSubs) 1725 Warn("Warning: Number of subscriptions service mode was already in the requested state"); 1726 else 1727 { 1728 ostringstream str; 1729 str << "Number of subscriptions service mode is now " << fNumSubAndFitsIsOn; 1730 Message(str); 1731 } 1684 Message("Number of subscriptions service mode was already in the requested state"); 1685 1686 ostringstream str; 1687 str << "Number of subscriptions service mode is now " << fNumSubAndFitsIsOn; 1688 Message(str); 1689 1732 1690 return GetCurrentState(); 1733 1691 } … … 1748 1706 { 1749 1707 fRunNumberTimeout = backupTimeout; 1750 Error(" timeout delays for old run numbers must be greater than 0. Ignored.");1708 Error("Timeout delays for old run numbers must be greater than 0. Ignored."); 1751 1709 return GetCurrentState(); 1752 1710 } 1753 1711 1754 1712 if (fRunNumberTimeout == backupTimeout) 1755 Warn("Warning: given timeout for old run numbers is same value as previous one"); 1756 else 1757 { 1758 ostringstream str; 1759 str << "Timeout delay for old run numbers is now " << fRunNumberTimeout; 1760 Message(str); 1761 } 1713 Message("New timeout for old run numbers is same value as previous one."); 1714 1715 ostringstream str; 1716 str << "Timeout delay for old run numbers is now " << fRunNumberTimeout; 1717 Message(str); 1718 1762 1719 return GetCurrentState(); 1763 1720 } 1721 1722 int DataLogger::ConfigureFileName(string &target, const string &type, const EventImp &evt) 1723 { 1724 if (!evt.GetText()) 1725 { 1726 Error("Empty "+type+" folder given. Please specify a valid path."); 1727 return GetCurrentState(); 1728 } 1729 1730 const string givenPath = evt.GetText(); 1731 if (!DoesPathExist(givenPath)) 1732 { 1733 Error("Provided "+type+" path '"+givenPath+"' is not a valid folder. Ignored"); 1734 return GetCurrentState(); 1735 } 1736 1737 Message("New "+type+" folder specified: "+givenPath); 1738 1739 target = givenPath; 1740 1741 return GetCurrentState(); 1742 } 1743 1764 1744 // -------------------------------------------------------------------------- 1765 1745 // … … 1772 1752 int DataLogger::ConfigureNightlyFileName(const Event& evt) 1773 1753 { 1774 if (evt.GetText() != NULL) 1775 { 1776 string givenPath = string(evt.GetText()); 1777 if (!DoesPathExist(givenPath)) 1778 { 1779 Error("Provided path is not a valid folder. Ignored"); 1780 return GetCurrentState(); 1781 } 1782 fNightlyFilePath = givenPath; 1783 Message("New Nightly folder specified: " + fNightlyFilePath); 1784 } 1785 else 1786 Error("Empty Nightly folder given. Please specify a valid path."); 1787 1788 return GetCurrentState(); 1789 } 1754 return ConfigureFileName(fNightlyFilePath, "nightly", evt); 1755 } 1756 1790 1757 // -------------------------------------------------------------------------- 1791 1758 // … … 1797 1764 int DataLogger::ConfigureRunFileName(const Event& evt) 1798 1765 { 1799 if (evt.GetText() == NULL) 1800 { 1801 Error("Empty Nightly folder given. Please specify a valid path"); 1802 return GetCurrentState(); 1803 } 1804 1805 const string givenPath = string(evt.GetText()); 1806 if (!DoesPathExist(givenPath)) 1807 { 1808 Error("Provided path is not a valid folder. Ignored"); 1809 return GetCurrentState(); 1810 } 1811 1812 fRunFilePath = givenPath; 1813 Message("New Run folder specified: " + fRunFilePath); 1814 1815 return GetCurrentState(); 1816 } 1766 return ConfigureFileName(fRunFilePath, "run", evt); 1767 } 1768 1817 1769 // -------------------------------------------------------------------------- 1818 1770 // … … 1852 1804 if (name.size()+1 > FILENAME_MAX) 1853 1805 { 1854 Error("Provided file name '" + name + "' is longer than allowed file name length"); 1806 Error("Provided file name '" + name + "' is longer than allowed file name length."); 1807 return; 1855 1808 } 1856 1809 … … 2435 2388 { 2436 2389 const long timeout = conf.Get<long>("runtimeout"); 2437 if (timeout != 0) 2438 fRunNumberTimeout = timeout; 2439 else 2390 if (timeout <= 0) 2391 { 2440 2392 Error("Time out delay for old run numbers should be greater than 0 minute"); 2393 return false; 2394 } 2395 fRunNumberTimeout = timeout; 2441 2396 } 2442 2397 return true; … … 2547 2502 "SERVICE_LIST services offered by any server and DIS_DNS/SERVICE_LIST " 2548 2503 "will skip DIS_DNS/SERVICE_LIST.\n" 2549 "\n" 2550 "The commands offered by the dataLoger are the following: \n"; 2551 cout << setw(20) << DataLogger::fConfigDay << " : specify the path where to put the nightly files\n"; 2552 cout << setw(20) << DataLogger::fConfigRun << " : specify the path where to put the run files\n"; 2553 cout << setw(20) << DataLogger::fConfigRunNumber << " : specify the run number\n"; 2554 cout << setw(20) << DataLogger::fConfigLog << " : log a particular message\n"; 2555 cout << setw(20) << DataLogger::fTransStart << " : start the nightly logging\n"; 2556 cout << setw(20) << DataLogger::fTransStop << " : stop the nightly logging\n"; 2557 cout << setw(20) << DataLogger::fTransStartRun << " : start the run logging\n"; 2558 cout << setw(20) << DataLogger::fTransStopRun << " : stop the run logging\n"; 2559 cout << setw(20) << DataLogger::fTransReset << " : stop any logging and/or recover from an error state\n"; 2560 cout << setw(20) << DataLogger::fTransWait << " : go to the wait for run number state\n"; 2561 cout << setw(20) << DataLogger::fPrintCommand << " : print the current state of the logger to the shell\n"; 2562 cout << setw(20) << DataLogger::fDebugOnOff << " : turn on or off the debug mode\n"; 2563 cout << setw(20) << DataLogger::fStatsPeriod << " : set the periodicity of the statistics. 0 disable them\n"; 2564 cout << endl; 2565 } 2504 << endl; 2505 } 2506 2566 2507 // -------------------------------------------------------------------------- 2567 2508 void SetupConfiguration(Configuration &conf)
Note:
See TracChangeset
for help on using the changeset viewer.