UniSet  2.24.2
Configuration.h
1 /*
2  * Copyright (c) 2015 Pavel Vainerman.
3  *
4  * This program is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU Lesser General Public License as
6  * published by the Free Software Foundation, version 2.1.
7  *
8  * This program is distributed in the hope that it will be useful, but
9  * WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11  * Lesser General Lesser Public License for more details.
12  *
13  * You should have received a copy of the GNU Lesser General Public License
14  * along with this program. If not, see <http://www.gnu.org/licenses/>.
15  */
16 // --------------------------------------------------------------------------
21 // --------------------------------------------------------------------------
22 #ifndef Configuration_H_
23 #define Configuration_H_
24 // --------------------------------------------------------------------------
25 #include <memory>
26 #include <string>
27 #include <ostream>
28 #include "UniXML.h"
29 #include "UniSetTypes.h"
30 #include "ObjectIndex.h"
31 #include "PassiveTimer.h" // for timeout_t
32 #include "IORFile.h"
33 #include "Debug.h"
34 // --------------------------------------------------------------------------
35 /*
36  В функции main нужно обязательно вызывать uniset::uniset_init(argc,argv);
37 */
38 namespace uniset
39 {
46  {
47  public:
48  virtual ~Configuration();
49 
50  static std::string help();
51 
53  Configuration( int argc, const char* const* argv, const std::string& xmlfile = "" );
54 
56  Configuration( int argc, const char* const* argv, std::shared_ptr<UniXML> xml );
57 
59  Configuration( int argc, const char* const* argv, std::shared_ptr<ObjectIndex> oind, const std::string& xmlfile = "" );
60 
62  Configuration( int argc, const char* const* argv,
63  const std::string& fileConf, uniset::ObjectInfo* objectsMap );
64 
66  std::string getField(const std::string& path) const noexcept;
68  int getIntField(const std::string& path) const noexcept;
70  int getPIntField(const std::string& path, int def) const noexcept;
71 
72  xmlNode* findNode(xmlNode* node, const std::string& searchnode, const std::string& name = "" ) const noexcept;
73 
74  // Получить узел
75  xmlNode* getNode(const std::string& path) const noexcept;
76 
77  // Получить указанное свойство пути
78  std::string getProp(xmlNode*, const std::string& name) const noexcept;
79  int getIntProp(xmlNode*, const std::string& name) const noexcept;
80  int getPIntProp(xmlNode*, const std::string& name, int def) const noexcept;
81 
82  // Получить указанное свойство по имени узла
83  std::string getPropByNodeName(const std::string& nodename, const std::string& prop) const noexcept;
84 
85  std::string getRootDir() const noexcept;
86  int getArgc() const noexcept;
87  const char* const* getArgv() const noexcept;
88  ObjectId getDBServer() const noexcept;
89  ObjectId getLocalNode() const noexcept;
90  std::string getLocalNodeName() const noexcept;
91  const std::string getNSName() const noexcept;
92 
93  // repository
94  std::string getRootSection() const noexcept;
95  std::string getSensorsSection() const noexcept;
96  std::string getObjectsSection() const noexcept;
97  std::string getControllersSection() const noexcept;
98  std::string getServicesSection() const noexcept;
99  // xml
100  xmlNode* getXMLSensorsSection() noexcept;
101  xmlNode* getXMLObjectsSection() noexcept;
102  xmlNode* getXMLControllersSection() noexcept;
103  xmlNode* getXMLServicesSection() noexcept;
104  xmlNode* getXMLNodesSection() noexcept;
105  xmlNode* getXMLObjectNode( uniset::ObjectId ) const noexcept;
106 
107  UniversalIO::IOType getIOType( uniset::ObjectId ) const noexcept;
108  UniversalIO::IOType getIOType( const std::string& name ) const noexcept;
109 
110  // net
111  size_t getCountOfNet() const noexcept;
112  timeout_t getRepeatTimeout() const noexcept;
113  size_t getRepeatCount() const noexcept;
114 
115  uniset::ObjectId getSensorID( const std::string& name ) const noexcept;
116  uniset::ObjectId getControllerID( const std::string& name ) const noexcept;
117  uniset::ObjectId getObjectID( const std::string& name ) const noexcept;
118  uniset::ObjectId getServiceID( const std::string& name ) const noexcept;
119  uniset::ObjectId getNodeID( const std::string& name ) const noexcept;
120 
121  // поиск в sensors,objects,controlles,services,nodes
122  uniset::ObjectId getAnyID( const std::string& name ) const noexcept;
123 
124 
125  const std::string getConfFileName() const noexcept;
126  std::string getImagesDir() const noexcept;
127  std::string getNodeIp( uniset::ObjectId node );
128 
129  timeout_t getHeartBeatTime() const noexcept;
130  timeout_t getNCReadyTimeout() const noexcept;
131  timeout_t getStartupIgnoreTimeout() const noexcept;
132 
133  // dirs
134  const std::string getConfDir() const noexcept;
135  const std::string getDataDir() const noexcept;
136  const std::string getBinDir() const noexcept;
137  const std::string getLogDir() const noexcept;
138  const std::string getLockDir() const noexcept;
139  const std::string getDocDir() const noexcept;
140 
141  bool isLocalIOR() const noexcept;
142  bool isTransientIOR() const noexcept;
143  size_t getHttpResovlerPort() const noexcept;
144 
146  std::string getArgParam(const std::string& name, const std::string& defval = "") const noexcept;
147 
149  std::string getArg2Param(const std::string& name, const std::string& defval, const std::string& defval2 = "") const noexcept;
150 
152  int getArgInt(const std::string& name, const std::string& defval = "") const noexcept;
153 
155  int getArgPInt(const std::string& name, int defval) const noexcept;
156  int getArgPInt(const std::string& name, const std::string& strdefval, int defval) const noexcept;
157 
158  xmlNode* initLogStream( DebugStream& deb, const std::string& nodename ) noexcept;
159  xmlNode* initLogStream( std::shared_ptr<DebugStream> deb, const std::string& nodename ) noexcept;
160  xmlNode* initLogStream( DebugStream* deb, const std::string& nodename ) noexcept;
161 
162  uniset::ListOfNode::const_iterator listNodesBegin() const noexcept;
163  uniset::ListOfNode::const_iterator listNodesEnd() const noexcept;
164 
166  std::shared_ptr<ObjectIndex> oind;
167 
169  std::shared_ptr<IORFile> iorfile;
170 
172  const std::shared_ptr<UniXML> getConfXML() const noexcept;
173 
174  CORBA::ORB_ptr getORB() const;
175  const CORBA::PolicyList getPolicy() const noexcept;
176 
177  static bool checkOmniORBendPoint( const std::string& endPoint );
178 
179  protected:
180  Configuration();
181 
182  virtual void initConfiguration(int argc, const char* const* argv);
183 
184  void createNodesList();
185  virtual void initNode( uniset::NodeInfo& ninfo, UniXML::iterator& it) noexcept;
186 
187  void initRepSections();
188  std::pair<std::string, xmlNode*> getRepSectionName( const std::string& sec );
189  void setConfFileName( const std::string& fn = "" );
190  void initParameters();
191  void setLocalNode( const std::string& nodename );
192 
193  std::string getPort( const std::string& port = "" ) const noexcept;
194 
195  std::string rootDir = { "" };
196  std::shared_ptr<UniXML> unixml;
197 
198  int _argc = { 0 };
199  const char** _argv = { nullptr };
200  CORBA::ORB_var orb;
201  CORBA::PolicyList policyList;
202 
203  std::string NSName = { "" };
204  size_t countOfNet = { 1 };
205  size_t repeatCount = { 3 };
208  timeout_t repeatTimeout = { 50 };
210  size_t httpResolverPort = { 8008 };
211 
212  uniset::ListOfNode lnodes;
213 
214  // repository
215  std::string secRoot = { "" };
216  std::string secSensors = { "" };
217  std::string secObjects = { "" };
218  std::string secControlles = { "" };
219  std::string secServices = { "" };
220 
221  // xml
222  xmlNode* xmlSensorsSec = { 0 };
223  xmlNode* xmlObjectsSec = { 0 };
224  xmlNode* xmlControllersSec = { 0 };
225  xmlNode* xmlServicesSec = { 0 };
226  xmlNode* xmlNodesSec = { 0 };
227 
228  ObjectId localDBServer = { uniset::DefaultObjectId };
229  ObjectId localNode = { uniset::DefaultObjectId };
230 
231  std::string localNodeName = { "" };
232  std::string fileConfName = { "" };
233  std::string imagesDir = { "" };
234 
235  std::string confDir = { "" };
236  std::string dataDir = { "" };
237  std::string binDir = { "" };
238  std::string logDir = { "" };
239  std::string docDir = { "" };
240  std::string lockDir = { "" };
241  bool localIOR = { false };
242  bool transientIOR = { false };
243 
244  timeout_t heartbeat_msec = { 3000 };
245  timeout_t ncreadytimeout_msec = { 180000 };
246  timeout_t startupIgnoretimeout_msec = { 5000 };
247  };
248 
250  std::shared_ptr<Configuration> uniset_conf() noexcept;
251 
253  std::shared_ptr<DebugStream> ulog() noexcept;
254 
256  std::shared_ptr<Configuration> uniset_init( int argc, const char* const* argv, const std::string& xmlfile = "configure.xml" );
257  std::shared_ptr<Configuration> uniset_init( int argc, const char* const* argv, std::shared_ptr<UniXML> xml );
258  // --------------------------------------------------------------------------
259 } // end of uniset namespace
260 // --------------------------------------------------------------------------
261 // "синтаксический сахар" для логов
262 #define uinfo if( uniset::ulog()->debugging(Debug::INFO) ) uniset::ulog()->info()
263 #define uwarn if( uniset::ulog()->debugging(Debug::WARN) ) uniset::ulog()->warn()
264 #define ucrit if( uniset::ulog()->debugging(Debug::CRIT) ) uniset::ulog()->crit()
265 #define ulog1 if( uniset::ulog()->debugging(Debug::LEVEL1) ) uniset::ulog()->level1()
266 #define ulog2 if( uniset::ulog()->debugging(Debug::LEVEL2) ) uniset::ulog()->level2()
267 #define ulog3 if( uniset::ulog()->debugging(Debug::LEVEL3) ) uniset::ulog()->level3()
268 #define ulog4 if( uniset::ulog()->debugging(Debug::LEVEL4) ) uniset::ulog()->level4()
269 #define ulog5 if( uniset::ulog()->debugging(Debug::LEVEL5) ) uniset::ulog()->level5()
270 #define ulog6 if( uniset::ulog()->debugging(Debug::LEVEL6) ) uniset::ulog()->level6()
271 #define ulog7 if( uniset::ulog()->debugging(Debug::LEVEL7) ) uniset::ulog()->level7()
272 #define ulog8 if( uniset::ulog()->debugging(Debug::LEVEL8) ) uniset::ulog()->level8()
273 #define ulog9 if( uniset::ulog()->debugging(Debug::LEVEL9) ) uniset::ulog()->level9()
274 #define ulogsys if( uniset::ulog()->debugging(Debug::SYSTEM) ) uniset::ulog()->system()
275 #define ulogrep if( uniset::ulog()->debugging(Debug::REPOSITORY) ) uniset::ulog()->repository()
276 #define ulogany uniset::ulog()->any()
277 // --------------------------------------------------------------------------
278 #endif // Configuration_H_
Definition: DebugStream.h:62
Definition: Configuration.h:46
const std::shared_ptr< UniXML > getConfXML() const noexcept
Definition: Configuration.cc:1134
size_t countOfNet
Definition: Configuration.h:204
std::string getRootDir() const noexcept
Definition: Configuration.cc:840
std::string getArgParam(const std::string &name, const std::string &defval="") const noexcept
Definition: Configuration.cc:535
std::string getArg2Param(const std::string &name, const std::string &defval, const std::string &defval2="") const noexcept
Definition: Configuration.cc:530
ObjectId getDBServer() const noexcept
Definition: Configuration.cc:855
std::string getLocalNodeName() const noexcept
Definition: Configuration.cc:865
std::string getField(const std::string &path) const noexcept
Получить значение полей с путём path.
Definition: Configuration.cc:809
timeout_t repeatTimeout
Definition: Configuration.h:208
int getPIntField(const std::string &path, int def) const noexcept
Получить число из поле с путём path (или def, если значение <= 0)
Definition: Configuration.cc:821
std::string NSName
Definition: Configuration.h:203
int getIntField(const std::string &path) const noexcept
Получить число из поле с путём path.
Definition: Configuration.cc:815
int getArgPInt(const std::string &name, int defval) const noexcept
Definition: Configuration.cc:545
std::shared_ptr< ObjectIndex > oind
Definition: Configuration.h:166
std::shared_ptr< IORFile > iorfile
Definition: Configuration.h:169
int getArgInt(const std::string &name, const std::string &defval="") const noexcept
Definition: Configuration.cc:540
ObjectId getLocalNode() const noexcept
Definition: Configuration.cc:860
size_t repeatCount
Definition: Configuration.h:205
Definition: UniXML.h:122
Definition: CommonEventLoop.h:15
std::shared_ptr< Configuration > uniset_init(int argc, const char *const *argv, const std::string &xmlfile="configure.xml")
Definition: Configuration.cc:1517
const ObjectId DefaultObjectId
Definition: UniSetTypes.h:70
std::shared_ptr< Configuration > uniset_conf() noexcept
Definition: Configuration.cc:90
std::shared_ptr< DebugStream > ulog() noexcept
Definition: Configuration.cc:80
long ObjectId
Definition: UniSetTypes_i.idl:30
Definition: UniSetTypes_i.idl:55
Definition: UniSetTypes.h:151