51 {
52 auto manager = MonitorManager::Instance();
53 auto* status = manager->GetStatus();
54
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(),
65 summary);
66 const auto& other_status = component.second.other_status();
67 EscalateStatus(other_status.status(), other_status.message(), summary);
68 }
69
70
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(),
77 summary);
78 }
79
80
81
82
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);
87
88 if (system_status_fp_ != new_fp ||
89 current_time - last_broadcast_ > FLAGS_system_status_publish_interval) {
90 static auto writer =
91 manager->CreateWriter<SystemStatus>(FLAGS_system_status_topic);
92
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;
98 }
99}
static void EscalateStatus(const ComponentStatus::Status new_status, const std::string &message, ComponentStatus *current_status)