YARP
Yet Another Robot Platform
primresource.h
Go to the documentation of this file.
1 /*
2  * SPDX-FileCopyrightText: 2006-2021 Istituto Italiano di Tecnologia (IIT)
3  * SPDX-License-Identifier: BSD-3-Clause
4  */
5 
6 #ifndef YARP_MANAGER_PRIMRESOURCE
7 #define YARP_MANAGER_PRIMRESOURCE
8 
10 #include <yarp/manager/node.h>
11 #include <yarp/manager/utility.h>
12 #include <yarp/manager/resource.h>
14 #include <yarp/conf/api.h>
15 
16 namespace yarp {
17 namespace manager {
18 
19 typedef size_t Capacity;
20 
24 class Memory : public GenericResource {
25 public:
26  Memory();
27  Memory(const char* szName);
28  ~Memory() override;
29  Node* clone() override;
30  bool satisfy(GenericResource* resource) override;
31 
32  void setTotalSpace(Capacity c) { totalSpace = c; }
33  Capacity getTotalSpace() { return totalSpace; }
34  void setFreeSpace(Capacity c) { freeSpace = c; }
35  Capacity getFreeSpace() { return freeSpace; }
36 
37 protected:
38 
39 private:
40  Capacity totalSpace;
41  Capacity freeSpace;
42 
43 };
44 
45 
46 /*
47  * class Storage
48  */
49 class Storage : public GenericResource {
50 public:
51  Storage();
52  Storage(const char* szName);
53  virtual ~Storage();
54  Node* clone() override;
55  bool satisfy(GenericResource* resource) override;
56 
57  void setTotalSpace(Capacity c) { totalSpace = c; }
58  Capacity getTotalSpace() { return totalSpace; }
59  void setFreeSpace(Capacity c) { freeSpace = c; }
60  Capacity getFreeSpace() { return freeSpace; }
61 
62 protected:
63 
64 private:
65  Capacity totalSpace;
66  Capacity freeSpace;
67 };
68 
69 
70 /*
71  * Class Network
72  */
73 class Network : public GenericResource {
74 public:
75  Network();
76  Network(const char* szName);
77  virtual ~Network();
78  Node* clone() override;
79  bool satisfy(GenericResource* resource) override;
80 
81  void setIP4(const char* ip) {
82  if (ip) {
83  strIP4 = ip;
84  }
85  }
86  void setIP6(const char* ip) {
87  if (ip) {
88  strIP6 = ip;
89  }
90  }
91  void setMAC(const char* mac) {
92  if (mac) {
93  strMAC = mac;
94  }
95  }
96  const char* getIP4() { return strIP4.c_str(); }
97  const char* getIP6() { return strIP6.c_str(); }
98  const char* getMAC() { return strMAC.c_str(); }
99 
100 protected:
101 
102 private:
103  std::string strIP4;
104  std::string strIP6;
105  std::string strMAC;
106 };
107 
108 
109 typedef struct _LoadAvg {
111  double loadAverage1;
112  double loadAverage5;
115 
116 
117 /*
118  * Class Processor
119  */
120 class Processor : public GenericResource {
121 public:
122  Processor();
123  Processor(const char* szName);
124  virtual ~Processor();
125  Node* clone() override;
126  bool satisfy(GenericResource* resource) override;
127 
128  void setArchitecture(const char* arch) {
129  if (arch) {
130  strArchitecure = arch;
131  }
132  }
133  void setModel(const char* model) {
134  if (model) {
135  strModel = model;
136  }
137  }
138  void setCores(size_t n) { cores = n; }
139  void setSiblings(size_t n) { siblings = n; }
140  void setFrequency(double f) { frequency = f; }
141  void setCPULoad(const LoadAvg &avg) { cpuload = avg; }
142  const char* getArchitecture() { return strArchitecure.c_str(); }
143  const char* getModel() { return strModel.c_str(); }
144  size_t getCores() { return cores; }
145  size_t getSiblings() { return siblings; }
146  double getFrequency() { return frequency; }
147  const LoadAvg& getCPULoad() { return cpuload; }
148 
149 protected:
150 
151 private:
152  std::string strArchitecure;
153  std::string strModel;
154  size_t cores;
155  size_t siblings;
156  double frequency;
157  LoadAvg cpuload;
158 };
159 
160 
164 typedef struct _Process {
165  std::string command;
166  int pid;
168 
169 typedef std::vector<Process> ProcessContainer;
170 typedef std::vector<Process>::iterator ProcessIterator;
171 
172 class Computer : public GenericResource {
173 public:
174  Computer();
175  Computer(const char* szName);
176  Computer(const Computer& rhs);
177  virtual ~Computer();
178  Computer& operator=(const Computer& rhs);
179  Node* clone() override;
180  bool satisfy(GenericResource* resource) override;
181 
182  void setMemory(Memory& mem) { memory = mem; }
183  void setStorage(Storage& stg) { storage = stg; }
184  void setProcessor(Processor& proc) { processor = proc; }
185  void setNetwork(Network& net) { network = net; }
186  void setPlatform(Platform& os) {platform = os; }
187 
188  Memory& getMemory() { return memory; }
189  Storage& getStorage() { return storage; }
190  Processor& getProcessor() { return processor; }
191  Network& getNetwork() { return network; }
192  Platform& getPlatform() { return platform; }
193 
194  int peripheralCount() const { return peripheralResources.size(); }
195  GenericResource& getPeripheralAt(int index) const { return *(peripheralResources[index]); }
196  bool addPeripheral(GenericResource& res);
197  void clear();
198 
199  // processes list
200  ProcessContainer& getProcesses() { return processes; }
201 
202 protected:
203 
204 private:
205  Memory memory;
206  Storage storage;
207  Processor processor;
208  Network network;
209  Platform platform;
210  ResourcePContainer peripheralResources;
211 
212  // Processes are not actually part of a resource and only
213  // will be used by yarpmanager for listing processes running
214  // on Computer
215  ProcessContainer processes;
216 
217  bool satisfyComputer(Computer* comp);
218  bool satisfyComputerResource(GenericResource* resource);
219  void swap(const Computer &comp);
220 
221 };
222 
223 typedef std::vector<Computer> ComputerContainer;
224 typedef std::vector<Computer>::iterator ComputerIterator;
225 
226 } // namespace yarp
227 } // namespace manager
228 
229 
230 #endif // __YARP_MANAGER_PRIMRESOURCE__
GenericResource & getPeripheralAt(int index) const
Definition: primresource.h:195
bool satisfy(GenericResource *resource) override
void setProcessor(Processor &proc)
Definition: primresource.h:184
void setNetwork(Network &net)
Definition: primresource.h:185
Processor & getProcessor()
Definition: primresource.h:190
Computer()
Class Computer.
int peripheralCount() const
Definition: primresource.h:194
Platform & getPlatform()
Definition: primresource.h:192
bool addPeripheral(GenericResource &res)
void setPlatform(Platform &os)
Definition: primresource.h:186
void setStorage(Storage &stg)
Definition: primresource.h:183
void setMemory(Memory &mem)
Definition: primresource.h:182
Computer & operator=(const Computer &rhs)
ProcessContainer & getProcesses()
Definition: primresource.h:200
Node * clone() override
Node * clone() override
void setFreeSpace(Capacity c)
Definition: primresource.h:34
Memory()
Class Memory.
bool satisfy(GenericResource *resource) override
void setTotalSpace(Capacity c)
Definition: primresource.h:32
Capacity getFreeSpace()
Definition: primresource.h:35
Capacity getTotalSpace()
Definition: primresource.h:33
const char * getIP6()
Definition: primresource.h:97
Network()
Class Network.
const char * getIP4()
Definition: primresource.h:96
const char * getMAC()
Definition: primresource.h:98
void setIP4(const char *ip)
Definition: primresource.h:81
void setIP6(const char *ip)
Definition: primresource.h:86
bool satisfy(GenericResource *resource) override
Node * clone() override
void setMAC(const char *mac)
Definition: primresource.h:91
a Node of a Graph
Definition: node.h:65
const char * getModel()
Definition: primresource.h:143
bool satisfy(GenericResource *resource) override
const char * getArchitecture()
Definition: primresource.h:142
void setArchitecture(const char *arch)
Definition: primresource.h:128
Processor()
Class Processor.
void setSiblings(size_t n)
Definition: primresource.h:139
void setCPULoad(const LoadAvg &avg)
Definition: primresource.h:141
const LoadAvg & getCPULoad()
Definition: primresource.h:147
void setCores(size_t n)
Definition: primresource.h:138
void setModel(const char *model)
Definition: primresource.h:133
Node * clone() override
void setFrequency(double f)
Definition: primresource.h:140
bool satisfy(GenericResource *resource) override
void setFreeSpace(Capacity c)
Definition: primresource.h:59
Node * clone() override
void setTotalSpace(Capacity c)
Definition: primresource.h:57
Storage()
Class Storage.
Capacity getTotalSpace()
Definition: primresource.h:58
struct yarp::manager::_Process Process
Class Computer.
std::vector< Computer >::iterator ComputerIterator
Definition: primresource.h:224
size_t Capacity
Definition: primresource.h:19
std::vector< Computer > ComputerContainer
Definition: primresource.h:223
std::vector< GenericResource * > ResourcePContainer
Definition: resource.h:59
std::vector< Process >::iterator ProcessIterator
Definition: primresource.h:170
std::vector< Process > ProcessContainer
Definition: primresource.h:169
struct yarp::manager::_LoadAvg LoadAvg
The main, catch-all namespace for YARP.
Definition: dirs.h:16