RTC Toolkit 5.0.0
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// Suppressing warnings about duplicate ToJson methods. We are not using polymorphism on purpose.
23// cppcheck-suppress-begin duplInheritedMember
24
25template <typename T>
26std::string PrettyTypeName() {
27 return boost::core::demangle((typeid(T).name()));
28}
29
31 using namespace std::chrono;
32 return duration_cast<nanoseconds>(system_clock::now().time_since_epoch()).count();
33}
34
36
45 AbstractEvent() = delete;
46
47 explicit AbstractEvent(const JsonPayload& payload)
48 : origin(payload["origin"]), time(payload["time"]) {
49 }
50
51 explicit AbstractEvent(const std::string& origin) : origin(origin), time(GetTimestamp()) {
52 }
53
55 JsonPayload payload;
56 payload["type"] = std::vector<std::string>();
57 payload["origin"] = origin;
58 payload["time"] = time;
59 return payload;
60 }
61
62 std::string origin; // which component performed computation
63 uint64_t time; // when was computation performed
64};
65
67
73 inline static const std::string TOPIC_NAME = "computation_topic";
74
75 ComputationEvent(const std::string& origin, const std::string& item, const std::string& state)
77 }
78
79 ComputationEvent(const std::string& origin, const std::string& item)
80 : ComputationEvent(origin, item, "finished") {
81 }
82
83 explicit ComputationEvent(const JsonPayload& payload)
84 : AbstractEvent(payload), item(payload["item"]), state(payload["state"]) {
85 }
86
88 auto payload = AbstractEvent::ToJson();
89 payload["type"].push_back(PrettyTypeName<ComputationEvent>());
90 payload["item"] = item;
91 payload["state"] = state;
92 return payload;
93 }
94
95 std::string item; // what was computed
96 std::string state; // was computaton started, finished, failed
97};
98
104 ComputationStartedEvent(const std::string& origin, const std::string& item)
105 : ComputationEvent(origin, item, "started") {
106 }
107
108 explicit ComputationStartedEvent(const JsonPayload& payload) : ComputationEvent(payload) {
109 }
110
112 auto payload = ComputationEvent::ToJson();
113 payload["type"].push_back(PrettyTypeName<ComputationStartedEvent>());
114 return payload;
115 }
116};
117
123 ComputationFinishedEvent(const std::string& origin, const std::string& item)
124 : ComputationEvent(origin, item, "finished") {
125 }
126
128 const std::string& item,
129 const JsonPayload& result)
130 : ComputationEvent(origin, item, "finished"), result(result) {
131 }
132
133 explicit ComputationFinishedEvent(const JsonPayload& payload)
134 : ComputationEvent(payload), result(payload["result"]) {
135 }
136
138 auto payload = ComputationEvent::ToJson();
139 payload["type"].push_back(PrettyTypeName<ComputationFinishedEvent>());
140 payload["result"] = result;
141 return payload;
142 }
143
145};
146
148
154 inline static const std::string TOPIC_NAME = "configuration_topic";
155
156 ConfigurationEvent(const std::string& origin, const std::string& item, const std::string& state)
157 : AbstractEvent(origin), items({item}), state(state) {
158 }
159
160 ConfigurationEvent(const std::string& origin,
161 const std::vector<std::string>& items,
162 const std::string& state)
164 }
165
166 explicit ConfigurationEvent(const JsonPayload& payload)
167 : AbstractEvent(payload), items(payload["items"]), state(payload["state"]) {
168 }
169
171 auto payload = AbstractEvent::ToJson();
172 payload["type"].push_back(PrettyTypeName<ConfigurationEvent>());
173 payload["items"] = items;
174 payload["state"] = state;
175 return payload;
176 }
177
178 std::vector<std::string> items; // what was configured
179 std::string state; // was configuration scheduled, started, finished, failed
180};
181
187 ConfigurationUpdatedEvent(const std::string& origin, const std::string& item)
188 : ConfigurationEvent(origin, item, "updated") {
189 }
190
191 ConfigurationUpdatedEvent(const std::string& origin, const std::vector<std::string>& items)
192 : ConfigurationEvent(origin, items, "updated") {
193 }
194
195 explicit ConfigurationUpdatedEvent(const JsonPayload& payload) : ConfigurationEvent(payload) {
196 }
197
199 auto payload = ConfigurationEvent::ToJson();
200 payload["type"].push_back(PrettyTypeName<ConfigurationUpdatedEvent>());
201 return payload;
202 }
203};
204
210 ConfigurationRetrievedEvent(const std::string& origin, const std::string& item)
211 : ConfigurationEvent(origin, item, "retrieved") {
212 }
213
214 ConfigurationRetrievedEvent(const std::string& origin, const std::vector<std::string>& items)
215 : ConfigurationEvent(origin, items, "retrieved") {
216 }
217
218 explicit ConfigurationRetrievedEvent(const JsonPayload& payload) : ConfigurationEvent(payload) {
219 }
220
222 auto payload = ConfigurationEvent::ToJson();
223 payload["type"].push_back(PrettyTypeName<ConfigurationRetrievedEvent>());
224 return payload;
225 }
226};
227
235 const std::string& item,
236 const std::string& hrtc_origin,
239 : ConfigurationEvent(origin, item, "scheduled")
243 }
244
246 : ConfigurationEvent(payload)
247 , hrtc_origin(payload["hrtc_origin"])
248 , hrtc_timestamp(payload["hrtc_timestamp"])
249 , hrtc_sample_id(payload["hrtc_sample_id"]) {
250 }
251
253 auto payload = ConfigurationEvent::ToJson();
254 payload["type"].push_back(PrettyTypeName<HrtcConfigurationScheduledEvent>());
255 payload["hrtc_origin"] = hrtc_origin;
256 payload["hrtc_timestamp"] = hrtc_timestamp;
257 payload["hrtc_sample_id"] = hrtc_sample_id;
258 return payload;
259 }
260
261 std::string hrtc_origin;
264};
265
272 const std::string& item,
273 const std::string& hrtc_origin,
276 : ConfigurationEvent(origin, item, "applied")
280 }
281
283 : ConfigurationEvent(payload)
284 , hrtc_origin(payload["hrtc_origin"])
285 , hrtc_timestamp(payload["hrtc_timestamp"])
286 , hrtc_sample_id(payload["hrtc_sample_id"]) {
287 }
288
290 auto payload = ConfigurationEvent::ToJson();
291 payload["type"].push_back(PrettyTypeName<HrtcConfigurationAppliedEvent>());
292 payload["hrtc_origin"] = hrtc_origin;
293 payload["hrtc_timestamp"] = hrtc_timestamp;
294 payload["hrtc_sample_id"] = hrtc_sample_id;
295 return payload;
296 }
297
298 std::string hrtc_origin;
301};
302
304
310 inline static const std::string TOPIC_NAME = "coordination_topic";
311
312 explicit CoordinationEvent(const std::string& origin) : AbstractEvent(origin) {
313 }
314
315 explicit CoordinationEvent(const JsonPayload& payload) : AbstractEvent(payload) {
316 }
317
319 auto payload = AbstractEvent::ToJson();
320 payload["type"].push_back(PrettyTypeName<CoordinationEvent>());
321 return payload;
322 }
323};
324
330 StateChangedEvent(const std::string& origin,
331 const std::string& entity,
332 const std::string& state)
334 }
335
336 StateChangedEvent(const std::string& origin, const std::string& state)
338 }
339
340 explicit StateChangedEvent(const JsonPayload& payload)
341 : CoordinationEvent(payload), entity(payload["entity"]), state(payload["state"]) {
342 }
343
345 auto payload = CoordinationEvent::ToJson();
346 payload["type"].push_back(PrettyTypeName<StateChangedEvent>());
347 payload["state"] = state;
348 payload["entity"] = entity;
349 return payload;
350 }
351
352 std::string entity;
353 std::string state;
354};
355
361 HrtcStateChangedEvent(const std::string& origin,
362 const std::string& entity,
363 const std::string& state,
369 }
370
371 explicit HrtcStateChangedEvent(const JsonPayload& payload)
372 : StateChangedEvent(payload)
373 , hrtc_timestamp(payload["hrtc_timestamp"])
374 , hrtc_sample_id(payload["hrtc_sample_id"]) {
375 }
376
378 auto payload = StateChangedEvent::ToJson();
379 payload["type"].push_back(PrettyTypeName<HrtcStateChangedEvent>());
380 payload["hrtc_timestamp"] = hrtc_timestamp;
381 payload["hrtc_sample_id"] = hrtc_sample_id;
382 return payload;
383 }
384
387};
388
398 // cppcheck-suppress unusedStructMember
399 inline static const std::string TOPIC_NAME = "alert_status_topic";
400
407 struct Alert {
411 std::string origin;
412
416 std::string id;
417
421 std::string description;
422
426 std::uint64_t since;
427 };
428
432 AlertStatusEvent(bool st, std::vector<Alert> ac, const std::string& origin)
434 }
435
440 json["status"].get_to(status);
441 for (auto&& active : json["active_alerts"]) {
442 Alert alert;
443 active["id"].get_to(alert.id);
444 active["description"].get_to(alert.description);
445 active["origin"].get_to(alert.origin);
446 active["since"].get_to(alert.since);
447 active_alerts.push_back(alert);
448 }
449 }
450
455 auto payload = AbstractEvent::ToJson();
456 payload["type"].push_back(PrettyTypeName<AlertStatusEvent>());
457 payload["status"] = status;
459 for (auto&& alert : active_alerts) {
460 // cppcheck-suppress useStlAlgorithm
461 json_active.push_back(JsonPayload{{"origin", alert.origin},
462 {"id", alert.id},
463 {"description", alert.description},
464 {"since", alert.since}});
465 }
466 payload["active_alerts"] = std::move(json_active);
467 return payload;
468 }
469
473 bool status;
474 std::vector<Alert> active_alerts;
475};
476
477// cppcheck-suppress-end duplInheritedMember
478} // namespace rtctk::componentFramework
479
480#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:30
elt::mal::future< std::string > InjectReqRepEvent(StateMachineEngine &engine)
Definition malEventInjector.hpp:23
std::string PrettyTypeName()
Definition eventDefinitions.hpp:26
nlohmann::json json
Definition runtimeRepoAdapter.cpp:46
Abstract Event Type that is used as a base for all events.
Definition eventDefinitions.hpp:44
AbstractEvent(const std::string &origin)
Definition eventDefinitions.hpp:51
std::string origin
Definition eventDefinitions.hpp:62
JsonPayload ToJson() const
Definition eventDefinitions.hpp:54
uint64_t time
Definition eventDefinitions.hpp:63
AbstractEvent(const JsonPayload &payload)
Definition eventDefinitions.hpp:47
Represents an active alert originating from a component instance.
Definition eventDefinitions.hpp:407
std::string origin
Component instance origin.
Definition eventDefinitions.hpp:411
std::uint64_t since
Timestamp when alert was first made active.
Definition eventDefinitions.hpp:426
std::string id
Alert identifier which is unique to the origin.
Definition eventDefinitions.hpp:416
std::string description
Description of alert.
Definition eventDefinitions.hpp:421
Event published when alert status is changed.
Definition eventDefinitions.hpp:397
static const std::string TOPIC_NAME
Definition eventDefinitions.hpp:399
JsonPayload ToJson() const
Serialize to JSON.
Definition eventDefinitions.hpp:454
bool status
Reduced alert status.
Definition eventDefinitions.hpp:473
AlertStatusEvent(bool st, std::vector< Alert > ac, const std::string &origin)
Construct by providing members.
Definition eventDefinitions.hpp:432
AlertStatusEvent(const JsonPayload &json)
Construct by deserializing from JSON.
Definition eventDefinitions.hpp:439
std::vector< Alert > active_alerts
Definition eventDefinitions.hpp:474
Abstract Event Type that is used as a base for computation events.
Definition eventDefinitions.hpp:72
ComputationEvent(const JsonPayload &payload)
Definition eventDefinitions.hpp:83
JsonPayload ToJson() const
Definition eventDefinitions.hpp:87
ComputationEvent(const std::string &origin, const std::string &item)
Definition eventDefinitions.hpp:79
std::string item
Definition eventDefinitions.hpp:95
ComputationEvent(const std::string &origin, const std::string &item, const std::string &state)
Definition eventDefinitions.hpp:75
std::string state
Definition eventDefinitions.hpp:96
static const std::string TOPIC_NAME
Definition eventDefinitions.hpp:73
Event Type used to signal that a computation has finished.
Definition eventDefinitions.hpp:122
ComputationFinishedEvent(const std::string &origin, const std::string &item, const JsonPayload &result)
Definition eventDefinitions.hpp:127
JsonPayload ToJson() const
Definition eventDefinitions.hpp:137
JsonPayload result
Definition eventDefinitions.hpp:144
ComputationFinishedEvent(const std::string &origin, const std::string &item)
Definition eventDefinitions.hpp:123
ComputationFinishedEvent(const JsonPayload &payload)
Definition eventDefinitions.hpp:133
Event Type used to signal that a computation has started.
Definition eventDefinitions.hpp:103
JsonPayload ToJson() const
Definition eventDefinitions.hpp:111
ComputationStartedEvent(const JsonPayload &payload)
Definition eventDefinitions.hpp:108
ComputationStartedEvent(const std::string &origin, const std::string &item)
Definition eventDefinitions.hpp:104
Abstract Event Type that is used as a base for configuration events.
Definition eventDefinitions.hpp:153
ConfigurationEvent(const std::string &origin, const std::string &item, const std::string &state)
Definition eventDefinitions.hpp:156
ConfigurationEvent(const JsonPayload &payload)
Definition eventDefinitions.hpp:166
static const std::string TOPIC_NAME
Definition eventDefinitions.hpp:154
ConfigurationEvent(const std::string &origin, const std::vector< std::string > &items, const std::string &state)
Definition eventDefinitions.hpp:160
std::string state
Definition eventDefinitions.hpp:179
std::vector< std::string > items
Definition eventDefinitions.hpp:178
JsonPayload ToJson() const
Definition eventDefinitions.hpp:170
Event Type used to signal that a configuration data item was retrieved from RTR.
Definition eventDefinitions.hpp:209
ConfigurationRetrievedEvent(const JsonPayload &payload)
Definition eventDefinitions.hpp:218
ConfigurationRetrievedEvent(const std::string &origin, const std::string &item)
Definition eventDefinitions.hpp:210
ConfigurationRetrievedEvent(const std::string &origin, const std::vector< std::string > &items)
Definition eventDefinitions.hpp:214
JsonPayload ToJson() const
Definition eventDefinitions.hpp:221
Event Type used to signal that a configuration data item was updated in RTR.
Definition eventDefinitions.hpp:186
ConfigurationUpdatedEvent(const JsonPayload &payload)
Definition eventDefinitions.hpp:195
JsonPayload ToJson() const
Definition eventDefinitions.hpp:198
ConfigurationUpdatedEvent(const std::string &origin, const std::string &item)
Definition eventDefinitions.hpp:187
ConfigurationUpdatedEvent(const std::string &origin, const std::vector< std::string > &items)
Definition eventDefinitions.hpp:191
Abstract Event Type that is used as a base for coordination events.
Definition eventDefinitions.hpp:309
JsonPayload ToJson() const
Definition eventDefinitions.hpp:318
static const std::string TOPIC_NAME
Definition eventDefinitions.hpp:310
CoordinationEvent(const JsonPayload &payload)
Definition eventDefinitions.hpp:315
CoordinationEvent(const std::string &origin)
Definition eventDefinitions.hpp:312
Event Type used to signal that a configuration data item was applied in HRTC.
Definition eventDefinitions.hpp:270
HrtcConfigurationAppliedEvent(const std::string &origin, const std::string &item, const std::string &hrtc_origin, uint64_t hrtc_timestamp, uint64_t hrtc_sample_id)
Definition eventDefinitions.hpp:271
uint64_t hrtc_sample_id
Definition eventDefinitions.hpp:300
HrtcConfigurationAppliedEvent(const JsonPayload &payload)
Definition eventDefinitions.hpp:282
std::string hrtc_origin
Definition eventDefinitions.hpp:298
uint64_t hrtc_timestamp
Definition eventDefinitions.hpp:299
JsonPayload ToJson() const
Definition eventDefinitions.hpp:289
Event Type used to signal that a configuration data item was scheduled to be applied in HRTC.
Definition eventDefinitions.hpp:233
uint64_t hrtc_timestamp
Definition eventDefinitions.hpp:262
HrtcConfigurationScheduledEvent(const JsonPayload &payload)
Definition eventDefinitions.hpp:245
uint64_t hrtc_sample_id
Definition eventDefinitions.hpp:263
JsonPayload ToJson() const
Definition eventDefinitions.hpp:252
HrtcConfigurationScheduledEvent(const std::string &origin, const std::string &item, const std::string &hrtc_origin, uint64_t hrtc_timestamp, uint64_t hrtc_sample_id)
Definition eventDefinitions.hpp:234
std::string hrtc_origin
Definition eventDefinitions.hpp:261
Event Type used to signal that some entity in HRTC changed its state.
Definition eventDefinitions.hpp:360
HrtcStateChangedEvent(const JsonPayload &payload)
Definition eventDefinitions.hpp:371
uint64_t hrtc_timestamp
Definition eventDefinitions.hpp:385
HrtcStateChangedEvent(const std::string &origin, const std::string &entity, const std::string &state, uint64_t hrtc_timestamp, uint64_t hrtc_sample_id)
Definition eventDefinitions.hpp:361
JsonPayload ToJson() const
Definition eventDefinitions.hpp:377
uint64_t hrtc_sample_id
Definition eventDefinitions.hpp:386
Event Type used to signal that some entity changed its state.
Definition eventDefinitions.hpp:329
StateChangedEvent(const std::string &origin, const std::string &entity, const std::string &state)
Definition eventDefinitions.hpp:330
StateChangedEvent(const std::string &origin, const std::string &state)
Definition eventDefinitions.hpp:336
JsonPayload ToJson() const
Definition eventDefinitions.hpp:344
std::string entity
Definition eventDefinitions.hpp:352
StateChangedEvent(const JsonPayload &payload)
Definition eventDefinitions.hpp:340
std::string state
Definition eventDefinitions.hpp:353