Aplicación Apollo y análisis de código fuente: Monitoreo de monitoreo-software de monitoreo-módulo de monitoreo de supervivencia

Tabla de contenido

entrada de código

analizar


entrada de código

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);
    }
  }
}

analizar

Hay una clase de gestión en el módulo de detección de supervivencia: node_manager

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

Las relaciones de elementos simples en la red (nodos, canales, servicios, escritores, lectores, clientes y servidores) están representadas por topología. Puede imaginar un gráfico dirigido: los nodos son contenedores de servidores/clientes/escritores/lectores, son los vértices del gráfico, los canales son los bordes que fluyen de los escritores a los lectores, los servicios son flujos desde los servidores hasta el borde del cliente. Para generar este gráfico, usamos TopologyManager, que tiene tres subadministradores: NodeManager: puede encontrar nodos en esta topología ChannelManager: puede encontrar canales, sus escritores y lectores en esta topología: ServiceManager: puede encontrarlos en esta topología Servicios se encuentran en , y sus servidores y clientes TopologyManager se comunican mediante el participante de fast-rtps. Puede transmitir unirse o dejar mensajes para estos elementos. Además, puede registrar su propio 'ChangeFunc' para monitorear los cambios de topología.

Se puede decir que este node_manger contiene todos los módulos de nodo de apollo.

La lógica de verificación real es relativamente simple:

  1. Obtener todos los nodos para ser monitoreados;
  2. Juicio de estado en 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);
}

El juicio de estado aquí es juzgar si el node_manger contiene el nodo marcado

 

Supongo que te gusta

Origin blog.csdn.net/qq_32378713/article/details/128095018
Recomendado
Clasificación