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_;
82 std::vector<std::string> fsmCommandParameters_;
83 std::vector<bool> targetsDone_;
87 static void IteratorWorkLoop(
Iterator* iterator);
88 static void startCommand(IteratorWorkLoopStruct* iteratorStruct);
89 static bool checkCommand(IteratorWorkLoopStruct* iteratorStruct);
91 static void startCommandChooseFSM(IteratorWorkLoopStruct* iteratorStruct,
const std::string& fsmName);
93 static void startCommandConfigureActive(IteratorWorkLoopStruct* iteratorStruct);
94 static void startCommandConfigureAlias(IteratorWorkLoopStruct* iteratorStruct,
const std::string& systemAlias);
95 static void startCommandConfigureGroup(IteratorWorkLoopStruct* iteratorStruct);
96 static bool checkCommandConfigure(IteratorWorkLoopStruct* iteratorStruct);
98 static void startCommandModifyActive(IteratorWorkLoopStruct* iteratorStruct);
100 static void startCommandMacro(IteratorWorkLoopStruct* iteratorStruct,
bool isFEMacro);
101 static bool checkCommandMacro(IteratorWorkLoopStruct* iteratorStruct,
bool isFEMacro);
103 static void startCommandBeginLabel(IteratorWorkLoopStruct* iteratorStruct);
104 static void startCommandRepeatLabel(IteratorWorkLoopStruct* iteratorStruct);
106 static void startCommandRun(IteratorWorkLoopStruct* iteratorStruct);
107 static bool checkCommandRun(IteratorWorkLoopStruct* iteratorStruct);
109 static void startCommandFSMTransition(IteratorWorkLoopStruct* iteratorStruct,
const std::string& transitionCommand);
110 static bool checkCommandFSMTransition(IteratorWorkLoopStruct* iteratorStruct,
const std::string& finalState);
112 static bool haltIterator(
Iterator* iterator,
113 IteratorWorkLoopStruct* iteratorStruct = 0,
114 bool doNotHaltFSM =
false);
116 std::mutex accessMutex_;
117 volatile bool workloopRunning_;
118 volatile bool activePlanIsRunning_;
119 volatile bool iteratorBusy_;
120 volatile bool commandPlay_, commandPause_,
124 std::string activePlanName_, lastStartedPlanName_, lastFinishedPlanName_;
125 volatile unsigned int activeCommandIndex_, activeCommandIteration_, activeNumberOfCommands_;
126 std::string activeCommandType_;
128 volatile uint64_t genPlanDurationSeconds_ = -1;
129 volatile unsigned int genPlanNumberOfRuns_ = 1;
130 std::string genFsmName_, genConfigAlias_, genLogEntry_;
131 bool genKeepConfiguration_ =
false;
133 std::vector<unsigned int> depthIterationStack_;
134 volatile time_t activeCommandStartTime_;
135 std::string lastFsmName_;
136 std::string errorMessage_;
141 static void helpCommandModifyActive(IteratorWorkLoopStruct* iteratorStruct,
const T& setValue,
bool doTrackGroupChanges);
144 #include "otsdaq/GatewaySupervisor/Iterator.icc"
void getIterationPlanStatus(HttpXmlDocument &xmldoc)
return state machine and iterator status