分析器的共同特点


一、 消息分析器接口定义了如下方法,通过这些方法,我们可以知道分析器他要做哪些事


涉及到重要的功能方法:分析(analyze)、存储(doCheckpoint) 、销毁(destroy)

二、 我们再来看看消息分析器的抽象实现类AbstractMessageAnalyzer做了什么

  1. 定义了两个重要的抽象方法:
    a) doCheckpoint:存储
    b) process:处理
    c) loadReports:得到某一周期的reports
  2. 对analyze有明确的实现,对队列中的MessageTree进行消费,消费过程调用了process方法

三、 具体分析器(为什么每一个分析器都要注入xxxDelegate,没有被调用到??)
1. 注入ReportManager 进行report的生成和持久化
2. 具体实现了process的方法,不同类型进行不同的处理
3.。。。

四、 DefaultReportManager(委托模式:聚合代替继承,对类进行功能扩展)

  1. 注入ReportBucketManager: 用于持久化到本地文件
  2. 注入ReportDelegate:帮助manager存储、生成report的工具类
  3. 注入dao:用于持久化到数据库

总结:不同的分析器首先对消息进行处理,之后通过reportManager生成报表,存于Report对象中,并持久化到本地文件或数据库

HeartBeatAnalyzer


每隔一分钟,client端会收集一次心跳状态,收集数据的线程在cat初始化过程中启动

process

  • 获得message
  • 获得report(HeartbeatReport类型的),根据不同项目类型,获得不同项目的report
  • 将tree中的ip加入到report的m_ips中(这是一个set集合)
  • processTransaction(report, tree, (Transaction) message);
    (1) 获得message的children
    (2) 循环遍历message

    • 如果是transaction类型的,则递归调用自己
    • 如果是Heartbeat,则processHeartbeat
      a.从message中得到ip,根据ip从report中得到machine
      b.buildHeartBeatInfo(Machine machine, Heartbeat heartbeat, long timestamp)
      c.将period加入到machine的periods中

EventAnalyzer

TransactionAnalyzer

第二步调用m_reportManager.getHourlyReport,这个方法是根据开始时间得到对应的report,如果是新的周期还没有report,则调用m_reportDelegate.makeReport方法创建一个report,放到reports中,返回report

疑问:

  1. 为什么sum=duration*duration?
  2. m_allDuration和m_durations有什么区别?粒度不同?但是展现只展现了m_durations,不知道m_allDuations用在什么场景?
  3. checkForTruncatedMessage方法不明白什么意思
    4.95、99如何计算?

MetricAnalyzer

  • 初始化

业务分析有一个产品线的概念,层级关系如下,一个company可以有多个产品线,一个产品线可以包含多个domain,三者之间的映射关系配置在配置文件metricProductLine中

当cat启动的时候,会解析配置文件为具体的配置类,持久化到数据库中,当用到某个配置的时候会先从库中读取(config表),如果该表中没有相应的配置,则会读取xml文件,然后持久化到数据库。

当研究metric的时候,我自己搭了一套springmvc的项目做测试,发现在cat的页面中,出不来指标的图像,就是因为我没有将项目(domain)加到生产线下,所以我就更改了上述配置,但是还是不生效,因为每次读取该配置都是从库中读取,不会读取我修改后的xml文件,所以需要把库中的数据删除,才会读取修改后的xml文件,然后在往数据库存一份

循环一个company下的所有生产线,循环生产线下的domain,给生产线中的Map赋值, map<domainID,produceID>,因为processMetric的第一步就是通过这个map找到对应的生产线
Eg:

分析流程:

写在后边

这一篇总结了分析器的共性和4个重要分析器的工作原理,下一篇将介绍另外几种分析器的分析过程

