1 #include "reportqueue.h"
5 ReportQueue::ReportQueue(
const Config& config_in, std::shared_ptr<HttpInterface> http_client)
6 : config(config_in), http(std::move(http_client)) {
7 thread_ = std::thread(std::bind(&ReportQueue::run,
this));
10 ReportQueue::~ReportQueue() {
12 std::lock_guard<std::mutex> lock(m_);
18 LOG_TRACE <<
"Flushing report queue";
22 void ReportQueue::run() {
26 std::unique_lock<std::mutex> lock(m_);
29 cv_.wait_for(lock, std::chrono::seconds(10));
33 void ReportQueue::enqueue(std::unique_ptr<ReportEvent>
event) {
35 std::lock_guard<std::mutex> lock(m_);
36 report_queue_.push(std::move(
event));
41 void ReportQueue::flushQueue() {
42 while (!report_queue_.empty()) {
43 report_array.append(report_queue_.front()->toJson());
47 if (config.tls.server.empty()) {
49 LOG_TRACE <<
"No server specified. Clearing report queue.";
53 if (!report_array.empty()) {
54 HttpResponse response = http->post(config.tls.server +
"/events", report_array);
58 if (response.http_status_code == 404) {
59 LOG_TRACE <<
"Server does not support event reports. Clearing report queue.";
62 if (response.isOk() || response.http_status_code == 404) {
68 void ReportEvent::setEcu(
const Uptane::EcuSerial& ecu) { custom[
"ecu"] = ecu.ToString(); }
69 void ReportEvent::setCorrelationId(
const std::string& correlation_id) {
70 if (correlation_id !=
"") {
71 custom[
"correlationId"] = correlation_id;
75 Json::Value ReportEvent::toJson() {
79 out[
"deviceTime"] = timestamp.ToString();
80 out[
"eventType"][
"id"] = type;
81 out[
"eventType"][
"version"] = version;
82 out[
"event"] = custom;
87 CampaignAcceptedReport::CampaignAcceptedReport(
const std::string& campaign_id) :
ReportEvent(
"campaign_accepted", 0) {
88 custom[
"campaignId"] = campaign_id;
91 CampaignDeclinedReport::CampaignDeclinedReport(
const std::string& campaign_id) :
ReportEvent(
"campaign_declined", 0) {
92 custom[
"campaignId"] = campaign_id;
95 CampaignPostponedReport::CampaignPostponedReport(
const std::string& campaign_id)
97 custom[
"campaignId"] = campaign_id;
100 DevicePausedReport::DevicePausedReport(
const std::string& correlation_id) :
ReportEvent(
"DevicePaused", 0) {
101 setCorrelationId(correlation_id);
104 DeviceResumedReport::DeviceResumedReport(
const std::string& correlation_id) :
ReportEvent(
"DeviceResumed", 0) {
105 setCorrelationId(correlation_id);
108 EcuDownloadStartedReport::EcuDownloadStartedReport(
const Uptane::EcuSerial& ecu,
const std::string& correlation_id)
111 setCorrelationId(correlation_id);
114 EcuDownloadCompletedReport::EcuDownloadCompletedReport(
const Uptane::EcuSerial& ecu,
const std::string& correlation_id,
118 setCorrelationId(correlation_id);
119 custom[
"success"] = success;
122 EcuInstallationStartedReport::EcuInstallationStartedReport(
const Uptane::EcuSerial& ecu,
123 const std::string& correlation_id)
126 setCorrelationId(correlation_id);
129 EcuInstallationAppliedReport::EcuInstallationAppliedReport(
const Uptane::EcuSerial& ecu,
130 const std::string& correlation_id)
133 setCorrelationId(correlation_id);
136 EcuInstallationCompletedReport::EcuInstallationCompletedReport(
const Uptane::EcuSerial& ecu,
137 const std::string& correlation_id,
bool success)
140 setCorrelationId(correlation_id);
141 custom[
"success"] = success;