21 dispatcher(bp.get_dispatcher())
24 last_update = std::chrono::duration_cast<std::chrono::milliseconds>(
25 TClock::now().time_since_epoch());
27 enclave_counts = nlohmann::json::object();
31 bp, AdminMessage::work_stats, [
this](
const uint8_t* data,
size_t size) {
33 ringbuffer::read_message<AdminMessage::work_stats>(data, size);
38 j = nlohmann::json::parse(dumped_json);
40 catch (
const nlohmann::json::parse_error& e)
42 LOG_FAIL_FMT(
"Received unparseable work_stats from enclave");
46 for (
const auto& [outer_key, outer_value] : j.items())
48 for (
const auto& [inner_key, inner_value] : outer_value.items())
50 auto& outer_obj = enclave_counts[outer_key];
51 auto it = outer_obj.find(inner_key);
52 if (it == outer_obj.end())
54 outer_obj[inner_key] = inner_value;
58 const auto prev = it.value().get<
size_t>();
59 outer_obj[inner_key] = prev + inner_value.get<
size_t>();
70 std::chrono::duration_cast<std::chrono::milliseconds>(
71 TClock::now().time_since_epoch());
73 if (!message_counts.empty())
75 auto j = nlohmann::json::object();
77 j[
"start_time_ms"] = last_update.count();
78 j[
"end_time_ms"] = time_now.count();
81 j[
"ringbuffer_messages"] =
88 j[
"ringbuffer_messages"] = enclave_counts;
89 enclave_counts = nlohmann::json::object();
94 last_update = time_now;