一、背景
历时两个月的数据采集模块最近测试接近尾声,这是我独立完成的第一个大模块,所以有必要做下总结。
二、编码流程梳理
第一步、了解模块的作用
模块是采集系统的各种数据,汇总发送到服务器。数据分为几大类:
环境数据
性能数据
存储库数据
关键进程数据
日志数据
以及接受并转发虚机采集的数据
第二步、将模块划分为子模块
首先,该模块在三种类型的环境(管理节点、计算节点、一体机)中都能运行,因此需要一个标志来区分这三种环境
其次,可将进程划分为两个线程,一个线程与其它模块交互(接受并转发虚机的数据,以及其它);主线程采集这五类数据
最后,采集的五类数据,独立到五个函数模块中,每个函数模块分为三大步骤:采集、封装和发送
第三步、各个子模块的处理
采集函数部分参考现有的模块代码
封装和发送函数经搜索调研后采用json-c库和curl库
第四步、最大化利用现有代码,搭建起进程骨架
第五步、将所有函数内聚到我的模块中,并将该模块从两个尺度进行模块化隔离
1)文件尺度:分为日志模块、工具模块、主模块(采集封装发送)
2)功能尺度:主要针对主模块的五种类型类型
第六步、对代码进行几个步骤的梳理
1)代码命名规范化、标准化
2)函数进行统一抽象
3)完善异常处理
4)对动态内存泄漏进行重点核查
5)借助编译器对所有warning进行排查
6)对代码性能进行优化:减少循环、减少shell调用次数
7)请同事进行代码走查
第七步、详细测试
三、收获
1.编译器的warning真的很给力,不要轻易放过任何一个
2.高质量的代码(模块化、命名、一致性抽象等等)阅读起来真是赏心悦目,并且很容排查错误
3.终于领略到了C语言的内存操作是需要多么细心,指针未赋值、未初始化、不匹配等等
4.编译Makefile、库也收获一些常识。比如新增了一个函数,老是启动不了,就是因为没有替换环境上的包含这个函数的动态库。
5.学会了配置rsyslog模板,以及logrotate转储配置