1 #ifndef _ots_CorePropertySupervisorBase_h_
2 #define _ots_CorePropertySupervisorBase_h_
4 #include "otsdaq/ConfigurationInterface/ConfigurationManager.h"
5 #include "otsdaq/ConfigurationInterface/ConfigurationTree.h"
6 #include "otsdaq/Macros/CoutMacros.h"
7 #include "otsdaq/MessageFacility/MessageFacility.h"
8 #include "otsdaq/SupervisorInfo/AllSupervisorInfo.h"
9 #include "otsdaq/TableCore/TableGroupKey.h"
10 #include "otsdaq/TablePlugins/XDAQContextTable/XDAQContextTable.h"
12 #include "otsdaq/WebUsersUtilities/WebUsers.h"
19 #include "otsdaq/SOAPUtilities/SOAPMessenger.h"
20 #include "otsdaq/WorkLoopManager/WorkLoopManager.h"
22 #include "otsdaq/CoreSupervisors/CorePropertySupervisorBase.h"
24 #include "otsdaq/CgiDataUtilities/CgiDataUtilities.h"
25 #include "otsdaq/SOAPUtilities/SOAPUtilities.h"
26 #include "otsdaq/XmlUtilities/HttpXmlDocument.h"
28 #include "otsdaq/FiniteStateMachine/VStateMachine.h"
30 #include "otsdaq/MessageFacility/ITRACEController.h"
31 #include "otsdaq/WebUsersUtilities/RemoteWebUsers.h"
33 #pragma GCC diagnostic push
34 #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
35 #include <xdaq/Application.h>
36 #pragma GCC diagnostic pop
37 #include "otsdaq/Macros/XDAQApplicationMacros.h"
38 #include "xgi/Method.h"
40 #include <toolbox/fsm/FailedEvent.h>
42 #include <xdaq/NamespaceURI.h>
43 #include <xoap/Method.h>
49 class ITRACEController;
75 static bool doPermissionsGrantAccess (std::map<std::string, WebUsers::permissionLevel_t>& permissionLevelsMap, std::map<std::string, WebUsers::permissionLevel_t>& permissionThresholdsMap);
79 return theConfigurationManager_->
getNode(
82 ConfigurationTree getSupervisorTableNode (
void)
const
84 return getContextTreeNode().
getNode(supervisorConfigurationPath_);
87 const std::string& getContextUID (
void)
const {
return supervisorContextUID_; }
88 const std::string& getSupervisorUID (
void)
const {
return supervisorApplicationUID_; }
89 const std::string& getSupervisorConfigurationPath (
void)
const
91 return supervisorConfigurationPath_;
95 const std::string supervisorClass_;
96 const std::string supervisorClassNoNamespace_;
98 static void indicateOtsAlive (
const CorePropertySupervisorBase* properties = 0);
99 static void indicateOtsDead (
const CorePropertySupervisorBase* properties = 0);
103 std::string supervisorContextUID_;
104 std::string supervisorApplicationUID_;
105 std::string supervisorConfigurationPath_;
109 xoap::MessageReference TRACESupervisorRequest (xoap::MessageReference message);
110 const std::string& getTraceLevels (
void);
111 const std::string& setTraceLevels (std::string
const& host, std::string
const& mode, std::string
const& labelsStr, uint32_t setValueMSB, uint32_t setValueLSB);
112 const std::string& setIndividualTraceLevels (std::string
const& host, std::string
const& mode, std::string
const& labelValuesStr);
113 const std::string& getTraceTriggerStatus (
void);
114 const std::string& setTraceTriggerEnable (std::string
const& host,
size_t entriesAfterTrigger);
115 const std::string& resetTRACE (std::string
const& host);
116 const std::string& enableTRACE (std::string
const& host,
bool enable);
117 const std::string& getTraceSnapshot (std::string
const& host, std::string
const& filterFor, std::string
const& filterOut);
125 : allSetNames_({&CheckUserLockRequestTypes,
126 &RequireUserLockRequestTypes,
127 &AutomatedRequestTypes,
128 &AllowNoLoginRequestTypes,
129 &RequireSecurityRequestTypes,
130 &NoXmlWhiteSpaceRequestTypes,
131 &NonXMLRequestTypes})
135 const std::string UserPermissionsThreshold =
"UserPermissionsThreshold";
136 const std::string UserGroupsAllowed =
"UserGroupsAllowed";
137 const std::string UserGroupsDisallowed =
"UserGroupsDisallowed";
139 const std::string CheckUserLockRequestTypes =
"CheckUserLockRequestTypes";
140 const std::string RequireUserLockRequestTypes =
"RequireUserLockRequestTypes";
141 const std::string AutomatedRequestTypes =
"AutomatedRequestTypes";
142 const std::string AllowNoLoginRequestTypes =
"AllowNoLoginRequestTypes";
143 const std::string RequireSecurityRequestTypes =
"RequireSecurityRequestTypes";
145 const std::string NoXmlWhiteSpaceRequestTypes =
"NoXmlWhiteSpaceRequestTypes";
146 const std::string NonXMLRequestTypes =
"NonXMLRequestTypes";
148 const std::set<const std::string*> allSetNames_;
149 } SUPERVISOR_PROPERTIES;
153 void checkSupervisorPropertySetup (
void);
154 volatile bool propertiesAreSetup_;
159 std::map<std::string, std::string> propertyMap_;
160 struct CoreSupervisorPropertyStruct
162 CoreSupervisorPropertyStruct()
163 : allSets_({&CheckUserLockRequestTypes,
164 &RequireUserLockRequestTypes,
165 &AutomatedRequestTypes,
166 &AllowNoLoginRequestTypes,
167 &RequireSecurityRequestTypes,
168 &NoXmlWhiteSpaceRequestTypes,
169 &NonXMLRequestTypes})
173 std::map<std::string, WebUsers::permissionLevel_t> UserPermissionsThreshold;
174 std::map<std::string, std::string> UserGroupsAllowed;
175 std::map<std::string, std::string> UserGroupsDisallowed;
177 std::set<std::string> CheckUserLockRequestTypes;
178 std::set<std::string> RequireUserLockRequestTypes;
179 std::set<std::string> AutomatedRequestTypes;
180 std::set<std::string> AllowNoLoginRequestTypes;
181 std::set<std::string> RequireSecurityRequestTypes;
183 std::set<std::string> NoXmlWhiteSpaceRequestTypes;
184 std::set<std::string> NonXMLRequestTypes;
186 std::set<std::set<std::string>*> allSets_;
190 void resetPropertiesAreSetup (
void)
192 propertiesAreSetup_ =
false;
198 void setSupervisorProperty (
199 const std::string& propertyName,
const T& propertyValue)
201 std::stringstream ss;
203 setSupervisorProperty(propertyName, ss.str());
205 void setSupervisorProperty (
const std::string& propertyName,
206 const std::string& propertyValue);
208 void addSupervisorProperty (
209 const std::string& propertyName,
const T& propertyValue)
212 std::stringstream ss;
213 ss << propertyValue <<
" | " << getSupervisorProperty(propertyName);
214 setSupervisorProperty(propertyName, ss.str());
216 void addSupervisorProperty (
const std::string& propertyName,
const std::string& propertyValue);
218 T getSupervisorProperty (
219 const std::string& propertyName)
222 checkSupervisorPropertySetup();
224 auto it = propertyMap_.find(propertyName);
225 if(it == propertyMap_.end())
227 __SS__ <<
"Could not find property named " << propertyName << __E__;
230 return StringMacros::validateValueForDefaultStringDataType<T>(it->second);
233 T getSupervisorProperty (
234 const std::string& propertyName,
const T& defaultValue)
237 checkSupervisorPropertySetup();
239 auto it = propertyMap_.find(propertyName);
240 if(it == propertyMap_.end())
245 return StringMacros::validateValueForDefaultStringDataType<T>(it->second);
247 std::string getSupervisorProperty (
const std::string& propertyName);
248 std::string getSupervisorProperty (
const std::string& propertyName,
const std::string& defaultValue);
251 time_t getSupervisorUptime (
void)
const {
return time(0) - constructedTime_;}
256 std::string traceReturnString_, traceReturnHostString_;
258 const time_t constructedTime_ = time(0);
ConfigurationTree getNode(const std::string &nodeString, bool doNotThrowOnBrokenUIDLinks=false) const
"root/parent/parent/"
ConfigurationTree getNode(const std::string &nodeName, bool doNotThrowOnBrokenUIDLinks=false) const
navigating between nodes
static void extractPermissionsMapFromString(const std::string &permissionsString, std::map< std::string, WebUsers::permissionLevel_t > &permissionsMap)
static bool doPermissionsGrantAccess(std::map< std::string, WebUsers::permissionLevel_t > &permissionLevelsMap, std::map< std::string, WebUsers::permissionLevel_t > &permissionThresholdsMap)
ITRACEController * theTRACEController_
only define for an app that receives a command
virtual void forceSupervisorPropertyValues(void)
override to force supervisor property values (and ignore user settings)
void loadUserSupervisorProperties(void)
ConfigurationTree getSupervisorTreeNode(void)
void getRequestUserInfo(WebUsers::RequestUserInfo &requestUserInfo)
WebUsers::permissionLevel_t getSupervisorPropertyUserPermissionsThreshold(const std::string &requestType)
XDAQ_CONST_CALL xdaq::ApplicationDescriptor * getGatewaySupervisorDescriptor(void)
will be wizard supervisor in wiz mode
virtual void setSupervisorPropertyDefaults(void)
override to control supervisor specific defaults