1 #ifndef _ots_Iterator_h
2 #define _ots_Iterator_h
6 #include "otsdaq/TablePlugins/IterateTable.h"
7 #include "otsdaq/XmlUtilities/HttpXmlDocument.h"
9 #include "otsdaq/ConfigurationInterface/ConfigurationManagerRW.h"
15 class GatewaySupervisor;
16 class ConfigurationManagerRW;
26 static const std::string RESERVED_GEN_PLAN_NAME;
28 void playIterationPlan (
HttpXmlDocument& xmldoc,
const std::string& planName);
29 void playGeneratedIterationPlan (
HttpXmlDocument& xmldoc,
const std::string& parametersCSV);
30 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 =
"");
36 bool handleCommandRequest (
HttpXmlDocument& xmldoc,
const std::string& command,
const std::string& parameter);
40 void playIterationPlanPrivate (
HttpXmlDocument& xmldoc,
const std::string& planName);
42 IterateTable::Command> generateIterationPlan (
const std::string& fsmName,
const std::string& configAlias, uint64_t durationSeconds = -1,
unsigned int numberOfRuns = 1);
45 struct IteratorWorkLoopStruct
48 : theIterator_(iterator)
50 , originalTrackChanges_(
false)
53 , doPauseAction_(
false)
54 , doHaltAction_(
false)
55 , doResumeAction_(
false)
56 , commandIndex_((
unsigned int)-1)
62 bool originalTrackChanges_;
63 std::string originalConfigGroup_;
66 bool running_, commandBusy_;
67 bool doPauseAction_, doHaltAction_, doResumeAction_;
68 bool onlyConfigIfNotConfigured_ =
false;
70 std::string activePlan_;
71 std::vector<IterateTable::Command> commands_;
72 std::vector<unsigned int> commandIterations_;
73 unsigned int commandIndex_;
74 std::vector<unsigned int> stepIndexStack_;
75 time_t originalDurationInSeconds_;
78 std::string fsmName_, fsmRunAlias_;
79 unsigned int fsmNextRunNumber_;
83 std::vector<std::string> fsmCommandParameters_;
84 std::vector<bool> targetsDone_;
89 static void IteratorWorkLoop(
Iterator* iterator);
90 static void startCommand(IteratorWorkLoopStruct* iteratorStruct);
91 static bool checkCommand(IteratorWorkLoopStruct* iteratorStruct);
93 static void startCommandChooseFSM(IteratorWorkLoopStruct* iteratorStruct,
const std::string& fsmName);
95 static void startCommandConfigureActive(IteratorWorkLoopStruct* iteratorStruct);
96 static void startCommandConfigureAlias(IteratorWorkLoopStruct* iteratorStruct,
const std::string& systemAlias);
97 static void startCommandConfigureGroup(IteratorWorkLoopStruct* iteratorStruct);
98 static bool checkCommandConfigure(IteratorWorkLoopStruct* iteratorStruct);
100 static void startCommandModifyActive(IteratorWorkLoopStruct* iteratorStruct);
102 static void startCommandMacro(IteratorWorkLoopStruct* iteratorStruct,
bool isFEMacro);
103 static bool checkCommandMacro(IteratorWorkLoopStruct* iteratorStruct,
bool isFEMacro);
105 static void startCommandBeginLabel(IteratorWorkLoopStruct* iteratorStruct);
106 static void startCommandRepeatLabel(IteratorWorkLoopStruct* iteratorStruct);
108 static void startCommandRun(IteratorWorkLoopStruct* iteratorStruct);
109 static bool checkCommandRun(IteratorWorkLoopStruct* iteratorStruct);
111 static void startCommandWait(IteratorWorkLoopStruct* iteratorStruct);
112 static bool checkCommandWait(IteratorWorkLoopStruct* iteratorStruct);
114 static void startCommandFSMTransition(IteratorWorkLoopStruct* iteratorStruct,
const std::string& transitionCommand);
115 static bool checkCommandFSMTransition(IteratorWorkLoopStruct* iteratorStruct,
const std::string& finalState);
117 static bool haltIterator(
Iterator* iterator,
118 IteratorWorkLoopStruct* iteratorStruct = 0,
119 bool doNotHaltFSM =
false);
121 std::mutex accessMutex_;
122 volatile bool workloopRunning_;
123 volatile bool activePlanIsRunning_;
124 volatile bool iteratorBusy_;
125 volatile bool commandPlay_, commandPause_,
129 std::string activePlanName_, lastStartedPlanName_, lastFinishedPlanName_;
130 volatile unsigned int activeCommandIndex_, activeCommandIteration_, activeNumberOfCommands_;
131 std::string activeCommandType_;
133 volatile uint64_t genPlanDurationSeconds_ = -1;
134 volatile unsigned int genPlanNumberOfRuns_ = 1;
135 std::string genFsmName_, genConfigAlias_, genLogEntry_;
136 bool genKeepConfiguration_ =
false;
138 std::vector<unsigned int> depthIterationStack_;
139 volatile time_t activeCommandStartTime_;
140 std::string lastFsmName_;
141 std::string errorMessage_;
146 static void helpCommandModifyActive(IteratorWorkLoopStruct* iteratorStruct,
const T& setValue,
bool doTrackGroupChanges);
149 #include "otsdaq/GatewaySupervisor/Iterator.icc"
void getIterationPlanStatus(HttpXmlDocument &xmldoc)
return state machine and iterator status