Ed Tanous | 40e9b92 | 2024-09-10 13:50:16 -0700 | [diff] [blame] | 1 | // SPDX-License-Identifier: Apache-2.0 |
2 | // SPDX-FileCopyrightText: Copyright OpenBMC Authors | ||||
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 3 | #pragma once |
4 | #include "logging.hpp" | ||||
5 | |||||
Ed Tanous | 601c71a | 2021-09-08 16:40:12 -0700 | [diff] [blame] | 6 | #include <boost/beast/http/fields.hpp> |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 7 | #include <boost/container/flat_map.hpp> |
Ed Tanous | a716aa7 | 2023-08-01 11:35:53 -0700 | [diff] [blame] | 8 | #include <boost/url/parse.hpp> |
Ed Tanous | 4a7fbef | 2024-04-06 16:03:49 -0700 | [diff] [blame] | 9 | #include <boost/url/url.hpp> |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 10 | #include <nlohmann/json.hpp> |
11 | |||||
Myung Bae | 5064a25 | 2024-10-04 09:34:25 -0700 | [diff] [blame] | 12 | #include <limits> |
Myung Bae | 56ba386 | 2024-10-10 17:09:37 -0700 | [diff] [blame] | 13 | #include <memory> |
14 | #include <string> | ||||
15 | #include <vector> | ||||
16 | |||||
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 17 | namespace persistent_data |
18 | { | ||||
19 | |||||
20 | struct UserSubscription | ||||
21 | { | ||||
Ed Tanous | 4b712a2 | 2023-08-02 12:56:52 -0700 | [diff] [blame] | 22 | // Represents a Redfish EventDestination instance |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 23 | std::string id; |
Ed Tanous | a716aa7 | 2023-08-01 11:35:53 -0700 | [diff] [blame] | 24 | boost::urls::url destinationUrl; |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 25 | std::string protocol; |
Ed Tanous | 19bb362 | 2024-07-05 10:07:40 -0500 | [diff] [blame] | 26 | bool verifyCertificate = true; |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 27 | std::string retryPolicy; |
Myung Bae | 5064a25 | 2024-10-04 09:34:25 -0700 | [diff] [blame] | 28 | bool sendHeartbeat = false; |
29 | // This value of hbIntervalMinutes is just a reasonable default value and | ||||
30 | // most clients will update it if sendHeartbeat is turned on | ||||
31 | uint64_t hbIntervalMinutes = 10; | ||||
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 32 | std::string customText; |
33 | std::string eventFormatType; | ||||
34 | std::string subscriptionType; | ||||
35 | std::vector<std::string> registryMsgIds; | ||||
36 | std::vector<std::string> registryPrefixes; | ||||
37 | std::vector<std::string> resourceTypes; | ||||
Ed Tanous | 601c71a | 2021-09-08 16:40:12 -0700 | [diff] [blame] | 38 | boost::beast::http::fields httpHeaders; |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 39 | std::vector<std::string> metricReportDefinitions; |
Ed Tanous | a14c911 | 2024-09-04 10:46:47 -0700 | [diff] [blame] | 40 | std::vector<std::string> originResources; |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 41 | |
Ed Tanous | 4b712a2 | 2023-08-02 12:56:52 -0700 | [diff] [blame] | 42 | static std::optional<UserSubscription> fromJson( |
Patrick Williams | bd79bce | 2024-08-16 15:22:20 -0400 | [diff] [blame] | 43 | const nlohmann::json::object_t& j, const bool loadFromOldConfig = false) |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 44 | { |
Ed Tanous | 4b712a2 | 2023-08-02 12:56:52 -0700 | [diff] [blame] | 45 | UserSubscription subvalue; |
Ed Tanous | 0bdda66 | 2023-08-03 17:27:34 -0700 | [diff] [blame] | 46 | for (const auto& element : j) |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 47 | { |
Ed Tanous | 0bdda66 | 2023-08-03 17:27:34 -0700 | [diff] [blame] | 48 | if (element.first == "Id") |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 49 | { |
50 | const std::string* value = | ||||
Ed Tanous | 0bdda66 | 2023-08-03 17:27:34 -0700 | [diff] [blame] | 51 | element.second.get_ptr<const std::string*>(); |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 52 | if (value == nullptr) |
53 | { | ||||
54 | continue; | ||||
55 | } | ||||
Ed Tanous | 4b712a2 | 2023-08-02 12:56:52 -0700 | [diff] [blame] | 56 | subvalue.id = *value; |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 57 | } |
Ed Tanous | 0bdda66 | 2023-08-03 17:27:34 -0700 | [diff] [blame] | 58 | else if (element.first == "Destination") |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 59 | { |
60 | const std::string* value = | ||||
Ed Tanous | 0bdda66 | 2023-08-03 17:27:34 -0700 | [diff] [blame] | 61 | element.second.get_ptr<const std::string*>(); |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 62 | if (value == nullptr) |
63 | { | ||||
64 | continue; | ||||
65 | } | ||||
Ed Tanous | 6fd2955 | 2023-10-04 09:40:14 -0700 | [diff] [blame] | 66 | boost::system::result<boost::urls::url> url = |
Ed Tanous | a716aa7 | 2023-08-01 11:35:53 -0700 | [diff] [blame] | 67 | boost::urls::parse_absolute_uri(*value); |
68 | if (!url) | ||||
69 | { | ||||
70 | continue; | ||||
71 | } | ||||
Ed Tanous | 4b712a2 | 2023-08-02 12:56:52 -0700 | [diff] [blame] | 72 | subvalue.destinationUrl = std::move(*url); |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 73 | } |
Ed Tanous | 0bdda66 | 2023-08-03 17:27:34 -0700 | [diff] [blame] | 74 | else if (element.first == "Protocol") |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 75 | { |
76 | const std::string* value = | ||||
Ed Tanous | 0bdda66 | 2023-08-03 17:27:34 -0700 | [diff] [blame] | 77 | element.second.get_ptr<const std::string*>(); |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 78 | if (value == nullptr) |
79 | { | ||||
80 | continue; | ||||
81 | } | ||||
Ed Tanous | 4b712a2 | 2023-08-02 12:56:52 -0700 | [diff] [blame] | 82 | subvalue.protocol = *value; |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 83 | } |
Ed Tanous | 19bb362 | 2024-07-05 10:07:40 -0500 | [diff] [blame] | 84 | else if (element.first == "VerifyCertificate") |
85 | { | ||||
86 | const bool* value = element.second.get_ptr<const bool*>(); | ||||
87 | if (value == nullptr) | ||||
88 | { | ||||
89 | continue; | ||||
90 | } | ||||
Ed Tanous | 4b712a2 | 2023-08-02 12:56:52 -0700 | [diff] [blame] | 91 | subvalue.verifyCertificate = *value; |
Ed Tanous | 19bb362 | 2024-07-05 10:07:40 -0500 | [diff] [blame] | 92 | } |
Ed Tanous | 0bdda66 | 2023-08-03 17:27:34 -0700 | [diff] [blame] | 93 | else if (element.first == "DeliveryRetryPolicy") |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 94 | { |
95 | const std::string* value = | ||||
Ed Tanous | 0bdda66 | 2023-08-03 17:27:34 -0700 | [diff] [blame] | 96 | element.second.get_ptr<const std::string*>(); |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 97 | if (value == nullptr) |
98 | { | ||||
99 | continue; | ||||
100 | } | ||||
Ed Tanous | 4b712a2 | 2023-08-02 12:56:52 -0700 | [diff] [blame] | 101 | subvalue.retryPolicy = *value; |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 102 | } |
Myung Bae | 5064a25 | 2024-10-04 09:34:25 -0700 | [diff] [blame] | 103 | else if (element.first == "SendHeartbeat") |
104 | { | ||||
105 | const bool* value = element.second.get_ptr<const bool*>(); | ||||
106 | if (value == nullptr) | ||||
107 | { | ||||
108 | continue; | ||||
109 | } | ||||
110 | subvalue.sendHeartbeat = *value; | ||||
111 | } | ||||
112 | else if (element.first == "HeartbeatIntervalMinutes") | ||||
113 | { | ||||
114 | const uint64_t* value = | ||||
115 | element.second.get_ptr<const uint64_t*>(); | ||||
116 | if (value == nullptr || *value < 1 || *value > 65535) | ||||
117 | { | ||||
118 | continue; | ||||
119 | } | ||||
120 | subvalue.hbIntervalMinutes = *value; | ||||
121 | } | ||||
Ed Tanous | 0bdda66 | 2023-08-03 17:27:34 -0700 | [diff] [blame] | 122 | else if (element.first == "Context") |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 123 | { |
124 | const std::string* value = | ||||
Ed Tanous | 0bdda66 | 2023-08-03 17:27:34 -0700 | [diff] [blame] | 125 | element.second.get_ptr<const std::string*>(); |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 126 | if (value == nullptr) |
127 | { | ||||
128 | continue; | ||||
129 | } | ||||
Ed Tanous | 4b712a2 | 2023-08-02 12:56:52 -0700 | [diff] [blame] | 130 | subvalue.customText = *value; |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 131 | } |
Ed Tanous | 0bdda66 | 2023-08-03 17:27:34 -0700 | [diff] [blame] | 132 | else if (element.first == "EventFormatType") |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 133 | { |
134 | const std::string* value = | ||||
Ed Tanous | 0bdda66 | 2023-08-03 17:27:34 -0700 | [diff] [blame] | 135 | element.second.get_ptr<const std::string*>(); |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 136 | if (value == nullptr) |
137 | { | ||||
138 | continue; | ||||
139 | } | ||||
Ed Tanous | 4b712a2 | 2023-08-02 12:56:52 -0700 | [diff] [blame] | 140 | subvalue.eventFormatType = *value; |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 141 | } |
Ed Tanous | 0bdda66 | 2023-08-03 17:27:34 -0700 | [diff] [blame] | 142 | else if (element.first == "SubscriptionType") |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 143 | { |
144 | const std::string* value = | ||||
Ed Tanous | 0bdda66 | 2023-08-03 17:27:34 -0700 | [diff] [blame] | 145 | element.second.get_ptr<const std::string*>(); |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 146 | if (value == nullptr) |
147 | { | ||||
148 | continue; | ||||
149 | } | ||||
Ed Tanous | 4b712a2 | 2023-08-02 12:56:52 -0700 | [diff] [blame] | 150 | subvalue.subscriptionType = *value; |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 151 | } |
Ed Tanous | 0bdda66 | 2023-08-03 17:27:34 -0700 | [diff] [blame] | 152 | else if (element.first == "MessageIds") |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 153 | { |
Ed Tanous | 0bdda66 | 2023-08-03 17:27:34 -0700 | [diff] [blame] | 154 | const nlohmann::json::array_t* obj = |
155 | element.second.get_ptr<const nlohmann::json::array_t*>(); | ||||
156 | if (obj == nullptr) | ||||
157 | { | ||||
158 | continue; | ||||
159 | } | ||||
160 | for (const auto& val : *obj) | ||||
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 161 | { |
162 | const std::string* value = | ||||
Ed Tanous | 0bdda66 | 2023-08-03 17:27:34 -0700 | [diff] [blame] | 163 | val.get_ptr<const std::string*>(); |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 164 | if (value == nullptr) |
165 | { | ||||
166 | continue; | ||||
167 | } | ||||
Ed Tanous | 4b712a2 | 2023-08-02 12:56:52 -0700 | [diff] [blame] | 168 | subvalue.registryMsgIds.emplace_back(*value); |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 169 | } |
170 | } | ||||
Ed Tanous | 0bdda66 | 2023-08-03 17:27:34 -0700 | [diff] [blame] | 171 | else if (element.first == "RegistryPrefixes") |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 172 | { |
Ed Tanous | 0bdda66 | 2023-08-03 17:27:34 -0700 | [diff] [blame] | 173 | const nlohmann::json::array_t* obj = |
174 | element.second.get_ptr<const nlohmann::json::array_t*>(); | ||||
175 | if (obj == nullptr) | ||||
176 | { | ||||
177 | continue; | ||||
178 | } | ||||
179 | for (const auto& val : *obj) | ||||
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 180 | { |
181 | const std::string* value = | ||||
Ed Tanous | 0bdda66 | 2023-08-03 17:27:34 -0700 | [diff] [blame] | 182 | val.get_ptr<const std::string*>(); |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 183 | if (value == nullptr) |
184 | { | ||||
185 | continue; | ||||
186 | } | ||||
Ed Tanous | 4b712a2 | 2023-08-02 12:56:52 -0700 | [diff] [blame] | 187 | subvalue.registryPrefixes.emplace_back(*value); |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 188 | } |
189 | } | ||||
Ed Tanous | 0bdda66 | 2023-08-03 17:27:34 -0700 | [diff] [blame] | 190 | else if (element.first == "ResourceTypes") |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 191 | { |
Ed Tanous | 0bdda66 | 2023-08-03 17:27:34 -0700 | [diff] [blame] | 192 | const nlohmann::json::array_t* obj = |
193 | element.second.get_ptr<const nlohmann::json::array_t*>(); | ||||
194 | if (obj == nullptr) | ||||
195 | { | ||||
196 | continue; | ||||
197 | } | ||||
198 | for (const auto& val : *obj) | ||||
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 199 | { |
200 | const std::string* value = | ||||
Ed Tanous | 0bdda66 | 2023-08-03 17:27:34 -0700 | [diff] [blame] | 201 | val.get_ptr<const std::string*>(); |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 202 | if (value == nullptr) |
203 | { | ||||
204 | continue; | ||||
205 | } | ||||
Ed Tanous | 4b712a2 | 2023-08-02 12:56:52 -0700 | [diff] [blame] | 206 | subvalue.resourceTypes.emplace_back(*value); |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 207 | } |
208 | } | ||||
Ed Tanous | 0bdda66 | 2023-08-03 17:27:34 -0700 | [diff] [blame] | 209 | else if (element.first == "HttpHeaders") |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 210 | { |
Ed Tanous | 0bdda66 | 2023-08-03 17:27:34 -0700 | [diff] [blame] | 211 | const nlohmann::json::object_t* obj = |
212 | element.second.get_ptr<const nlohmann::json::object_t*>(); | ||||
213 | if (obj == nullptr) | ||||
214 | { | ||||
215 | continue; | ||||
216 | } | ||||
217 | for (const auto& val : *obj) | ||||
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 218 | { |
Ed Tanous | 601c71a | 2021-09-08 16:40:12 -0700 | [diff] [blame] | 219 | const std::string* value = |
Ed Tanous | 0bdda66 | 2023-08-03 17:27:34 -0700 | [diff] [blame] | 220 | val.second.get_ptr<const std::string*>(); |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 221 | if (value == nullptr) |
222 | { | ||||
Ed Tanous | 62598e3 | 2023-07-17 17:06:25 -0700 | [diff] [blame] | 223 | BMCWEB_LOG_ERROR("Failed to parse value for key{}", |
Ed Tanous | 0bdda66 | 2023-08-03 17:27:34 -0700 | [diff] [blame] | 224 | val.first); |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 225 | continue; |
226 | } | ||||
Ed Tanous | 4b712a2 | 2023-08-02 12:56:52 -0700 | [diff] [blame] | 227 | subvalue.httpHeaders.set(val.first, *value); |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 228 | } |
229 | } | ||||
Ed Tanous | 0bdda66 | 2023-08-03 17:27:34 -0700 | [diff] [blame] | 230 | else if (element.first == "MetricReportDefinitions") |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 231 | { |
Ed Tanous | 0bdda66 | 2023-08-03 17:27:34 -0700 | [diff] [blame] | 232 | const nlohmann::json::array_t* obj = |
233 | element.second.get_ptr<const nlohmann::json::array_t*>(); | ||||
234 | if (obj == nullptr) | ||||
235 | { | ||||
236 | continue; | ||||
237 | } | ||||
238 | for (const auto& val : *obj) | ||||
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 239 | { |
240 | const std::string* value = | ||||
Ed Tanous | 0bdda66 | 2023-08-03 17:27:34 -0700 | [diff] [blame] | 241 | val.get_ptr<const std::string*>(); |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 242 | if (value == nullptr) |
243 | { | ||||
244 | continue; | ||||
245 | } | ||||
Ed Tanous | 4b712a2 | 2023-08-02 12:56:52 -0700 | [diff] [blame] | 246 | subvalue.metricReportDefinitions.emplace_back(*value); |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 247 | } |
248 | } | ||||
Ed Tanous | a14c911 | 2024-09-04 10:46:47 -0700 | [diff] [blame] | 249 | else if (element.first == "OriginResources") |
250 | { | ||||
251 | const nlohmann::json::array_t* obj = | ||||
252 | element.second.get_ptr<const nlohmann::json::array_t*>(); | ||||
253 | if (obj == nullptr) | ||||
254 | { | ||||
255 | continue; | ||||
256 | } | ||||
257 | for (const auto& val : *obj) | ||||
258 | { | ||||
259 | const std::string* value = | ||||
260 | val.get_ptr<const std::string*>(); | ||||
261 | if (value == nullptr) | ||||
262 | { | ||||
263 | continue; | ||||
264 | } | ||||
Ed Tanous | 4b712a2 | 2023-08-02 12:56:52 -0700 | [diff] [blame] | 265 | subvalue.originResources.emplace_back(*value); |
Ed Tanous | a14c911 | 2024-09-04 10:46:47 -0700 | [diff] [blame] | 266 | } |
267 | } | ||||
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 268 | else |
269 | { | ||||
Ed Tanous | 62598e3 | 2023-07-17 17:06:25 -0700 | [diff] [blame] | 270 | BMCWEB_LOG_ERROR( |
271 | "Got unexpected property reading persistent file: {}", | ||||
Ed Tanous | 0bdda66 | 2023-08-03 17:27:34 -0700 | [diff] [blame] | 272 | element.first); |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 273 | continue; |
274 | } | ||||
275 | } | ||||
276 | |||||
Ed Tanous | 4b712a2 | 2023-08-02 12:56:52 -0700 | [diff] [blame] | 277 | if ((subvalue.id.empty() && !loadFromOldConfig) || |
278 | subvalue.destinationUrl.empty() || subvalue.protocol.empty() || | ||||
279 | subvalue.retryPolicy.empty() || subvalue.eventFormatType.empty() || | ||||
280 | subvalue.subscriptionType.empty()) | ||||
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 281 | { |
Ed Tanous | 62598e3 | 2023-07-17 17:06:25 -0700 | [diff] [blame] | 282 | BMCWEB_LOG_ERROR("Subscription missing required field " |
283 | "information, refusing to restore"); | ||||
Ed Tanous | 4b712a2 | 2023-08-02 12:56:52 -0700 | [diff] [blame] | 284 | return std::nullopt; |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 285 | } |
286 | |||||
287 | return subvalue; | ||||
288 | } | ||||
289 | }; | ||||
290 | |||||
291 | struct EventServiceConfig | ||||
292 | { | ||||
293 | bool enabled = true; | ||||
294 | uint32_t retryAttempts = 3; | ||||
295 | uint32_t retryTimeoutInterval = 30; | ||||
296 | |||||
Ed Tanous | 0bdda66 | 2023-08-03 17:27:34 -0700 | [diff] [blame] | 297 | void fromJson(const nlohmann::json::object_t& j) |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 298 | { |
Ed Tanous | 0bdda66 | 2023-08-03 17:27:34 -0700 | [diff] [blame] | 299 | for (const auto& element : j) |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 300 | { |
Ed Tanous | 0bdda66 | 2023-08-03 17:27:34 -0700 | [diff] [blame] | 301 | if (element.first == "ServiceEnabled") |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 302 | { |
Ed Tanous | 0bdda66 | 2023-08-03 17:27:34 -0700 | [diff] [blame] | 303 | const bool* value = element.second.get_ptr<const bool*>(); |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 304 | if (value == nullptr) |
305 | { | ||||
306 | continue; | ||||
307 | } | ||||
308 | enabled = *value; | ||||
309 | } | ||||
Ed Tanous | 0bdda66 | 2023-08-03 17:27:34 -0700 | [diff] [blame] | 310 | else if (element.first == "DeliveryRetryAttempts") |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 311 | { |
312 | const uint64_t* value = | ||||
Ed Tanous | 0bdda66 | 2023-08-03 17:27:34 -0700 | [diff] [blame] | 313 | element.second.get_ptr<const uint64_t*>(); |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 314 | if ((value == nullptr) || |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 315 | (*value > std::numeric_limits<uint32_t>::max())) |
316 | { | ||||
317 | continue; | ||||
318 | } | ||||
319 | retryAttempts = static_cast<uint32_t>(*value); | ||||
320 | } | ||||
Ed Tanous | 0bdda66 | 2023-08-03 17:27:34 -0700 | [diff] [blame] | 321 | else if (element.first == "DeliveryRetryIntervalSeconds") |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 322 | { |
323 | const uint64_t* value = | ||||
Ed Tanous | 0bdda66 | 2023-08-03 17:27:34 -0700 | [diff] [blame] | 324 | element.second.get_ptr<const uint64_t*>(); |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 325 | if ((value == nullptr) || |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 326 | (*value > std::numeric_limits<uint32_t>::max())) |
327 | { | ||||
328 | continue; | ||||
329 | } | ||||
330 | retryTimeoutInterval = static_cast<uint32_t>(*value); | ||||
331 | } | ||||
332 | } | ||||
333 | } | ||||
334 | }; | ||||
335 | |||||
336 | class EventServiceStore | ||||
337 | { | ||||
338 | public: | ||||
Myung Bae | 5fe4ef3 | 2024-10-19 09:56:02 -0400 | [diff] [blame] | 339 | boost::container::flat_map<std::string, std::shared_ptr<UserSubscription>> |
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 340 | subscriptionsConfigMap; |
341 | EventServiceConfig eventServiceConfig; | ||||
342 | |||||
343 | static EventServiceStore& getInstance() | ||||
344 | { | ||||
345 | static EventServiceStore eventServiceStore; | ||||
346 | return eventServiceStore; | ||||
347 | } | ||||
348 | |||||
349 | EventServiceConfig& getEventServiceConfig() | ||||
350 | { | ||||
351 | return eventServiceConfig; | ||||
352 | } | ||||
JunLin Chen | 28afb49 | 2021-02-24 17:13:29 +0800 | [diff] [blame] | 353 | }; |
354 | |||||
355 | } // namespace persistent_data |