1 #include "otsdaq/Macros/TablePluginMacros.h"
2 #include "otsdaq/TablePlugins/ARTDAQDispatcherTable.h"
8 #define SLOWCONTROL_PV_FILE_PATH \
10 getenv("OTSDAQ_EPICS_DATA")? \
11 (std::string(getenv("OTSDAQ_EPICS_DATA")) + "/" + __ENV__("MU2E_OWNER") + "_otsdaq_artdaqDispatcher-ai.dbg"): \
12 (EPICS_CONFIG_PATH + "/_otsdaq_artdaqDispatcher-ai.dbg") )
17 ARTDAQDispatcherTable::ARTDAQDispatcherTable(
void)
26 __COUT__ <<
"ARTDAQDispatcherTable Constructed." << __E__;
30 ARTDAQDispatcherTable::~ARTDAQDispatcherTable(
void) {}
35 lastConfigManager_ = configManager;
36 if(!ARTDAQTableBase::doGenFiles(configManager))
38 __COUTS__(3) <<
"ARTDAQTableBase indicates file generation can be skipped."
43 __COUTS__(3) <<
"*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*" << __E__;
44 __COUTS__(3) << configManager->__SELF_NODE__ << __E__;
50 void ARTDAQDispatcherTable::genFlatFHiCL(
void)
54 auto dispatchers = lastConfigManager_->__SELF_NODE__.
getChildren(
55 std::map<std::string ,
60 for(
auto& dispatcher : dispatchers)
63 dispatcher.second, ARTDAQTableBase::ARTDAQAppType::Dispatcher);
64 ARTDAQTableBase::flattenFHICL(
65 ARTDAQAppType::Dispatcher,
66 dispatcher.second.getValue(),
67 &(fclMap_[ARTDAQAppType::Dispatcher][dispatcher.first]));
69 __COUTS__(3) <<
"*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*" << __E__;
73 unsigned int ARTDAQDispatcherTable::slowControlsHandlerConfig(
74 std::stringstream& out,
76 std::vector<std::pair<std::string , std::vector<std::string>>>*
83 std::string tabStr =
"";
84 std::string commentStr =
"";
87 std::vector<std::pair<std::string, ConfigurationTree>> artdaqRecords =
90 unsigned int numberOfDispatcherMetricParameters = 0;
92 for(
auto& artdaqPair : artdaqRecords)
94 if(artdaqPair.second.getNode(colARTDAQSupervisor_.colLinkToDispatchers_)
98 std::vector<std::pair<std::string, ConfigurationTree>> dispatcherRecords =
99 artdaqPair.second.getNode(colARTDAQSupervisor_.colLinkToDispatchers_)
102 for(
auto& dispatcherPair :
105 if(!dispatcherPair.second.status())
110 if(dispatcherPair.second.getNode(
"daqLink").isDisconnected())
113 auto daqLink = dispatcherPair.second.getNode(
"daqLink");
115 if(daqLink.getNode(
"daqMetricsLink").isDisconnected())
118 auto daqMetricsLinks = daqLink.getNode(
"daqMetricsLink").getChildren();
119 for(
auto& daqMetricsLink :
122 if(!daqMetricsLink.second.status())
125 if(daqMetricsLink.second.getNode(
"metricParametersLink")
131 dispatcherPair.second.
getNode(
"MetricAlarmThresholdsLink");
133 auto metricParametersLinks =
134 daqMetricsLink.second.
getNode(
"metricParametersLink")
136 for(
auto& metricParametersLink :
137 metricParametersLinks)
139 if(!metricParametersLink.second.status())
142 std::string subsystem =
143 metricParametersLink.second.getNode(
"metricParameterValue")
144 .getValueWithDefault<std::string>(std::string(
"TDAQ_") +
145 __ENV__(
"MU2E_OWNER"));
146 if(subsystem.find(
"Mu2e:") != std::string::npos)
147 subsystem = subsystem.replace(subsystem.find(
"Mu2e:"), 5,
"");
148 while(subsystem.find(
"\"") != std::string::npos)
149 subsystem = subsystem.replace(subsystem.find(
"\""), 1,
"");
151 numberOfDispatcherMetricParameters =
152 slowControlsHandler(out,
156 dispatcherPair.first,
160 __COUT__ <<
"Dispatcher '" << dispatcherPair.first
161 <<
"' number of metrics for slow controls: "
162 << numberOfDispatcherMetricParameters << __E__;
166 catch(
const std::runtime_error& e)
168 __COUT_ERR__ <<
"Ignoring Dispatcher error: " << e.what() << __E__;
173 return numberOfDispatcherMetricParameters;
180 return SLOWCONTROL_PV_FILE_PATH;
void init(ConfigurationManager *configManager) override
Methods.
virtual std::string setFilePath(void) const override
return out file path
<virtual so future plugins can inherit from multiple table base classes
static void outputDataReceiverFHICL(const ConfigurationTree &receiverNode, ARTDAQAppType appType, size_t maxFragmentSizeBytes=DEFAULT_MAX_FRAGMENT_SIZE, size_t routingTimeoutMs=DEFAULT_ROUTING_TIMEOUT_MS, size_t routingRetryCount=DEFAULT_ROUTING_RETRY_COUNT, std::string *returnFcl=nullptr)
ConfigurationTree getNode(const std::string &nodeString, bool doNotThrowOnBrokenUIDLinks=false) const
"root/parent/parent/"
std::vector< std::pair< std::string, ConfigurationTree > > getChildren(std::map< std::string, TableVersion > *memberMap=0, std::string *accumulatedTreeErrors=0) const
ConfigurationTree getNode(const std::string &nodeName, bool doNotThrowOnBrokenUIDLinks=false) const
navigating between nodes
std::vector< std::pair< std::string, ConfigurationTree > > getChildren(std::map< std::string, std::string > filterMap=std::map< std::string, std::string >(), bool byPriority=false, bool onlyStatusTrue=false) const
<virtual so future plugins can inherit from multiple table base classes
defines used also by OtsConfigurationWizardSupervisor