1 #include "campaign/campaign.h"
5 Campaign::Campaign(
const Json::Value &json) {
7 if (!json.isObject()) {
8 throw CampaignParseError();
11 id = json[
"id"].asString();
13 throw CampaignParseError();
16 name = json[
"name"].asString();
18 throw CampaignParseError();
21 size = json.get(
"size", 0).asInt64();
22 autoAccept = json.get(
"autoAccept",
false).asBool();
24 for (
const auto &o : json[
"metadata"]) {
29 if (o[
"type"] ==
"DESCRIPTION") {
30 if (!description.empty()) {
31 throw CampaignParseError();
33 description = o[
"value"].asString();
34 }
else if (o[
"type"] ==
"ESTIMATED_INSTALLATION_DURATION") {
35 if (estInstallationDuration != 0) {
36 throw CampaignParseError();
38 estInstallationDuration = std::stoi(o[
"value"].asString());
39 }
else if (o[
"type"] ==
"ESTIMATED_PREPARATION_DURATION") {
40 if (estPreparationDuration != 0) {
41 throw CampaignParseError();
43 estPreparationDuration = std::stoi(o[
"value"].asString());
47 }
catch (
const std::runtime_error &exc) {
48 LOG_ERROR << exc.what();
49 throw CampaignParseError();
51 throw CampaignParseError();
55 void Campaign::getJson(Json::Value &out)
const {
60 out[
"size"] = Json::UInt(size);
61 out[
"autoAccept"] = autoAccept;
63 out[
"metadata"][0][
"type"] =
"DESCRIPTION";
64 out[
"metadata"][0][
"value"] = description;
65 out[
"metadata"][1][
"type"] =
"ESTIMATED_INSTALLATION_DURATION";
66 out[
"metadata"][1][
"value"] = std::to_string(estInstallationDuration);
67 out[
"metadata"][2][
"type"] =
"ESTIMATED_PREPARATION_DURATION";
68 out[
"metadata"][2][
"value"] = std::to_string(estPreparationDuration);
71 std::vector<Campaign> Campaign::campaignsFromJson(
const Json::Value &json) {
72 std::vector<Campaign> campaigns;
74 Json::Value campaigns_array;
76 if (!json.isObject()) {
77 throw CampaignParseError();
79 campaigns_array = json[
"campaigns"];
80 if (!campaigns_array.isArray()) {
81 throw CampaignParseError();
84 LOG_ERROR <<
"Invalid campaigns object: " << json;
88 for (
const auto &c : campaigns_array) {
90 campaigns.emplace_back(Campaign(c));
91 }
catch (
const CampaignParseError &exc) {
92 LOG_ERROR <<
"Error parsing " << c <<
": " << exc.what();
98 void Campaign::JsonFromCampaigns(
const std::vector<Campaign> &in, Json::Value &out) {
102 for (
const auto &c : in) {
104 out[
"campaigns"][i] = json;
109 std::vector<Campaign> Campaign::fetchAvailableCampaigns(
HttpInterface &http_client,
const std::string &tls_server) {
110 HttpResponse response = http_client.get(tls_server +
"/campaigner/campaigns", kMaxCampaignsMetaSize);
111 if (!response.isOk()) {
112 LOG_ERROR <<
"Failed to fetch list of available campaigns";
116 auto json = response.getJson();
118 LOG_TRACE <<
"Campaign: " << json;
120 return campaignsFromJson(json);