1 #ifndef _ots_Iterator_h
2 #define _ots_Iterator_h
6 #include "otsdaq-core/TablePluginDataFormats/IterateTable.h"
7 #include "otsdaq-core/XmlUtilities/HttpXmlDocument.h"
9 #include "otsdaq-core/ConfigurationInterface/ConfigurationManagerRW.h"
13 class GatewaySupervisor;
14 class ConfigurationManagerRW;
24 void playIterationPlan(
HttpXmlDocument& xmldoc,
const std::string& planName);
30 const std::string& command,
31 const std::string& parameter);
35 struct IteratorWorkLoopStruct
38 : theIterator_(iterator)
40 , originalTrackChanges_(
false)
43 , doPauseAction_(
false)
44 , doHaltAction_(
false)
45 , doResumeAction_(
false)
46 , commandIndex_((
unsigned int)-1)
52 bool originalTrackChanges_;
53 std::string originalConfigGroup_;
56 bool running_, commandBusy_;
57 bool doPauseAction_, doHaltAction_, doResumeAction_;
59 std::string activePlan_;
60 std::vector<IterateTable::Command> commands_;
61 std::vector<unsigned int> commandIterations_;
62 unsigned int commandIndex_;
63 std::vector<unsigned int> stepIndexStack_;
66 std::string fsmName_, fsmRunAlias_;
67 unsigned int fsmNextRunNumber_;
70 std::vector<std::string> fsmCommandParameters_;
71 std::vector<bool> targetsDone_;
75 static void IteratorWorkLoop(
Iterator* iterator);
76 static void startCommand(IteratorWorkLoopStruct* iteratorStruct);
77 static bool checkCommand(IteratorWorkLoopStruct* iteratorStruct);
79 static void startCommandChooseFSM(IteratorWorkLoopStruct* iteratorStruct,
80 const std::string& fsmName);
82 static void startCommandConfigureActive(IteratorWorkLoopStruct* iteratorStruct);
83 static void startCommandConfigureAlias(IteratorWorkLoopStruct* iteratorStruct,
84 const std::string& systemAlias);
85 static void startCommandConfigureGroup(IteratorWorkLoopStruct* iteratorStruct);
86 static bool checkCommandConfigure(IteratorWorkLoopStruct* iteratorStruct);
88 static void startCommandModifyActive(IteratorWorkLoopStruct* iteratorStruct);
90 static void startCommandMacro(IteratorWorkLoopStruct* iteratorStruct,
bool isFEMacro);
91 static bool checkCommandMacro(IteratorWorkLoopStruct* iteratorStruct,
bool isFEMacro);
93 static void startCommandBeginLabel(IteratorWorkLoopStruct* iteratorStruct);
94 static void startCommandRepeatLabel(IteratorWorkLoopStruct* iteratorStruct);
96 static void startCommandRun(IteratorWorkLoopStruct* iteratorStruct);
97 static bool checkCommandRun(IteratorWorkLoopStruct* iteratorStruct);
99 static bool haltIterator(
101 IteratorWorkLoopStruct* iteratorStruct =
104 std::mutex accessMutex_;
105 volatile bool workloopRunning_;
106 volatile bool activePlanIsRunning_;
107 volatile bool iteratorBusy_;
108 volatile bool commandPlay_, commandPause_,
112 std::string activePlanName_, lastStartedPlanName_, lastFinishedPlanName_;
113 volatile unsigned int activeCommandIndex_, activeCommandIteration_;
114 std::vector<unsigned int> depthIterationStack_;
115 volatile time_t activeCommandStartTime_;
116 std::string lastFsmName_;
117 std::string errorMessage_;
122 static void helpCommandModifyActive(IteratorWorkLoopStruct* iteratorStruct,
124 bool doTrackGroupChanges);
127 #include "otsdaq-core/GatewaySupervisor/Iterator.icc"