Cat源码分析(三):10种分析器相关推荐

  1. 【投屏】Scrcpy源码分析三(Client篇-投屏阶段)

    Scrcpy源码分析系列 [投屏]Scrcpy源码分析一(编译篇) [投屏]Scrcpy源码分析二(Client篇-连接阶段) [投屏]Scrcpy源码分析三(Client篇-投屏阶段) [投屏]Sc ...

  2. Nouveau源码分析(三):NVIDIA设备初始化之nouveau_drm_probe

    Nouveau源码分析(三) 向DRM注册了Nouveau驱动之后,内核中的PCI模块就会扫描所有没有对应驱动的设备,然后和nouveau_drm_pci_table对照. 对于匹配的设备,PCI模块 ...

  3. 【SA8295P 源码分析】10 - HQX Display(OpenWFD)qcdisplaycfg_ADP_STAR_LA.xml 配置文件解析

    [SA8295P 源码分析]10 - HQX Display(OpenWFD)qcdisplaycfg_ADP_STAR_LA.xml 配置文件解析 一.HQX Display 介绍 1.1 Open ...

  4. Spring源码分析(三)

    Spring源码分析 第三章 手写Ioc和Aop 文章目录 Spring源码分析 前言 一.模拟业务场景 (一) 功能介绍 (二) 关键功能代码 (三) 问题分析 二.使用ioc和aop重构 (一) ...

  5. java刷卡计时计次源码美萍_Java 定时调配 Timer 类和定任务 TimerTask 类(一篇详细且完整的源码分析以及四种简单的使用方法)...

    前言 在我们日常生活中,我们常常会遇到有关计时器的事情.如商城类项目会在某年某月某日某时某分某秒进行特价活动,那么当时间到达这个时间点上的时候该事件就会触发. 1.Timer 类构造函数摘要 1 Ti ...

  6. 【转】ABP源码分析三十五:ABP中动态WebAPI原理解析

    动态WebAPI应该算是ABP中最Magic的功能之一了吧.开发人员无须定义继承自ApiController的类,只须重用Application Service中的类就可以对外提供WebAPI的功能, ...

  7. Spring 源码分析(三) —— AOP(五)创建代理

    2019独角兽企业重金招聘Python工程师标准>>> 创建代理 代理的定义其实非常简单,就是改变原来目标对象方法调用的运行轨迹.这种改变,首先会对这些方法进行拦截,从而为这些方法提 ...

  8. Spring 源码分析(三) —— AOP(二)Spring AOP 整体架构

    2019独角兽企业重金招聘Python工程师标准>>> Spring AOP 架构         先是生成代理对象,然后是拦截器的作用,最后是编织的具体实现.这是AOP实现的三个步 ...

  9. paho架构_MQTT系列最终章-Paho源码分析(三)-心跳与重连机制

    写在前面 通过之前MQTT系列-Eclipse.Paho源码分析(二)-消息的发送与接收的介绍,相信仔细阅读过的小伙伴已经对Eclipse.Paho内部发送和订阅消息的流程有了一个较为清晰的认识,今天 ...

  10. ABP源码分析三十四:ABP.Web.Mvc

    ABP.Web.Mvc模块主要完成两个任务: 第一,通过自定义的AbpController抽象基类封装ABP核心模块中的功能,以便利的方式提供给我们创建controller使用. 第二,一些常见的基础 ...

最新文章

  1. 《剑指Offer》题目:树的子结构
  2. 基于Eclipse的TI集成开发环境IDE-CCSv5使用教程
  3. WordPress 多个安全漏洞
  4. Atitit.android  jsbridge v1新特性
  5. mysql---CV出现的中英文符号错误
  6. 求大数的阶乘方法(数组)
  7. asp功放怎么装_客厅家庭影院该怎么摆放?
  8. 【珍藏】2020年AI、CV、NLP顶会最全时间表!
  9. C语言—随机种子的设定
  10. nssl 1336.膜拜神牛 {LIS}
  11. 算法的陷阱:超级平台、算法垄断与场景欺骗
  12. 一张纸厚度是多少毫米_一本书的厚度大约是多少,一张纸的厚度大约是十分之一毫米,一本书...
  13. 遥感影像处理2——目视解译
  14. python 绘制随机漫步图(创建RandomWalk类)
  15. 【CTF WriteUp】网鼎杯 青龙组 Misc题解复现(整理,WP非原创)
  16. 通过计算机组成原理你能得到什么?
  17. linux如何使用帮助文档快速学习
  18. Linux简介及在VMware上安装第一台虚拟机
  19. Azkaban与Oozie详细对比
  20. 基于ubuntu环境搭建janus服务器

热门文章

  1. 进行最大公约数和最小公倍数的求解
  2. 1660 super安装tensorflow1.15
  3. 联想电脑虚拟化开启方法
  4. VMI - 供应商管理库存
  5. Swift 进阶 | 看得见的算法
  6. 使用J-Flash烧录固件
  7. time(0) 是什么意思?
  8. 文件操作fwrite写txt文件乱码怎么办,我这里有方法解决
  9. matlab rgb三维直方图,MATLAB小技巧之十:利用MATLAB绘制三维彩色柱状图[转载]
  10. 阿里巴巴中台战略思想与架构实战笔记