Service.h
1 
11 #ifndef WRENCH_SERVICE_H
12 #define WRENCH_SERVICE_H
13 
14 
15 #include <string>
16 #include <map>
17 
18 #include <wrench/simgrid_S4U_util/S4U_Daemon.h>
19 
20 namespace wrench {
21 
26  class Service : public S4U_Daemon {
27 
28  public:
29 
30 
31 
32  /***********************/
34  /***********************/
35 
36  void start(std::shared_ptr<Service> this_service, bool daemonize, bool auto_restart);
37  virtual void stop();
38  void suspend();
39  void resume();
40 
41  std::string getHostname();
42 
43  bool isUp();
44 
45  std::string getPropertyValueAsString(std::string);
46  double getPropertyValueAsDouble(std::string);
47  unsigned long getPropertyValueAsUnsignedLong(std::string);
48  bool getPropertyValueAsBoolean(std::string);
49 
50  void assertServiceIsUp();
51 
52  double getNetworkTimeoutValue();
53  void setNetworkTimeoutValue(double value);
54 
55  /***********************/
57  /***********************/
58 
59  /***********************/
61  /***********************/
62 
63  double getMessagePayloadValue(std::string);
64 
65  void setStateToDown();
66 
67  static void increaseNumCompletedServicesCount();
68  static void clearTrackedServices();
69  static void cleanupTrackedServices();
70 
71  /***********************/
73  /***********************/
74 
75  protected:
76 
77  /***********************/
79  /***********************/
80 
85  static void assertServiceIsUp(std::shared_ptr<Service> s) { s->assertServiceIsUp(); };
86 
87  friend class Simulation;
88 
89  ~Service();
90 
91  Service(std::string hostname, std::string process_name_prefix, std::string mailbox_name_prefix);
92 
93  // Property stuff
94  void setProperty(std::string, std::string);
95 
96  void setProperties(std::map<std::string, std::string> default_property_values,
97  std::map<std::string, std::string> overriden_property_values);
98 
99  // MessagePayload stuff
100  void setMessagePayload(std::string, double);
101 
102  void setMessagePayloads(std::map<std::string, double> default_messagepayload_values,
103  std::map<std::string, double> overriden_messagepayload_values);
104 
105 
106  void serviceSanityCheck();
107 
109  std::map<std::string, std::string> property_list;
110 
112  std::map<std::string, double> messagepayload_list;
113 
115  std::string name;
116 
120  double network_timeout = 30.0;
121 
127  template <class T>
128  std::shared_ptr<T> getSharedPtr() {
129  if (Service::service_shared_ptr_map.find(this) == Service::service_shared_ptr_map.end()) {
130  throw std::runtime_error("Service::getSharedPtr(): master shared_ptr to service not found! This should happen only "
131  "if the service has not been started, in which case this method shouldn't have been called");
132  }
133  auto shared_ptr = std::dynamic_pointer_cast<T>(Service::service_shared_ptr_map[this]);
134  if (not shared_ptr) {
135  throw std::runtime_error("Service::getSharedPtr(): Invalid provided template");
136  }
137  return shared_ptr;
138  }
139 
146  template <class T>
147  static std::shared_ptr<T> getServiceByName(std::string name) {
148  for (auto const &s : Service::service_shared_ptr_map) {
149  if (s.first->getName() == name) {
150  return std::dynamic_pointer_cast<T>(s.second);
151  }
152  }
153  return nullptr;
154  }
155 
156 
157  private:
158 
159  static std::unordered_map<Service *, std::shared_ptr<Service>> service_shared_ptr_map;
160 
161  bool shutting_down = false;
162 
163  static unsigned long num_terminated_services;
164 
165 
166  /***********************/
168  /***********************/
169 
170  };
171 };
172 
173 
174 #endif //WRENCH_SERVICE_H
Definition: Alarm.cpp:20
A class that provides basic simulation methods. Once the simulation object has been explicitly or imp...
Definition: Simulation.h:46
A service that can be added to the simulation and that can be used by a WMS when executing a workflow...
Definition: Service.h:26