1 #ifndef _ots_Iterator_h
2 #define _ots_Iterator_h
7 #include "otsdaq/TablePlugins/IterateTable.h"
8 #include "otsdaq/XmlUtilities/HttpXmlDocument.h"
10 #include "otsdaq/ConfigurationInterface/ConfigurationManagerRW.h"
16 class GatewaySupervisor;
17 class ConfigurationManagerRW;
27 static const std::string RESERVED_GEN_PLAN_NAME;
29 void playIterationPlan (
HttpXmlDocument& xmldoc,
const std::string& planName);
30 void playGeneratedIterationPlan (
HttpXmlDocument& xmldoc,
const std::string& parametersCSV);
31 void playGeneratedIterationPlan (
HttpXmlDocument& xmldoc,
const std::string& fsmName,
const std::string& configAlias, uint64_t durationSeconds = -1,
unsigned int numberOfRuns = 1,
bool keepConfiguration =
false,
const std::string& logEntry =
"");
37 bool handleCommandRequest (
HttpXmlDocument& xmldoc,
const std::string& command,
const std::string& parameter);
39 bool isIteratorBusy (
void)
const {
return iteratorBusy_; }
42 void playIterationPlanPrivate (
HttpXmlDocument& xmldoc,
const std::string& planName);
44 IterateTable::Command> generateIterationPlan (
const std::string& fsmName,
const std::string& configAlias, uint64_t durationSeconds = -1,
unsigned int numberOfRuns = 1);
47 struct IteratorWorkLoopStruct
50 : theIterator_(iterator)
52 , originalTrackChanges_(
false)
55 , doPauseAction_(
false)
56 , doHaltAction_(
false)
57 , doResumeAction_(
false)
58 , commandIndex_((
unsigned int)-1)
64 bool originalTrackChanges_;
65 std::string originalConfigGroup_;
68 bool running_, commandBusy_;
69 bool doPauseAction_, doHaltAction_, doResumeAction_;
70 bool onlyConfigIfNotConfigured_ =
false;
72 std::string activePlan_;
73 std::vector<IterateTable::Command> commands_;
74 std::vector<unsigned int> commandIterations_;
75 unsigned int commandIndex_;
76 std::vector<unsigned int> stepIndexStack_;
77 time_t originalDurationInSeconds_;
80 std::string fsmName_, fsmRunAlias_;
81 unsigned int fsmNextRunNumber_;
85 std::vector<std::string> fsmCommandParameters_;
86 std::vector<bool> targetsDone_;
91 static void IteratorWorkLoop(
Iterator* iterator);
92 static void startCommand(IteratorWorkLoopStruct* iteratorStruct);
93 static bool checkCommand(IteratorWorkLoopStruct* iteratorStruct);
95 static void startCommandChooseFSM(IteratorWorkLoopStruct* iteratorStruct,
const std::string& fsmName);
97 static void startCommandConfigureActive(IteratorWorkLoopStruct* iteratorStruct);
98 static void startCommandConfigureAlias(IteratorWorkLoopStruct* iteratorStruct,
const std::string& systemAlias);
99 static void startCommandConfigureGroup(IteratorWorkLoopStruct* iteratorStruct);
100 static bool checkCommandConfigure(IteratorWorkLoopStruct* iteratorStruct);
102 static void startCommandModifyActive(IteratorWorkLoopStruct* iteratorStruct);
104 static void startCommandMacro(IteratorWorkLoopStruct* iteratorStruct,
bool isFEMacro);
105 static bool checkCommandMacro(IteratorWorkLoopStruct* iteratorStruct,
bool isFEMacro);
107 static void startCommandBeginLabel(IteratorWorkLoopStruct* iteratorStruct);
108 static void startCommandRepeatLabel(IteratorWorkLoopStruct* iteratorStruct);
110 static void startCommandRun(IteratorWorkLoopStruct* iteratorStruct);
111 static bool checkCommandRun(IteratorWorkLoopStruct* iteratorStruct);
113 static void startCommandWait(IteratorWorkLoopStruct* iteratorStruct);
114 static bool checkCommandWait(IteratorWorkLoopStruct* iteratorStruct);
116 static void startCommandFSMTransition(IteratorWorkLoopStruct* iteratorStruct,
const std::string& transitionCommand);
117 static bool checkCommandFSMTransition(IteratorWorkLoopStruct* iteratorStruct,
const std::string& finalState);
119 static bool haltIterator(
Iterator* iterator,
120 IteratorWorkLoopStruct* iteratorStruct = 0,
121 bool doNotHaltFSM =
false);
123 std::mutex accessMutex_;
124 volatile bool workloopRunning_;
125 volatile bool activePlanIsRunning_;
126 std::atomic<bool> iteratorBusy_;
127 volatile bool commandPlay_, commandPause_,
131 std::string activePlanName_, lastStartedPlanName_, lastFinishedPlanName_;
132 volatile unsigned int activeCommandIndex_, activeCommandIteration_, activeNumberOfCommands_;
133 std::string activeCommandType_;
135 volatile uint64_t genPlanDurationSeconds_ = -1;
136 volatile unsigned int genPlanNumberOfRuns_ = 1;
137 std::string genFsmName_, genConfigAlias_, genLogEntry_;
138 bool genKeepConfiguration_ =
false;
140 std::vector<unsigned int> depthIterationStack_;
141 volatile time_t activeCommandStartTime_;
142 std::string lastFsmName_;
143 std::string errorMessage_;
148 static void helpCommandModifyActive(IteratorWorkLoopStruct* iteratorStruct,
const T& setValue,
bool doTrackGroupChanges);
151 #include "otsdaq/GatewaySupervisor/Iterator.icc"
void getIterationPlanStatus(HttpXmlDocument &xmldoc)
return state machine and iterator status
defines used also by OtsConfigurationWizardSupervisor