Aktualizr
C++ SOTA Client
All Classes Namespaces Files Functions Variables Enumerations Enumerator Pages
reportqueue.h
1 #ifndef REPORTQUEUE_H_
2 #define REPORTQUEUE_H_
3 
4 #include <condition_variable>
5 #include <memory>
6 #include <mutex>
7 #include <queue>
8 #include <thread>
9 
10 #include <json/json.h>
11 
12 #include "config/config.h"
13 #include "http/httpclient.h"
14 #include "logging/logging.h"
15 #include "uptane/tuf.h"
16 
17 class ReportEvent {
18  public:
19  std::string id;
20  std::string type;
21  int version;
22  Json::Value custom;
23  TimeStamp timestamp;
24 
25  Json::Value toJson();
26 
27  protected:
28  ReportEvent(std::string event_type, int event_version)
29  : id(Utils::randomUuid()), type(std::move(event_type)), version(event_version), timestamp(TimeStamp::Now()) {}
30 
31  void setEcu(const Uptane::EcuSerial& ecu);
32  void setCorrelationId(const std::string& correlation_id);
33 };
34 
36  public:
37  CampaignAcceptedReport(const std::string& campaign_id);
38 };
39 
41  public:
42  CampaignDeclinedReport(const std::string& campaign_id);
43 };
44 
46  public:
47  CampaignPostponedReport(const std::string& campaign_id);
48 };
49 
51  public:
52  DevicePausedReport(const std::string& correlation_id);
53 };
54 
56  public:
57  DeviceResumedReport(const std::string& correlation_id);
58 };
59 
61  public:
62  EcuDownloadStartedReport(const Uptane::EcuSerial& ecu, const std::string& correlation_id);
63 };
64 
66  public:
67  EcuDownloadCompletedReport(const Uptane::EcuSerial& ecu, const std::string& correlation_id, bool success);
68 };
69 
71  public:
72  EcuInstallationStartedReport(const Uptane::EcuSerial& ecu, const std::string& correlation_id);
73 };
74 
76  public:
77  EcuInstallationAppliedReport(const Uptane::EcuSerial& ecu, const std::string& correlation_id);
78 };
79 
81  public:
82  EcuInstallationCompletedReport(const Uptane::EcuSerial& ecu, const std::string& correlation_id, bool success);
83 };
84 
85 class ReportQueue {
86  public:
87  ReportQueue(const Config& config_in, std::shared_ptr<HttpInterface> http_client);
88  ~ReportQueue();
89  void run();
90  void enqueue(std::unique_ptr<ReportEvent> event);
91 
92  private:
93  void flushQueue();
94 
95  const Config& config;
96  std::shared_ptr<HttpInterface> http;
97  std::thread thread_;
98  std::condition_variable cv_;
99  std::mutex m_;
100  std::queue<std::unique_ptr<ReportEvent>> report_queue_;
101  Json::Value report_array{Json::arrayValue};
102  bool shutdown_{false};
103 };
104 
105 #endif // REPORTQUEUE_H_
ReportEvent
Definition: reportqueue.h:17
CampaignPostponedReport
Definition: reportqueue.h:45
CampaignAcceptedReport
Definition: reportqueue.h:35
EcuDownloadCompletedReport
Definition: reportqueue.h:65
Config
Configuration object for an aktualizr instance running on a primary ECU.
Definition: config.h:73
TimeStamp
Definition: types.h:85
EcuInstallationAppliedReport
Definition: reportqueue.h:75
Uptane::EcuSerial
Definition: tuf.h:174
EcuDownloadStartedReport
Definition: reportqueue.h:60
CampaignDeclinedReport
Definition: reportqueue.h:40
EcuInstallationCompletedReport
Definition: reportqueue.h:80
DeviceResumedReport
Definition: reportqueue.h:55
ReportQueue
Definition: reportqueue.h:85
DevicePausedReport
Definition: reportqueue.h:50
event
Aktualizr status events.
Definition: events.h:18
EcuInstallationStartedReport
Definition: reportqueue.h:70