34 const std::string& message,
35 ComponentStatus* current_status) {
37 if (new_status > current_status->status()) {
38 current_status->set_status(new_status);
39 if (!message.empty()) {
40 current_status->set_message(message);
42 current_status->clear_message();
52 auto manager = MonitorManager::Instance();
53 auto* status = manager->GetStatus();
55 for (
auto& component : *status->mutable_components()) {
56 auto* summary = component.second.mutable_summary();
57 const auto& process_status = component.second.process_status();
58 EscalateStatus(process_status.status(), process_status.message(), summary);
59 const auto& module_status = component.second.module_status();
60 EscalateStatus(module_status.status(), module_status.message(), summary);
61 const auto& channel_status = component.second.channel_status();
62 EscalateStatus(channel_status.status(), channel_status.message(), summary);
63 const auto& resource_status = component.second.resource_status();
64 EscalateStatus(resource_status.status(), resource_status.message(),
66 const auto& other_status = component.second.other_status();
67 EscalateStatus(other_status.status(), other_status.message(), summary);
71 for (
auto& component : *status->mutable_global_components()) {
72 auto* summary = component.second.mutable_summary();
73 const auto& process_status = component.second.process_status();
74 EscalateStatus(process_status.status(), process_status.message(), summary);
75 const auto& resource_status = component.second.resource_status();
76 EscalateStatus(resource_status.status(), resource_status.message(),
83 static std::hash<std::string> hash_fn;
84 std::string proto_bytes;
85 status->SerializeToString(&proto_bytes);
86 const size_t new_fp = hash_fn(proto_bytes);
88 if (system_status_fp_ != new_fp ||
89 current_time - last_broadcast_ > FLAGS_system_status_publish_interval) {
91 manager->CreateWriter<SystemStatus>(FLAGS_system_status_topic);
93 apollo::common::util::FillHeader(
"SystemMonitor", status);
94 writer->Write(*status);
95 status->clear_header();
96 system_status_fp_ = new_fp;
97 last_broadcast_ = current_time;