Приложение Apollo и анализ исходного кода: Мониторинг-мониторинг-программное обеспечение-мониторинг-модуль мониторинга выживания

Оглавление

ввод кода

анализировать


ввод кода

class ModuleMonitor : public RecurrentRunner {
 public:
  using NodeManagerPtr = std::shared_ptr<cyber::service_discovery::NodeManager>;
  ModuleMonitor();
  void RunOnce(const double current_time) override;
  void UpdateStatus(const apollo::dreamview::ModuleMonitorConfig& config,
                    const std::string& module_name, ComponentStatus* status);

 private:
  NodeManagerPtr node_manager_ = nullptr;
};

void ModuleMonitor::RunOnce(const double current_time) {
  auto manager = MonitorManager::Instance();
  const auto& mode = manager->GetHMIMode();

  // Check monitored components.
  auto* components = manager->GetStatus()->mutable_components();
  for (const auto& iter : mode.monitored_components()) {
    const std::string& name = iter.first;
    const auto& monitored_component = iter.second;
    if (monitored_component.has_module() &&
        apollo::common::util::ContainsKey(*components, name)) {
      const auto& config = monitored_component.module();
      auto* status = components->at(name).mutable_module_status();
      UpdateStatus(config, name, status);
    }
  }
}

анализировать

В модуле обнаружения выживания есть класс управления: node_manager

 node_manager_ =
      cyber::service_discovery::TopologyManager::Instance()->node_manager();

Отношения простых элементов в сети — узлов, каналов, служб, писателей, читателей, клиентов и серверов — представлены топологией. Вы можете представить ориентированный граф — узлы — это контейнеры серверов/клиентов/писателей/читателей, они являются вершинами графа, каналы — это ребра, которые текут от писателей к читателям, сервисы — это потоки от серверов к ребру клиента. Для создания этого графа мы используем TopologyManager, который имеет три подменеджера — NodeManager: вы можете найти узлы в этой топологии ChannelManager: вы можете найти каналы, их Writers и Readers в этой топологии: ServiceManager: вы можете найти их в этой топологии Services находятся в , а их серверы и клиенты TopologyManager взаимодействуют с помощью участника fast-rtps. Он может транслировать сообщения о присоединении или выходе для этих элементов. Кроме того, вы можете зарегистрировать свой собственный ChangeFunc для отслеживания изменений топологии.

Можно сказать, что этот node_manger содержит все модули узла Apollo.

Фактическая логика проверки относительно проста:

  1. Получить все узлы для мониторинга;
  2. Оценка статуса в UpdateStatus
void ModuleMonitor::UpdateStatus(
    const apollo::dreamview::ModuleMonitorConfig& config,
    const std::string& module_name, ComponentStatus* status) {
  status->clear_status();

  bool all_nodes_matched = true;
  for (const std::string& name : config.node_name()) {
    if (!node_manager_->HasNode(name)) {
      all_nodes_matched = false;
      break;
    }
  }
  if (all_nodes_matched) {
    // Working nodes are all matched. The module is running.
    SummaryMonitor::EscalateStatus(ComponentStatus::OK, module_name, status);
    return;
  }

  SummaryMonitor::EscalateStatus(ComponentStatus::FATAL, "", status);
}

Оценка состояния здесь заключается в том, чтобы определить, содержит ли node_manger проверенный узел.

 

рекомендация

отblog.csdn.net/qq_32378713/article/details/128095018
рекомендация