MNode.h
1 /*****************************************************************************
2  **
3  ** Header file for Muster API Node object
4  **
5  ** Name : MNode.h
6  ** Author : Leonardo Bernardini
7 ** Version : Alpha 9.0 Wed May 17th 2017
8  **
9  ** Copyright 2000-2017, Virtual Vertex
10  ** All Rights Reserved.
11  **
12  ** This file contains UNPUBLISHED PROPRIETARY SOURCE CODE.
13  ** The contents of this file may not be disclosed to third parties, copied
14  ** or duplicated in any form, in whole or in part, without the prior written
15  ** permission of the author.
16  **
17  *****************************************************************************/
18 #ifndef MNODE_H
19 #define MNODE_H
20 
21 #ifdef Pause
22 // Win32 headers #define Pause
23 #undef Pause
24 #endif
25 
26 #ifdef WIN32
27 // Windows definitions
28 #ifdef MCLIENTLIB_EXPORTS
29 #define MCLIENTLIB_API __declspec(dllexport)
30 #else
31 #define MCLIENTLIB_API __declspec(dllimport)
32 #endif
33 #else
34 
35 #ifndef MCLIENTLIB_EXPORTS
36 #ifdef LINUX
37 #define MCLIENTLIB_API
38 #else
39 #define MCLIENTLIB_API
40 #endif
41 #else
42 #define MCLIENTLIB_API
43 #endif
44 #endif
45 
46 // Disable STL Export warning, member is private, we don't need direct access from the DLL client
47 #if defined(_WIN32)
48 #pragma warning(disable: 4251)
49 #endif // _WIN32
50 
51 #include <string>
52 #include <vector>
53 #include <map>
54 #include <MClientLib/MError.h>
55 #include <MClientLib/MDrive.h>
56 #include <MClientLib/MAlarm.h>
57 
58 namespace MClientLib {
59 
62  class MCLIENTLIB_API MNodePathTranslator {
63  public:
64  virtual ~MNodePathTranslator();
65  virtual std::string translate(const std::string& path);
66 
67  };
68 
81  class MCLIENTLIB_API MNode {
82  public:
83 
88  kInstanceStatusUndefined = 0x00,
89  kInstanceStatusIdle = 0x01,
90  kInstanceStatusPaused = 0x02,
91  // OCCUPIED FLAGS, STATUS THAT GOES INTO OCCUPIED STATUS MAY BE INSIDE THIS RANGE
92  kInstanceStatusCompleted = 0x04,
93  kInstanceStatusInprogress = 0x08,
94  kInstanceStatusStarting = 0x10,
95  kInstanceStatusPrechunk = 0x20,
96  // FREE RESERVED BITS !!!
97  kInstanceStatusPostchunk = 0x1000,
98  // OCCUPIED FLAGS, STATUS THAT GOES INTO OCCUPIED STATUS MAY BE INSIDE THIS RANGE
99  kInstanceStatusStreamingTemplates = 0x2000,
100  kInstanceStatusJustKilledTheProcess = 0x4000,
101  kInstanceStatusRequiresUpgrade = 0x8000,
102  kInstanceStatusLockedByTimetable = 0x10000,
103  kInstanceStatusLockedByLoggedUser = 0x20000,
104  kInstanceStatusOffline = 0x40000,
105  kInstanceStatusLockedByProcess = 0x80000,
106  kInstanceStatusLockedByPython = 0x100000,
107  kInstanceStatusRegularQueue = 0x200000,
108  kInstanceStatusEmergencyQueue = 0x400000,
109  kInstanceStatusLockedByInstance = 0x800000,
110  kInstanceStatusLockedByReserv = 0x1000000
111  };
112 
115  kProcessPriorityIdle = 1,
116  kProcessPriorityNormal = 2,
117  kProcessPriorityHigh = 3,
118  kProcessPriorityRealtime = 4
119  } ;
120 
123  kSysEventShutdown,
124  kSysEventSuspend,
125  kSysEventIbernate,
126  kSysEventRestart,
127  kSysEventForceLogout,
128  kSysEventWakeup
129  } ;
130 
131  private:
132  long chunkId;
133  long nodeId;
134  int hostPlatform;
135  std::string hostName;
136  std::string instanceName;
137  std::string hostIP;
138  std::string statusDescription;
139  int processPriority;
140  long jobId;
141  long reservId;
142  std::string reservVersion;
143  int status;
144  bool willPause;
145  std::string currentJobName;
146  std::string currentChunkName;
147  std::string currentChunkNameNoFP;
148  std::string cpuUsage;
149  std::string nicUsage;
150  std::string disksUsage;
151  std::string ramUsage;
152  std::string supportedTemplates;
153  std::string notes;
154  bool realtimeLogEnabled;
155  int selectionPriority;
156  std::string hostMacAddress;
157  std::string currentCommandLine;
158  std::string stringJobsExclusions;
159  std::string stringTemplatesExclusions;
160  double currentJobTotalProgress;
161  std::string physicalCoreType;
162  double physicalCoreSpeed;
163  int physicalCpusCount;
164  int physicalCoresCount;
165  int logicalThreadsCount;
166  int physicalGpusCount;
167  std::vector<std::string> physicalGpusNames;
168  std::string platformDescription;
169  unsigned long long platformAffinitiyMask;
170  unsigned long long platformGpusMask;
171  long long int updateTime;
172  std::string clientVersion;
173  int instanceNumber;
174  std::vector<MClientLib::MDrive> physicalDisks;
175  time_t processStartTime;
176  std::string processesLogsPath;
177  bool sharedProcessesLogsPath;
178  time_t pauseOn;
179  time_t resumeOn;
180  std::map<unsigned long long, MClientLib::MAlarm> alarms;
181  public:
182  MNode();
183  virtual ~MNode();
184 
185  virtual void Clear();
186  virtual long getChunkId();
187  virtual long getNodeId();
188  virtual int getHostPlatform();
189  virtual const std::string getHostName();
190  virtual const std::string getInstanceName();
191  virtual const std::string getHostIP();
192  virtual const std::string getStatusDescription();
193  virtual int getProcessPriority();
194  virtual long getJobId();
195  virtual long getReservId();
196  virtual const std::string getReservVersion();
197  virtual int getStatus();
198  virtual bool getWillPause();
199  virtual const std::string getCurrentJobName();
200  virtual const std::string getCurrentChunkName();
201  virtual const std::string getCurrentChunkNameNoFP();
202  virtual const std::string getCpuUsage();
203  virtual const std::string getRamUsage();
204  virtual const std::string getNicUsage();
205  virtual const std::string getDisksUsage();
206  virtual const std::string getSupportedTemplates();
207  virtual const std::string getNotes();
208  virtual bool getRealtimeLogEnabled();
209  virtual int getSelectionPriority();
210  virtual const std::string getHostMacAddresses();
211  virtual const std::string getCurrentCommandLine();
212  virtual double getCurrentJobTotalProgress();
213  virtual const std::string getPhysicalCoreType();
214  virtual double getPhysicalCoreSpeed();
215  virtual int getPhysicalCpusCount();
216  virtual int getPhysicalCoresCount();
217  virtual const std::string getPlatformDescription();
218  virtual unsigned long long getProcsAffinityMask();
219  virtual unsigned long long getGpusAffinityMask();
220  virtual long long int getUpdateTime();
221  virtual const std::string getClientVersion();
222  virtual int getLogicalThreadsCount();
223  virtual int getInstanceNumber();
224  virtual const std::vector<MClientLib::MDrive> getPhysicalDisks();
225  virtual const std::string getJobsExclusion();
226  virtual const std::string getTemplatesExclusion();
227  virtual time_t getProcessStartTime();
228  virtual const std::string getProcessesLogsPath();
229  virtual bool getSharedProcessesLogsPath();
230  virtual int getPhysicalGpusCount();
231  virtual std::vector<std::string> getPhysicalGpusNames();
232  virtual time_t getPauseOn();
233  virtual time_t getResumeOn();
234 
235  virtual void setChunkId(long _currentChunkId);
236  virtual void setNodeId(long _nodeId);
237  virtual void setHostPlatform(int _hostPlatform);
238  virtual void setHostName(const std::string& _hostName);
239  virtual void setInstanceName(const std::string& _instanceName);
240  virtual void setHostIP(const std::string& _hostIp);
241  virtual void setStatusDescription(const std::string& _statusDescription);
242  virtual void setProcessPriority(int _processPriority);
243  virtual void setJobId(long _jobId);
244  virtual void setReservVersion(const std::string& _reservVersion);
245  virtual void setReservId(long _reservId);
246  virtual void setStatus(int _status);
247  virtual void setWillPause(bool _willPause);
248  virtual void setCurrentJobName(const std::string& _currentJobName);
249  virtual void setCurrentChunkName(const std::string& currentChunkName);
250  virtual void setCurrentChunkNameNoFP(const std::string& _currentChunkNameNoFP);
251  virtual void setCpuUsage(const std::string& _cpuUsage);
252  virtual void setRamUsage(const std::string& _ramUsage);
253  virtual void setNicUsage(const std::string& _nicUsage);
254  virtual void setDisksUsage(const std::string& _disksUsage);
255  virtual void setSupportedTemplates(const std::string& _supportedTemplates);
256  virtual void setNotes(std::string _notes);
257  virtual void setRealtimeLogEnabled(bool _realtimeLogEnabled);
258  virtual void setSelectionPriority(int _selectionPriority);
259  virtual void setHostMacAddresses(const std::string& _hostMacAddress);
260  virtual void setCurrentCommandLine(const std::string& _currentCommandLine);
261  virtual void setCurrentJobTotalProgress(double _currentJobTotalProgress);
262  virtual void setPhysicalCoreType(const std::string& _physicalCoreType);
263  virtual void setPhysicalCoreSpeed(double _physicalCoreSpeed);
264  virtual void setPhysicalCpusCount(int _physicalCpusCount);
265  virtual void setPhysicalCoresCount(int _physicalCoresCount);
266  virtual void setPlatformDescription(const std::string& _platformDescription);
267  virtual void setProcsAffinityMask(unsigned long long _platformAffinitiyMask);
268  virtual void setGpusAffinityMask(unsigned long long _platformGpusMask);
269  virtual void setUpdateTime(long long int _updateTime);
270  virtual void setClientVersion(const std::string& version);
271  virtual void setLogicalThreadsCount(int);
272  virtual void setInstanceNumber(int);
273  virtual void setJobsExclusion(const std::string& exclusion);
274  virtual void setTemplatesExclusion(const std::string& exclusion);
275  virtual void setPhysicalDisks(std::vector<MClientLib::MDrive>*); // Disks stats
276  virtual void addUnitToPhysicalDisks(MClientLib::MDrive*);
277  virtual void clearPhysicalDisks();
278  virtual void setProcessStartTime(time_t startTime);
279  virtual void setProcessesLogsPath(const std::string& _processesLogPath);
280  virtual void setSharedProcessesLogsPath(bool _sharedProcessesLogsPath);
281  virtual void setPhysicalGpusCount(int _physicalGpusCount);
282  virtual void setPhysicalGpusNames(const std::vector<std::string>& _physicalGpusNames);
283  virtual void setPauseOn(time_t _pauseOn);
284  virtual void setResumeOn(time_t _resumeOn);
285 
286  virtual void clearAlarms();
287  virtual void addAlarm(MClientLib::MAlarm);
288  virtual void removeAlarm(unsigned long long alarmId);
289  virtual void silenceAlarm(unsigned long long alarmId);
290  virtual MClientLib::MAlarm getAlarm(unsigned long long alarmId);
291  virtual bool existsAlarm(unsigned long long alarmId);
292  virtual bool hasAlarms();
293  virtual std::vector<unsigned long long> getAlarms();
295  virtual bool Unmarshall( const std::vector<std::string>& items, MNodePathTranslator* translator = 0);
296  virtual const std::string Marshall(MNodePathTranslator* translator = 0);
297  void castedRelease();
299  };
300 
302 }
303 
305 #define IS_HOST_OCCUPIED(x) (x >= MClientLib::MNode::kInstanceStatusCompleted && x <= MClientLib::MNode::kInstanceStatusPostchunk)
306 
308 #endif
Class holding a drive status data.
Definition: MDrive.h:59
Class holding an instance entry.
Definition: MNode.h:81
Class holding an alarm data.
Definition: MAlarm.h:59