environment.hpp 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  1. /*##############################################################################
  2. HPCC SYSTEMS software Copyright (C) 2012 HPCC Systems®.
  3. Licensed under the Apache License, Version 2.0 (the "License");
  4. you may not use this file except in compliance with the License.
  5. You may obtain a copy of the License at
  6. http://www.apache.org/licenses/LICENSE-2.0
  7. Unless required by applicable law or agreed to in writing, software
  8. distributed under the License is distributed on an "AS IS" BASIS,
  9. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  10. See the License for the specific language governing permissions and
  11. limitations under the License.
  12. ############################################################################## */
  13. #ifndef ENVIRONMENT_INCL
  14. #define ENVIRONMENT_INCL
  15. #include "jiface.hpp"
  16. #include "dasubs.hpp"
  17. #ifdef ENVIRONMENT_EXPORTS
  18. #define ENVIRONMENT_API DECL_EXPORT
  19. #else
  20. #define ENVIRONMENT_API DECL_IMPORT
  21. #endif
  22. interface IPropertyTree; // Forward reference
  23. interface IEnvironment; // Forward reference
  24. interface ISDSSubscription;// Forward reference
  25. interface IConstEnvBase : extends IInterface
  26. {
  27. virtual IStringVal & getXML(IStringVal & str) const = 0;
  28. virtual IStringVal & getName(IStringVal & str) const = 0;
  29. virtual IPropertyTree & getPTree() const = 0;
  30. };
  31. interface IConstDomainInfo : extends IConstEnvBase
  32. {
  33. virtual void getAccountInfo(IStringVal & name, IStringVal & pw) const = 0;
  34. virtual void getSnmpSecurityString(IStringVal & securityString) const = 0;
  35. virtual void getSSHAccountInfo(IStringVal & name, IStringVal & sshKeyFile, IStringVal& sshKeyPassphrase) const = 0;
  36. };
  37. enum EnvMachineState
  38. {
  39. MachineStateAvailable = 0,
  40. MachineStateUnavailable = 1,
  41. MachineStateUnknown = 2
  42. };
  43. enum EnvMachineOS
  44. {
  45. MachineOsW2K = 0,
  46. MachineOsSolaris = 1,
  47. MachineOsLinux = 2,
  48. MachineOsUnknown = 3,
  49. MachineOsSize = 4
  50. };
  51. interface IConstComputerTypeInfo : extends IConstEnvBase
  52. {
  53. virtual EnvMachineOS getOS() const = 0;
  54. virtual unsigned getNicSpeedMbitSec() const = 0;
  55. };
  56. interface IConstMachineInfo : extends IConstEnvBase
  57. {
  58. virtual IConstDomainInfo * getDomain() const = 0;
  59. virtual IStringVal & getNetAddress(IStringVal & str) const = 0;
  60. virtual unsigned getNicSpeedMbitSec() const = 0;
  61. virtual IStringVal & getDescription(IStringVal & str) const = 0;
  62. virtual EnvMachineOS getOS() const = 0;
  63. virtual EnvMachineState getState() const = 0;
  64. };
  65. interface IConstMachineInfoIterator : extends IIteratorOf<IConstMachineInfo>
  66. {
  67. virtual unsigned count() const = 0;
  68. };
  69. interface IConstInstanceInfo : extends IConstEnvBase
  70. {
  71. virtual IConstMachineInfo * getMachine() const = 0;
  72. virtual IStringVal & getEndPoint(IStringVal & str) const = 0;
  73. virtual unsigned getPort() const = 0;
  74. virtual IStringVal & getDirectory(IStringVal & str) const = 0;
  75. virtual IStringVal & getExecutableDirectory(IStringVal & str) const = 0;
  76. virtual bool getRunInfo(IStringVal & progpath, IStringVal & workdir, const char * defaultprogname) const = 0;
  77. };
  78. interface IConstDropZoneServerInfo : extends IConstEnvBase
  79. {
  80. virtual StringBuffer & getName(StringBuffer & name) const = 0;
  81. virtual StringBuffer & getServer(StringBuffer & server) const = 0;
  82. };
  83. interface IConstDropZoneServerInfoIterator : extends IIteratorOf<IConstDropZoneServerInfo>
  84. {
  85. virtual unsigned count() const = 0;
  86. };
  87. interface IConstDropZoneInfo : extends IConstEnvBase
  88. {
  89. virtual IStringVal & getComputerName(IStringVal & str) const = 0;
  90. virtual IStringVal & getDescription(IStringVal & str) const = 0;
  91. virtual IStringVal & getDirectory(IStringVal & str) const = 0;
  92. virtual IStringVal & getUMask(IStringVal & str) const = 0;
  93. virtual bool isECLWatchVisible() const = 0;
  94. virtual IConstDropZoneServerInfoIterator * getServers() const = 0;
  95. };
  96. interface IConstDropZoneInfoIterator : extends IIteratorOf<IConstDropZoneInfo>
  97. {
  98. virtual unsigned count() const = 0;
  99. };
  100. interface IConstDfuQueueInfo : extends IConstEnvBase
  101. {
  102. virtual IStringVal & getDfuQueueName(IStringVal & str) const = 0;
  103. };
  104. interface IConstDfuQueueInfoIterator : extends IIteratorOf<IConstDfuQueueInfo>
  105. {
  106. virtual unsigned count() const = 0;
  107. };
  108. interface IConstDaFileSrvInfo : extends IConstEnvBase
  109. {
  110. virtual const char *getName() const = 0;
  111. virtual unsigned getPort() const = 0;
  112. virtual bool getSecure() const = 0;
  113. };
  114. interface IConstInstanceInfoIterator : extends IIteratorOf<IConstInstanceInfo>
  115. {
  116. virtual unsigned count() const = 0;
  117. };
  118. interface IConstSparkThorInfo : extends IConstEnvBase
  119. {
  120. virtual IStringVal & getName(IStringVal & str) const = 0;
  121. virtual IStringVal & getBuild(IStringVal & str) const = 0;
  122. virtual IStringVal & getThorClusterName(IStringVal & str) const = 0;
  123. virtual unsigned getSparkExecutorCores() const = 0;
  124. virtual unsigned __int64 getSparkExecutorMemory() const = 0;
  125. virtual unsigned getSparkMasterPort() const = 0;
  126. virtual unsigned getSparkMasterWebUIPort() const = 0;
  127. virtual unsigned getSparkWorkerCores() const = 0;
  128. virtual unsigned __int64 getSparkWorkerMemory() const = 0;
  129. virtual unsigned getSparkWorkerPort() const = 0;
  130. virtual IConstInstanceInfoIterator * getInstanceIterator() const = 0;
  131. };
  132. interface IConstSparkThorInfoIterator : extends IIteratorOf<IConstSparkThorInfo>
  133. {
  134. virtual unsigned count() const = 0;
  135. };
  136. interface IConstEnvironment : extends IConstEnvBase
  137. {
  138. virtual IConstDomainInfo * getDomain(const char * name) const = 0;
  139. virtual IConstMachineInfo * getMachine(const char * name) const = 0;
  140. virtual IConstMachineInfo * getMachineByAddress(const char * hostOrIP) const = 0;
  141. virtual IConstMachineInfo * getMachineForLocalHost() const = 0;
  142. virtual IConstDropZoneInfo * getDropZone(const char * name) const = 0;
  143. virtual IConstInstanceInfo * getInstance(const char * type, const char * version, const char * domain) const = 0;
  144. virtual IConstComputerTypeInfo * getComputerType(const char * name) const = 0;
  145. virtual bool getRunInfo(IStringVal & path, IStringVal & dir, const char * type, const char * version, const char * machineaddr, const char * defaultprogname) const = 0;
  146. virtual IEnvironment & lock() const = 0;
  147. virtual bool isConstEnvironment() const = 0;
  148. virtual void clearCache() = 0;
  149. virtual IConstMachineInfoIterator * getMachineIterator() const = 0;
  150. virtual IConstDropZoneInfoIterator * getDropZoneIteratorByAddress(const char * address) const = 0;
  151. // returns a drop zone that is defined on IP with the shortest path that's a parent of targetPath
  152. virtual IConstDropZoneInfo * getDropZoneByAddressPath(const char * netaddress, const char *targetPath) const = 0;
  153. virtual IConstDropZoneInfoIterator * getDropZoneIterator() const = 0;
  154. virtual bool isDropZoneRestrictionEnabled() const = 0;
  155. virtual const char *getClusterGroupKeyPairName(const char *cluster) const = 0;
  156. virtual const char *getPublicKeyPath(const char *keyPairName) const = 0;
  157. virtual const char *getPrivateKeyPath(const char *keyPairName) const = 0;
  158. virtual const char *getFileAccessUrl() const = 0;
  159. virtual IConstDaFileSrvInfo *getDaFileSrvGroupInfo(const char *name) const = 0;
  160. virtual IConstSparkThorInfo *getSparkThor(const char *name) const = 0;
  161. virtual IConstSparkThorInfoIterator *getSparkThorIterator() const = 0;
  162. virtual IConstDfuQueueInfoIterator * getDfuQueueIterator() const = 0;
  163. virtual bool isValidDfuQueueName(const char * queueName) const = 0;
  164. };
  165. interface IEnvironment : extends IConstEnvironment
  166. {
  167. virtual void commit() = 0;
  168. virtual void rollback() = 0;
  169. virtual void setXML(const char * (null)) = 0;
  170. virtual void preload() = 0;
  171. };
  172. interface IEnvironmentFactory : extends IInterface
  173. {
  174. virtual IConstEnvironment * openEnvironment() = 0;
  175. virtual IEnvironment * updateEnvironment() = 0;
  176. virtual IEnvironment * loadLocalEnvironmentFile(const char * filename) = 0;
  177. virtual IEnvironment * loadLocalEnvironment(const char * xml) = 0;
  178. virtual SubscriptionId subscribe(ISDSSubscription * pSubHandler) = 0;
  179. virtual void unsubscribe(SubscriptionId id) = 0;
  180. virtual void validateCache() = 0;
  181. };
  182. class StringBuffer;
  183. extern "C" ENVIRONMENT_API IEnvironmentFactory * getEnvironmentFactory(bool update);
  184. extern "C" ENVIRONMENT_API void closeEnvironment();
  185. extern ENVIRONMENT_API unsigned getAccessibleServiceURLList(const char *serviceType, std::vector<std::string> &list);
  186. //------------------- Moved from workunit.hpp -------------
  187. // This enumeration is currently duplicated in workunit.hpp and environment.hpp. They must stay in sync.
  188. #ifndef ENGINE_CLUSTER_TYPE
  189. #define ENGINE_CLUSTER_TYPE
  190. enum ClusterType { NoCluster, HThorCluster, RoxieCluster, ThorLCRCluster };
  191. #endif
  192. interface IStringIterator;
  193. //! IClusterInfo
  194. interface IConstWUClusterInfo : extends IInterface
  195. {
  196. virtual IStringVal & getName(IStringVal & str) const = 0;
  197. virtual IStringVal & getScope(IStringVal & str) const = 0;
  198. virtual IStringVal & getThorQueue(IStringVal & str) const = 0;
  199. virtual unsigned getSize() const = 0;
  200. virtual unsigned getNumberOfSlaveLogs() const = 0;
  201. virtual ClusterType getPlatform() const = 0;
  202. virtual IStringVal & getAgentQueue(IStringVal & str) const = 0;
  203. virtual IStringVal & getAgentName(IStringVal & str) const = 0;
  204. virtual IStringVal & getECLSchedulerName(IStringVal & str) const = 0;
  205. virtual const StringArray & getECLServerNames() const = 0;
  206. virtual bool isLegacyEclServer() const = 0;
  207. virtual IStringVal & getServerQueue(IStringVal & str) const = 0;
  208. virtual IStringVal & getRoxieProcess(IStringVal & str) const = 0;
  209. virtual const StringArray & getThorProcesses() const = 0;
  210. virtual const StringArray & getPrimaryThorProcesses() const = 0;
  211. virtual const SocketEndpointArray & getRoxieServers() const = 0;
  212. virtual const char *getLdapUser() const = 0;
  213. virtual const char *getLdapPassword() const = 0;
  214. virtual unsigned getRoxieRedundancy() const = 0;
  215. virtual unsigned getChannelsPerNode() const = 0;
  216. virtual int getRoxieReplicateOffset() const = 0;
  217. virtual const char *getAlias() const = 0;
  218. };
  219. extern ENVIRONMENT_API void getDFUServerQueueNames(StringArray &ret, const char *process);
  220. extern ENVIRONMENT_API IStringVal &getEclCCServerQueueNames(IStringVal &ret, const char *process);
  221. extern ENVIRONMENT_API IStringVal &getEclServerQueueNames(IStringVal &ret, const char *process);
  222. extern ENVIRONMENT_API IStringVal &getEclSchedulerQueueNames(IStringVal &ret, const char *process);
  223. extern ENVIRONMENT_API IStringVal &getAgentQueueNames(IStringVal &ret, const char *process);
  224. extern ENVIRONMENT_API IStringVal &getRoxieQueueNames(IStringVal &ret, const char *process);
  225. extern ENVIRONMENT_API IStringVal &getThorQueueNames(IStringVal &ret, const char *process);
  226. extern ENVIRONMENT_API ClusterType getClusterTypeByClusterName(const char *cluster);
  227. extern ENVIRONMENT_API StringBuffer &getClusterGroupName(StringBuffer &ret, const char *cluster);
  228. extern ENVIRONMENT_API StringBuffer &getClusterThorGroupName(StringBuffer &ret, const char *cluster);
  229. extern ENVIRONMENT_API IStringIterator *getTargetClusters(const char *processType, const char *processName);
  230. extern ENVIRONMENT_API bool validateTargetClusterName(const char *clustname);
  231. extern ENVIRONMENT_API IConstWUClusterInfo* getTargetClusterInfo(const char *clustname);
  232. typedef IArrayOf<IConstWUClusterInfo> CConstWUClusterInfoArray;
  233. extern ENVIRONMENT_API unsigned getEnvironmentClusterInfo(CConstWUClusterInfoArray &clusters);
  234. extern ENVIRONMENT_API unsigned getEnvironmentClusterInfo(IPropertyTree* environmentRoot, CConstWUClusterInfoArray &clusters);
  235. extern ENVIRONMENT_API void getRoxieProcessServers(const char *process, SocketEndpointArray &servers);
  236. extern ENVIRONMENT_API bool isProcessCluster(const char *remoteDali, const char *process);
  237. extern ENVIRONMENT_API bool isProcessCluster(const char *process);
  238. extern ENVIRONMENT_API unsigned getEnvironmentThorClusterNames(StringArray &thorNames, StringArray &groupNames, StringArray &targetNames, StringArray &queueNames);
  239. #endif // _ENVIRONMENT_INCL
  240. //end