RTC Toolkit 5.1.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
18
19#include <boost/core/demangle.hpp>
20
21#include <chrono>
22#include <set>
23
25// Suppressing warnings about duplicate ToJson methods. We are not using polymorphism on purpose.
26// cppcheck-suppress-begin duplInheritedMember
27
28template <typename T>
29std::string PrettyTypeName() {
30 return boost::core::demangle((typeid(T).name()));
31}
32
41template <typename EventType>
43 if (j.contains("type")) {
44 if (j.at("type").get<std::set<std::string>>().contains(PrettyTypeName<EventType>())) {
45 return true;
46 }
47 }
48 return false;
49}
50
59template <typename EventType>
60std::optional<EventType> ConvertTo(const JsonPayload& j) {
63 from_json(j, e);
64 return e;
65 }
66 return {};
67}
68
70
79 AbstractEvent() = default;
80
81 virtual ~AbstractEvent() = default;
82
83 explicit AbstractEvent(const std::string& origin);
84
85 AbstractEvent(const std::string& origin, const TimeString& time);
86
87 [[deprecated("Use from_json instead.")]]
88 explicit AbstractEvent(const JsonPayload& j);
89
90 [[deprecated("Use to_json instead.")]]
91 JsonPayload ToJson() const;
92
93 std::string origin; // from which srtc-component does the event come from
94 TimeString time; // when was event created
95};
96
97// The function names below do not follow our conventions. However, these names are required by the
98// nlohmann/json.hpp API. Therefore the linter warnings are being suppressed. This is applicable to
99// all subsequent to_json/from_json functions in this file.
100// NOLINTBEGIN(readability-identifier-naming)
101void to_json(JsonPayload& j, const AbstractEvent& e);
102void from_json(const JsonPayload& j, AbstractEvent& e);
103// NOLINTEND(readability-identifier-naming)
104
106
112 inline static const std::string TOPIC_NAME = "computation_topic";
113
114 ComputationEvent() = default;
115
116 ComputationEvent(const std::string& origin, const std::string& item, const std::string& state);
117
118 ComputationEvent(const std::string& origin, const std::string& item);
119
120 [[deprecated("Use from_json instead.")]]
121 explicit ComputationEvent(const JsonPayload& j);
122
123 [[deprecated("Use to_json instead.")]]
124 JsonPayload ToJson() const;
125
126 std::string item; // what was computed
127 std::string state; // was computaton started, finished, failed
128};
129
130// NOLINTBEGIN(readability-identifier-naming)
131void to_json(JsonPayload& j, const ComputationEvent& e);
133// NOLINTEND(readability-identifier-naming)
134
136
143
144 ComputationStartedEvent(const std::string& origin, const std::string& item);
145
146 [[deprecated("Use from_json instead.")]]
147 explicit ComputationStartedEvent(const JsonPayload& j);
148
149 [[deprecated("Use to_json instead.")]]
150 JsonPayload ToJson() const;
151};
152
153// NOLINTBEGIN(readability-identifier-naming)
156// NOLINTEND(readability-identifier-naming)
157
159
166
167 ComputationFinishedEvent(const std::string& origin,
168 const std::string& item,
169 const JsonPayload& result = nullptr);
170
171 [[deprecated("Use from_json instead.")]]
172 explicit ComputationFinishedEvent(const JsonPayload& j);
173
174 [[deprecated("Use to_json instead.")]]
175 JsonPayload ToJson() const;
176
177 JsonPayload result; // result of the computation
178};
179
180// NOLINTBEGIN(readability-identifier-naming)
183// NOLINTEND(readability-identifier-naming)
184
186
192 inline static const std::string TOPIC_NAME = "configuration_topic";
193
201 struct Item {
205 std::string name;
206
210 std::optional<TimeString> timestamp;
211
215 std::optional<uint64_t> sequence_id;
216
217 bool operator==(const Item&) const = default;
218 };
219
220 using ItemList = std::vector<Item>;
221
223
227 ConfigurationEvent(const std::string& origin, const Item& item, const std::string& state);
228
232 ConfigurationEvent(const std::string& origin,
233 const ItemList& item,
234 const std::string& state);
235
239 ConfigurationEvent(const std::string& origin,
240 const std::string& item,
241 const std::string& state);
242
246 ConfigurationEvent(const std::string& origin,
247 const std::vector<std::string>& items,
248 const std::string& state);
249
250 [[deprecated("Use from_json instead.")]]
251 explicit ConfigurationEvent(const JsonPayload& j);
252
253 [[deprecated("Use to_json instead.")]]
254 JsonPayload ToJson() const;
255
256 ItemList items; // what was configured
257 std::string state; // was configuration scheduled, started, finished, failed
258};
259
260// NOLINTBEGIN(readability-identifier-naming)
263// NOLINTEND(readability-identifier-naming)
264
266
273
277 ConfigurationUpdatedEvent(const std::string& origin, const Item& item);
278
282 ConfigurationUpdatedEvent(const std::string& origin, const ItemList& items);
283
287 ConfigurationUpdatedEvent(const std::string& origin, const std::string& item);
288
292 ConfigurationUpdatedEvent(const std::string& origin, const std::vector<std::string>& items);
293
294 [[deprecated("Use from_json instead.")]]
295 explicit ConfigurationUpdatedEvent(const JsonPayload& j);
296
297 [[deprecated("Use to_json instead.")]]
298 JsonPayload ToJson() const;
299};
300
301// NOLINTBEGIN(readability-identifier-naming)
304// NOLINTEND(readability-identifier-naming)
305
307
314
318 ConfigurationRetrievedEvent(const std::string& origin, const Item& item);
319
323 ConfigurationRetrievedEvent(const std::string& origin, const ItemList& items);
324
328 ConfigurationRetrievedEvent(const std::string& origin, const std::string& item);
329
333 ConfigurationRetrievedEvent(const std::string& origin, const std::vector<std::string>& items);
334
335 [[deprecated("Use from_json instead.")]]
337
338 [[deprecated("Use to_json instead.")]]
339 JsonPayload ToJson() const;
340};
341
342// NOLINTBEGIN(readability-identifier-naming)
345// NOLINTEND(readability-identifier-naming)
346
348
356
360 HrtcConfigurationScheduledEvent(const std::string& origin,
361 const Item& item,
362 const std::string& hrtc_origin,
365
369 HrtcConfigurationScheduledEvent(const std::string& origin,
370 const ItemList& items,
371 const std::string& hrtc_origin,
374
380 [[deprecated("Use ctor with Item and TimeString instead.")]]
381 HrtcConfigurationScheduledEvent(const std::string& origin,
382 const std::string& item,
383 const std::string& hrtc_origin,
386
387 [[deprecated("Use from_json instead.")]]
389
390 [[deprecated("Use to_json instead.")]]
391 JsonPayload ToJson() const;
392
393 std::string hrtc_origin; // from which hrtc instance, or functional unit within instance
394 TimeString hrtc_timestamp; // scheduled to be applied at which timestamp
395 uint64_t hrtc_sample_id; // scheduled to be applied at which sample_id
396};
397
398// NOLINTBEGIN(readability-identifier-naming)
401// NOLINTEND(readability-identifier-naming)
402
404
411
415 HrtcConfigurationAppliedEvent(const std::string& origin,
416 const Item& item,
417 const std::string& hrtc_origin,
420
424 HrtcConfigurationAppliedEvent(const std::string& origin,
425 const ItemList& items,
426 const std::string& hrtc_origin,
429
435 [[deprecated("Use ctor with Item and TimeString instead.")]]
436 HrtcConfigurationAppliedEvent(const std::string& origin,
437 const std::string& item,
438 const std::string& hrtc_origin,
441
442 [[deprecated("Use from_json instead.")]]
444
445 [[deprecated("Use to_json instead.")]]
446 JsonPayload ToJson() const;
447
448 std::string hrtc_origin; // from which hrtc instance, or functional unit within instance
449 TimeString hrtc_timestamp; // applied at which timestamp
450 uint64_t hrtc_sample_id; // applied at which sample_id
451};
452
453// NOLINTBEGIN(readability-identifier-naming)
456// NOLINTEND(readability-identifier-naming)
457
459
465 inline static const std::string TOPIC_NAME = "coordination_topic";
466
467 CoordinationEvent() = default;
468
469 explicit CoordinationEvent(const std::string& origin);
470
471 [[deprecated("Use from_json instead.")]]
472 explicit CoordinationEvent(const JsonPayload& j);
473
474 [[deprecated("Use to_json instead.")]]
475 JsonPayload ToJson() const;
476};
477
478// NOLINTBEGIN(readability-identifier-naming)
481// NOLINTEND(readability-identifier-naming)
482
484
490 StateChangedEvent() = default;
491
492 StateChangedEvent(const std::string& origin,
493 const std::string& entity,
494 const std::string& state);
495
496 StateChangedEvent(const std::string& origin, const std::string& state);
497
498 [[deprecated("Use from_json instead.")]]
499 explicit StateChangedEvent(const JsonPayload& j);
500
501 [[deprecated("Use to_json instead.")]]
502 JsonPayload ToJson() const;
503
504 std::string entity; // name of the functional entity that changed its state
505 std::string state; // the actual state
506};
507
508// NOLINTBEGIN(readability-identifier-naming)
511// NOLINTEND(readability-identifier-naming)
512
514
521
522 HrtcStateChangedEvent(const std::string& origin,
523 const std::string& hrtc_entity,
524 const std::string& hrtc_state,
527
528 [[deprecated("Use from_json instead.")]]
529 explicit HrtcStateChangedEvent(const JsonPayload& j);
530
531 [[deprecated("Use to_json instead.")]]
532 JsonPayload ToJson() const;
533
534 TimeString hrtc_timestamp; // when did the state change
535 uint64_t hrtc_sample_id; // at which sample_id did the state change
536};
537
538// NOLINTBEGIN(readability-identifier-naming)
541// NOLINTEND(readability-identifier-naming)
542
544
554 AlertStatusEvent() = default;
555
556 // cppcheck-suppress unusedStructMember
557 inline static const std::string TOPIC_NAME = "alert_status_topic";
558
565 struct Alert {
569 std::string origin;
570
574 std::string id;
575
579 std::string description;
580
585 };
586
590 AlertStatusEvent(bool st, std::vector<Alert> ac, const std::string& origin);
591
595 bool status;
596
600 std::vector<Alert> active_alerts;
601};
602
603// NOLINTBEGIN(readability-identifier-naming)
604void to_json(JsonPayload& j, const AlertStatusEvent& e);
606// NOLINTEND(readability-identifier-naming)
607
608// cppcheck-suppress-end duplInheritedMember
609} // namespace rtctk::componentFramework
610
611#endif // RTCTK_COMPONENTFRAMEWORK_EVENTDEFINITIONS_HPP
Defines the JSON payload type JsonPayload.
Definition commandReplier.cpp:22
void to_json(JsonPayload &j, const std::vector< DataPointPath > &v)
Definition dataPointPath.cpp:207
std::optional< EventType > ConvertTo(const JsonPayload &j)
Helper to convert to certain EventType if possible.
Definition eventDefinitions.hpp:60
bool ConvertibleTo(const JsonPayload &j)
Helper to check if JsonPayload is convertible to a certain EventType.
Definition eventDefinitions.hpp:42
nlohmann::json JsonPayload
Type requirements:
Definition jsonPayload.hpp:25
void from_json(const JsonPayload &j, std::vector< DataPointPath > &v)
Definition dataPointPath.cpp:217
elt::mal::future< std::string > InjectReqRepEvent(StateMachineEngine &engine)
Definition malEventInjector.hpp:23
std::string PrettyTypeName()
Definition eventDefinitions.hpp:29
Abstract Event Type that is used as a base for all events.
Definition eventDefinitions.hpp:78
TimeString time
Definition eventDefinitions.hpp:94
std::string origin
Definition eventDefinitions.hpp:93
JsonPayload ToJson() const
Definition eventDefinitions.cpp:35
Represents an active alert originating from a component instance.
Definition eventDefinitions.hpp:565
std::string origin
Component instance origin.
Definition eventDefinitions.hpp:569
TimeString since
Timestamp when alert was first made active.
Definition eventDefinitions.hpp:584
std::string id
Alert identifier which is unique to the origin.
Definition eventDefinitions.hpp:574
std::string description
Description of alert.
Definition eventDefinitions.hpp:579
Event published when alert status is changed.
Definition eventDefinitions.hpp:553
static const std::string TOPIC_NAME
Definition eventDefinitions.hpp:557
bool status
Reduced alert status.
Definition eventDefinitions.hpp:595
std::vector< Alert > active_alerts
List of active alerts.
Definition eventDefinitions.hpp:600
Abstract Event Type that is used as a base for computation events.
Definition eventDefinitions.hpp:111
JsonPayload ToJson() const
Definition eventDefinitions.cpp:70
std::string item
Definition eventDefinitions.hpp:126
std::string state
Definition eventDefinitions.hpp:127
static const std::string TOPIC_NAME
Definition eventDefinitions.hpp:112
Event Type used to signal that a computation has finished.
Definition eventDefinitions.hpp:164
JsonPayload ToJson() const
Definition eventDefinitions.cpp:126
JsonPayload result
Definition eventDefinitions.hpp:177
Event Type used to signal that a computation has started.
Definition eventDefinitions.hpp:141
JsonPayload ToJson() const
Definition eventDefinitions.cpp:99
Represents a single configuration item.
Definition eventDefinitions.hpp:201
bool operator==(const Item &) const =default
std::string name
PathName of the configuration item.
Definition eventDefinitions.hpp:205
std::optional< TimeString > timestamp
(Optional) Timestamp of the configuration item.
Definition eventDefinitions.hpp:210
std::optional< uint64_t > sequence_id
(Optional) SequenceId of the configuration item.
Definition eventDefinitions.hpp:215
Abstract Event Type that is used as a base for configuration events.
Definition eventDefinitions.hpp:191
static const std::string TOPIC_NAME
Definition eventDefinitions.hpp:192
std::vector< Item > ItemList
Definition eventDefinitions.hpp:220
std::string state
Definition eventDefinitions.hpp:257
ItemList items
Definition eventDefinitions.hpp:256
JsonPayload ToJson() const
Definition eventDefinitions.cpp:176
Event Type used to signal that configuration data items were retrieved from RTR.
Definition eventDefinitions.hpp:312
JsonPayload ToJson() const
Definition eventDefinitions.cpp:294
Event Type used to signal that configuration data items were updated in RTR.
Definition eventDefinitions.hpp:271
JsonPayload ToJson() const
Definition eventDefinitions.cpp:253
Abstract Event Type that is used as a base for coordination events.
Definition eventDefinitions.hpp:464
JsonPayload ToJson() const
Definition eventDefinitions.cpp:438
static const std::string TOPIC_NAME
Definition eventDefinitions.hpp:465
Event Type used to signal that configuration data items were applied in HRTC.
Definition eventDefinitions.hpp:409
uint64_t hrtc_sample_id
Definition eventDefinitions.hpp:450
TimeString hrtc_timestamp
Definition eventDefinitions.hpp:449
std::string hrtc_origin
Definition eventDefinitions.hpp:448
JsonPayload ToJson() const
Definition eventDefinitions.cpp:408
Event Type used to signal that configuration data items were scheduled to be applied in HRTC.
Definition eventDefinitions.hpp:354
uint64_t hrtc_sample_id
Definition eventDefinitions.hpp:395
JsonPayload ToJson() const
Definition eventDefinitions.cpp:348
TimeString hrtc_timestamp
Definition eventDefinitions.hpp:394
std::string hrtc_origin
Definition eventDefinitions.hpp:393
Event Type used to signal that some entity in HRTC changed its state.
Definition eventDefinitions.hpp:519
TimeString hrtc_timestamp
Definition eventDefinitions.hpp:534
JsonPayload ToJson() const
Definition eventDefinitions.cpp:504
uint64_t hrtc_sample_id
Definition eventDefinitions.hpp:535
Event Type used to signal that some entity changed its state.
Definition eventDefinitions.hpp:489
JsonPayload ToJson() const
Definition eventDefinitions.cpp:469
std::string entity
Definition eventDefinitions.hpp:504
std::string state
Definition eventDefinitions.hpp:505
Represents an ISO 8601 time string in format: YYYY-MM-DDThh:mm:ss.sssZ.
Definition timeString.hpp:28
A timestring in ISO-8601 format.