RTC Toolkit 4.0.1
Loading...
Searching...
No Matches
eventDefinitions.hpp
Go to the documentation of this file.
1
13#ifndef RTCTK_COMPONENTFRAMEWORK_EVENTDEFINITIONS_HPP
14#define RTCTK_COMPONENTFRAMEWORK_EVENTDEFINITIONS_HPP
15
17
18#include <boost/core/demangle.hpp>
19#include <chrono>
20
22
23template <typename T>
24std::string PrettyTypeName() {
25 return boost::core::demangle((typeid(T).name()));
26}
27
28inline uint64_t GetTimestamp() {
29 using namespace std::chrono;
30 return duration_cast<nanoseconds>(system_clock::now().time_since_epoch()).count();
31}
32
34
43 AbstractEvent() = delete;
44
45 AbstractEvent(JsonPayload const& payload) : origin(payload["origin"]), time(payload["time"]) {
46 }
47
48 AbstractEvent(std::string const& origin) : origin(origin), time(GetTimestamp()) {
49 }
50
52 JsonPayload payload;
53 payload["type"] = std::vector<std::string>();
54 payload["origin"] = origin;
55 payload["time"] = time;
56 return payload;
57 }
58
59 std::string origin; // which component performed computation
60 uint64_t time; // when was computation performed
61};
62
64
70 inline static const std::string TOPIC_NAME = "computation_topic";
71
72 ComputationEvent(std::string const& origin, std::string const& item, std::string const& state)
74 }
75
76 ComputationEvent(std::string const& origin, std::string const& item)
77 : ComputationEvent(origin, item, "finished") {
78 }
79
81 : AbstractEvent(payload), item(payload["item"]), state(payload["state"]) {
82 }
83
85 auto payload = AbstractEvent::ToJson();
86 payload["type"].push_back(PrettyTypeName<ComputationEvent>());
87 payload["item"] = item;
88 payload["state"] = state;
89 return payload;
90 }
91
92 std::string item; // what was computed
93 std::string state; // was computaton started, finished, failed
94};
95
101 ComputationStartedEvent(std::string const& origin, std::string const& item)
102 : ComputationEvent(origin, item, "started") {
103 }
104
106 }
107
109 auto payload = ComputationEvent::ToJson();
110 payload["type"].push_back(PrettyTypeName<ComputationStartedEvent>());
111 return payload;
112 }
113};
114
120 ComputationFinishedEvent(std::string const& origin, std::string const& item)
121 : ComputationEvent(origin, item, "finished") {
122 }
123
125 std::string const& item,
126 JsonPayload const& result)
127 : ComputationEvent(origin, item, "finished"), result(result) {
128 }
129
131 : ComputationEvent(payload), result(payload["result"]) {
132 }
133
135 auto payload = ComputationEvent::ToJson();
136 payload["type"].push_back(PrettyTypeName<ComputationFinishedEvent>());
137 payload["result"] = result;
138 return payload;
139 }
140
142};
143
145
151 inline static const std::string TOPIC_NAME = "configuration_topic";
152
153 ConfigurationEvent(std::string const& origin, std::string const& item, std::string const& state)
154 : AbstractEvent(origin), items({item}), state(state) {
155 }
156
157 ConfigurationEvent(std::string const& origin,
158 std::vector<std::string> const& items,
159 std::string const& state)
161 }
162
164 : AbstractEvent(payload), items(payload["items"]), state(payload["state"]) {
165 }
166
168 auto payload = AbstractEvent::ToJson();
169 payload["type"].push_back(PrettyTypeName<ConfigurationEvent>());
170 payload["items"] = items;
171 payload["state"] = state;
172 return payload;
173 }
174
175 std::vector<std::string> items; // what was configured
176 std::string state; // was configuration scheduled, started, finished, failed
177};
178
184 ConfigurationUpdatedEvent(std::string const& origin, std::string const& item)
185 : ConfigurationEvent(origin, item, "updated") {
186 }
187
188 ConfigurationUpdatedEvent(std::string const& origin, std::vector<std::string> const& items)
189 : ConfigurationEvent(origin, items, "updated") {
190 }
191
193 }
194
196 auto payload = ConfigurationEvent::ToJson();
197 payload["type"].push_back(PrettyTypeName<ConfigurationUpdatedEvent>());
198 return payload;
199 }
200};
201
207 ConfigurationRetrievedEvent(std::string const& origin, std::string const& item)
208 : ConfigurationEvent(origin, item, "retrieved") {
209 }
210
211 ConfigurationRetrievedEvent(std::string const& origin, std::vector<std::string> const& items)
212 : ConfigurationEvent(origin, items, "retrieved") {
213 }
214
216 }
217
219 auto payload = ConfigurationEvent::ToJson();
220 payload["type"].push_back(PrettyTypeName<ConfigurationRetrievedEvent>());
221 return payload;
222 }
223};
224
232 std::string const& item,
233 std::string const& hrtc_origin,
234 uint64_t hrtc_timestamp,
235 uint64_t hrtc_sample_id)
236 : ConfigurationEvent(origin, item, "scheduled")
240 }
241
243 : ConfigurationEvent(payload)
244 , hrtc_origin(payload["hrtc_origin"])
245 , hrtc_timestamp(payload["hrtc_timestamp"])
246 , hrtc_sample_id(payload["hrtc_sample_id"]) {
247 }
248
250 auto payload = ConfigurationEvent::ToJson();
251 payload["type"].push_back(PrettyTypeName<HrtcConfigurationScheduledEvent>());
252 payload["hrtc_origin"] = hrtc_origin;
253 payload["hrtc_timestamp"] = hrtc_timestamp;
254 payload["hrtc_sample_id"] = hrtc_sample_id;
255 return payload;
256 }
257
258 std::string hrtc_origin;
261};
262
269 std::string const& item,
270 std::string const& hrtc_origin,
271 uint64_t hrtc_timestamp,
272 uint64_t hrtc_sample_id)
273 : ConfigurationEvent(origin, item, "applied")
277 }
278
280 : ConfigurationEvent(payload)
281 , hrtc_origin(payload["hrtc_origin"])
282 , hrtc_timestamp(payload["hrtc_timestamp"])
283 , hrtc_sample_id(payload["hrtc_sample_id"]) {
284 }
285
287 auto payload = ConfigurationEvent::ToJson();
288 payload["type"].push_back(PrettyTypeName<HrtcConfigurationAppliedEvent>());
289 payload["hrtc_origin"] = hrtc_origin;
290 payload["hrtc_timestamp"] = hrtc_timestamp;
291 payload["hrtc_sample_id"] = hrtc_sample_id;
292 return payload;
293 }
294
295 std::string hrtc_origin;
298};
299
301
307 inline static const std::string TOPIC_NAME = "coordination_topic";
308
310 }
311
312 CoordinationEvent(JsonPayload const& payload) : AbstractEvent(payload) {
313 }
314
316 auto payload = AbstractEvent::ToJson();
317 payload["type"].push_back(PrettyTypeName<CoordinationEvent>());
318 return payload;
319 }
320};
321
327 StateChangedEvent(std::string const& origin,
328 std::string const& entity,
329 std::string const& state)
331 }
332
333 StateChangedEvent(std::string const& origin, std::string const& state)
335 }
336
338 : CoordinationEvent(payload), entity(payload["entity"]), state(payload["state"]) {
339 }
340
342 auto payload = CoordinationEvent::ToJson();
343 payload["type"].push_back(PrettyTypeName<StateChangedEvent>());
344 payload["state"] = state;
345 payload["entity"] = entity;
346 return payload;
347 }
348
349 std::string entity;
350 std::string state;
351};
352
358 HrtcStateChangedEvent(std::string const& origin,
359 std::string const& entity,
360 std::string const& state,
361 uint64_t hrtc_timestamp,
362 uint64_t hrtc_sample_id)
366 }
367
369 : StateChangedEvent(payload)
370 , hrtc_timestamp(payload["hrtc_timestamp"])
371 , hrtc_sample_id(payload["hrtc_sample_id"]) {
372 }
373
375 auto payload = StateChangedEvent::ToJson();
376 payload["type"].push_back(PrettyTypeName<HrtcStateChangedEvent>());
377 payload["hrtc_timestamp"] = hrtc_timestamp;
378 payload["hrtc_sample_id"] = hrtc_sample_id;
379 return payload;
380 }
381
384};
385
395 inline static const std::string TOPIC_NAME = "alert_status_topic";
396
403 struct Alert {
407 std::string origin;
408
412 std::string id;
413
417 std::string description;
418
422 std::uint64_t since;
423 };
424
428 AlertStatusEvent(bool st, std::vector<Alert> ac, std::string const& origin)
429 : AbstractEvent(origin), status(st), active_alerts(std::move(ac)) {
430 }
431
436 json["status"].get_to(status);
437 for (auto&& active : json["active_alerts"]) {
438 Alert alert;
439 active["id"].get_to(alert.id);
440 active["description"].get_to(alert.description);
441 active["origin"].get_to(alert.origin);
442 active["since"].get_to(alert.since);
443 active_alerts.push_back(alert);
444 }
445 }
446
451 auto payload = AbstractEvent::ToJson();
452 payload["type"].push_back(PrettyTypeName<AlertStatusEvent>());
453 payload["status"] = status;
454 JsonPayload json_active;
455 for (auto&& alert : active_alerts) {
456 json_active.push_back(JsonPayload{{"origin", alert.origin},
457 {"id", alert.id},
458 {"description", alert.description},
459 {"since", alert.since}});
460 }
461 payload["active_alerts"] = std::move(json_active);
462 return payload;
463 }
464
468 bool status;
469 std::vector<Alert> active_alerts;
470};
471
472} // namespace rtctk::componentFramework
473
474#endif // RTCTK_COMPONENTFRAMEWORK_EVENTDEFINITIONS_HPP
Defines the JSON payload type JsonPayload.
Definition: commandReplier.cpp:22
nlohmann::json JsonPayload
Type requirements:
Definition: jsonPayload.hpp:25
uint64_t GetTimestamp()
Definition: eventDefinitions.hpp:28
std::string PrettyTypeName()
Definition: eventDefinitions.hpp:24
Abstract Event Type that is used as a base for all events.
Definition: eventDefinitions.hpp:42
AbstractEvent(JsonPayload const &payload)
Definition: eventDefinitions.hpp:45
std::string origin
Definition: eventDefinitions.hpp:59
JsonPayload ToJson() const
Definition: eventDefinitions.hpp:51
AbstractEvent(std::string const &origin)
Definition: eventDefinitions.hpp:48
uint64_t time
Definition: eventDefinitions.hpp:60
Represents an active alert originating from a component instance.
Definition: eventDefinitions.hpp:403
std::string origin
Component instance origin.
Definition: eventDefinitions.hpp:407
std::uint64_t since
Timestamp when alert was first made active.
Definition: eventDefinitions.hpp:422
std::string id
Alert identifier which is unique to the origin.
Definition: eventDefinitions.hpp:412
std::string description
Description of alert.
Definition: eventDefinitions.hpp:417
Event published when alert status is changed.
Definition: eventDefinitions.hpp:394
AlertStatusEvent(JsonPayload const &json)
Construct by deserializing from JSON.
Definition: eventDefinitions.hpp:435
static const std::string TOPIC_NAME
Definition: eventDefinitions.hpp:395
JsonPayload ToJson() const
Serialize to JSON.
Definition: eventDefinitions.hpp:450
bool status
Reduced alert status.
Definition: eventDefinitions.hpp:468
AlertStatusEvent(bool st, std::vector< Alert > ac, std::string const &origin)
Construct by providing members.
Definition: eventDefinitions.hpp:428
std::vector< Alert > active_alerts
Definition: eventDefinitions.hpp:469
Abstract Event Type that is used as a base for computation events.
Definition: eventDefinitions.hpp:69
JsonPayload ToJson() const
Definition: eventDefinitions.hpp:84
std::string item
Definition: eventDefinitions.hpp:92
std::string state
Definition: eventDefinitions.hpp:93
ComputationEvent(std::string const &origin, std::string const &item)
Definition: eventDefinitions.hpp:76
ComputationEvent(std::string const &origin, std::string const &item, std::string const &state)
Definition: eventDefinitions.hpp:72
ComputationEvent(JsonPayload const &payload)
Definition: eventDefinitions.hpp:80
static const std::string TOPIC_NAME
Definition: eventDefinitions.hpp:70
Event Type used to signal that a computation has finished.
Definition: eventDefinitions.hpp:119
JsonPayload ToJson() const
Definition: eventDefinitions.hpp:134
ComputationFinishedEvent(std::string const &origin, std::string const &item)
Definition: eventDefinitions.hpp:120
JsonPayload result
Definition: eventDefinitions.hpp:141
ComputationFinishedEvent(JsonPayload const &payload)
Definition: eventDefinitions.hpp:130
ComputationFinishedEvent(std::string const &origin, std::string const &item, JsonPayload const &result)
Definition: eventDefinitions.hpp:124
Event Type used to signal that a computation has started.
Definition: eventDefinitions.hpp:100
ComputationStartedEvent(JsonPayload const &payload)
Definition: eventDefinitions.hpp:105
ComputationStartedEvent(std::string const &origin, std::string const &item)
Definition: eventDefinitions.hpp:101
JsonPayload ToJson() const
Definition: eventDefinitions.hpp:108
Abstract Event Type that is used as a base for configuration events.
Definition: eventDefinitions.hpp:150
ConfigurationEvent(JsonPayload const &payload)
Definition: eventDefinitions.hpp:163
ConfigurationEvent(std::string const &origin, std::string const &item, std::string const &state)
Definition: eventDefinitions.hpp:153
static const std::string TOPIC_NAME
Definition: eventDefinitions.hpp:151
std::string state
Definition: eventDefinitions.hpp:176
std::vector< std::string > items
Definition: eventDefinitions.hpp:175
ConfigurationEvent(std::string const &origin, std::vector< std::string > const &items, std::string const &state)
Definition: eventDefinitions.hpp:157
JsonPayload ToJson() const
Definition: eventDefinitions.hpp:167
Event Type used to signal that a configuration data item was retrieved from RTR.
Definition: eventDefinitions.hpp:206
ConfigurationRetrievedEvent(JsonPayload const &payload)
Definition: eventDefinitions.hpp:215
JsonPayload ToJson() const
Definition: eventDefinitions.hpp:218
ConfigurationRetrievedEvent(std::string const &origin, std::vector< std::string > const &items)
Definition: eventDefinitions.hpp:211
ConfigurationRetrievedEvent(std::string const &origin, std::string const &item)
Definition: eventDefinitions.hpp:207
Event Type used to signal that a configuration data item was updated in RTR.
Definition: eventDefinitions.hpp:183
ConfigurationUpdatedEvent(JsonPayload const &payload)
Definition: eventDefinitions.hpp:192
JsonPayload ToJson() const
Definition: eventDefinitions.hpp:195
ConfigurationUpdatedEvent(std::string const &origin, std::vector< std::string > const &items)
Definition: eventDefinitions.hpp:188
ConfigurationUpdatedEvent(std::string const &origin, std::string const &item)
Definition: eventDefinitions.hpp:184
Abstract Event Type that is used as a base for coordination events.
Definition: eventDefinitions.hpp:306
CoordinationEvent(std::string const &origin)
Definition: eventDefinitions.hpp:309
JsonPayload ToJson() const
Definition: eventDefinitions.hpp:315
static const std::string TOPIC_NAME
Definition: eventDefinitions.hpp:307
CoordinationEvent(JsonPayload const &payload)
Definition: eventDefinitions.hpp:312
Event Type used to signal that a configuration data item was applied in HRTC.
Definition: eventDefinitions.hpp:267
uint64_t hrtc_sample_id
Definition: eventDefinitions.hpp:297
HrtcConfigurationAppliedEvent(JsonPayload const &payload)
Definition: eventDefinitions.hpp:279
HrtcConfigurationAppliedEvent(std::string const &origin, std::string const &item, std::string const &hrtc_origin, uint64_t hrtc_timestamp, uint64_t hrtc_sample_id)
Definition: eventDefinitions.hpp:268
std::string hrtc_origin
Definition: eventDefinitions.hpp:295
uint64_t hrtc_timestamp
Definition: eventDefinitions.hpp:296
JsonPayload ToJson() const
Definition: eventDefinitions.hpp:286
Event Type used to signal that a configuration data item was scheduled to be applied in HRTC.
Definition: eventDefinitions.hpp:230
uint64_t hrtc_timestamp
Definition: eventDefinitions.hpp:259
uint64_t hrtc_sample_id
Definition: eventDefinitions.hpp:260
HrtcConfigurationScheduledEvent(std::string const &origin, std::string const &item, std::string const &hrtc_origin, uint64_t hrtc_timestamp, uint64_t hrtc_sample_id)
Definition: eventDefinitions.hpp:231
JsonPayload ToJson() const
Definition: eventDefinitions.hpp:249
std::string hrtc_origin
Definition: eventDefinitions.hpp:258
HrtcConfigurationScheduledEvent(JsonPayload const &payload)
Definition: eventDefinitions.hpp:242
Event Type used to signal that some entity in HRTC changed its state.
Definition: eventDefinitions.hpp:357
HrtcStateChangedEvent(std::string const &origin, std::string const &entity, std::string const &state, uint64_t hrtc_timestamp, uint64_t hrtc_sample_id)
Definition: eventDefinitions.hpp:358
HrtcStateChangedEvent(JsonPayload const &payload)
Definition: eventDefinitions.hpp:368
uint64_t hrtc_timestamp
Definition: eventDefinitions.hpp:382
JsonPayload ToJson() const
Definition: eventDefinitions.hpp:374
uint64_t hrtc_sample_id
Definition: eventDefinitions.hpp:383
Event Type used to signal that some entity changed its state.
Definition: eventDefinitions.hpp:326
StateChangedEvent(std::string const &origin, std::string const &state)
Definition: eventDefinitions.hpp:333
JsonPayload ToJson() const
Definition: eventDefinitions.hpp:341
std::string entity
Definition: eventDefinitions.hpp:349
StateChangedEvent(std::string const &origin, std::string const &entity, std::string const &state)
Definition: eventDefinitions.hpp:327
std::string state
Definition: eventDefinitions.hpp:350
StateChangedEvent(JsonPayload const &payload)
Definition: eventDefinitions.hpp:337