目录

代码入口

分析


代码入口

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:你可以在这个拓扑中找到通道,它们的Writer和Reader: ServiceManager:你可以在这个拓扑中找到服务,它们的Servers和Clients TopologyManager使用fast-rtps' Participant进行通信。它可以广播这些元素的加入或离开消息。此外,您可以注册自己的' ChangeFunc '来监视拓扑变化.

可以说这个node_manger中包含了apollo 所有的node 模块。

实际的检查逻辑比较简单:

  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 中是不是包含被检查的node

Apollo 应用与源码分析:Monitor监控-软件监控-模块存活监控相关推荐

  1. ceph-deploy源码分析(三)——mon模块 转

    ceph-deploy源码分析(三)--mon模块 原文: http://www.hl10502.com/2017/06/19/ceph-deploy-mon/#more ceph-deploy的mo ...

  2. webpack 源码分析(四)——complier模块

    webpack 源码分析(四)--complier模块 上一篇我们看到,webpack-cli 通过 yargs 对命令行传入的参数和配置文件里的配置项做了转换包装,然后传递给 webpack 的 c ...

  3. ceph源码分析--monitor的lease机制

    概述 在monitor节点中,存在着Leader和Peon两种角色.在monitor采用了一种lease机制,保证了副本在一定时间内可读写.同时lease机制也保证了整个集群中的monitor当前都是 ...

  4. Apollo 应用与源码分析:Monitor监控 - 基本概念与入口分析

    Monitor 系统监控 目录 基本概念 代码结构分析 整体逻辑分析 基本概念 整体分类 该模块包含用于检查硬件状态和监视系统运行状况的代码等系统级软件. 在Apollo 5.5中,监视模块现在执行以 ...

  5. Apollo 应用与源码分析:Monitor监控-硬件监控-GPS

    硬件架构图 可以看到左下角的"GNSS定位模块"其实是有IMU和GPS Antenna 组成的. 执行分析 代码 class GpsMonitor : public Recurre ...

  6. Apollo 应用与源码分析:Monitor监控-软件监控-定位、camera、功能安全、数据记录监控

    目录 定位监控 代码 分析 备注 camera监控 代码 分析 功能安全监控 代码 分析 CheckSafty函数分析 RunOnce 函数分析 记录功能监控 代码 分析 SmartRecorderS ...

  7. Apollo 应用与源码分析:Monitor监控-软件监控-进程存活监控-process_monitor

    目录 流程 代码 分析 获取可以运行的进程的信息 检查HMI 的模块信息 检查被监控的组件 检查其他组件 判断进程状态UpdateStatus 流程 代码 class ProcessMonitor : ...

  8. mysql exporter怎么配置_mysqld_exporter的源码分析和定制化(单个mysqld_exporter监控多个数据库实例)...

    mysqld_exporter是prometheus官方提供的用于监控mysql运行状态的exporter.其相关信息可以参考:https://github.com/prometheus/mysqld ...

  9. ceph源码分析--Monitor paxos算法

    1.概述 对于分布式来说最重要的莫过于所有副本数据的一致性. 在monitor节点中,存在着Leader和Peon两种角色.当客户端发出读命令时可以由相应的Peon或者Leader返回.一旦发生修改动 ...

最新文章

  1. stk软件支持Linux,STK组件基础篇:开发入门
  2. 设计模式 -行为型模式_ 观察者模式Observer Pattern 之 JDK内置的实现
  3. Consul入门01 - 安装Consul
  4. python集成工具包_pyBit
  5. Linux命令之tree
  6. 在Spring中使用Netflix Hystrix批注
  7. 组件文件已损坏或android内部模块,android - Android Q更新后,模块化系统组件在托管配置文件中不可用 - 堆栈内存溢出...
  8. recyclerview 加载fragment_恢复 RecyclerView 的滚动位置
  9. 我从GitHub 企业版找到严重的 RCE 漏洞,意外得$2万奖金 (GitHub $6.1万系列之一)...
  10. java web 加载Spring --web.xml 篇
  11. UVA10023 Square root【大数】
  12. Layered Windows分层窗口
  13. 计算机专业英语四六级,英语四级历年真题,历年四六级真题电子版?
  14. 基于动态邻域的切换粒子群优化算法
  15. 推下属出去背锅,是最被人不耻的管理者
  16. 傅里叶变换(真正的通俗易懂)
  17. WSM ,BSM,SCI,DSRC
  18. 疫情放开,新冠防治药推荐,中医治疫病的准则
  19. Kotlin Native - 原生平台 Hollo World!
  20. 青阳网络文件传输系统 kiftd 1.1.0 正式发布!

热门文章

  1. 为什么魂斗罗只有128KB却可以实现那么长的剧情?
  2. 人脸识别之人脸对齐(七)--JDA算法
  3. 儿童补微量元素铁可试试纯果汁调蛋黄
  4. 高通骁龙835:手机充电5分钟续航5小时
  5. Unity云渲染搭建一 Webrtc环境搭建(Unity2019.4)
  6. 一位大四学弟来找我帮忙
  7. 《安富莱嵌入式周报》第212期:2021.05.11--2021.05.17
  8. 37 --> 详解 OpenWRT系统框架基础软件模块之 procd
  9. 原来国家名字也可以如此浪漫,除了日本!
  10. 前端知识体系(7)-react篇