设为首页 收藏本站
查看: 1261|回复: 0

[经验分享] Ganglia python扩展

[复制链接]

尚未签到

发表于 2017-4-27 11:16:16 | 显示全部楼层 |阅读模式
本文参考Ganglia 3.7.2版本代码完成。

 

代码一开始就定义了2个指向NULL的数组
指针
metric_info和metric_mapping_info,这是
两个
全局变量,其值在metric_init中初始化(metric_init函数
metric字典解析后存入这两个数组),然后在call back函数中展开,这样就完成了2个函数之间数据传递。

 

 

函数解读:

一.   static char* is_python_module(const char* fname)

传入文件名,检检文件中是否有"."符号和是否以.py结尾,返回.py前面部分,否则返回NULL

 

二.   int get_pydict_callable_value(PyObject* pdict, char* key, PyObject** pobj)

查找pdict字典对象的keys中是否存在key这个元素,取出这个元素的值并赋给指标pobj。这个函数是用来取出call back定义的函数。

 

三.   static void fill_metric_info(PyObject* pdict, py_metric_init_t* minfo, char *modname, apr_pool_t *pool)
传入modname和metric_init函数返回的metric字典pdict,循环解析pdict的key,并把key对应的 value 存入结构 minfo中(minfo为py_metric_init_t结构)

 

四.   static void fill_gmi(Ganglia_25metric* gmi, py_metric_init_t* minfo)
把结构 minfo 里的参数及值复制到结构 gmi 中,gmi结构比minfo结构多了2个类型,int key和 int msg_size。gmi->key 会自动地赋值给gmond。gmi应该是gmond可以识别的结构变量。
 
五.   static cfg_t*  find_module_config(char *modname)

查找指定module的配置信息。

 
函数处理过程:
(1).  查找到modules
(2).  查找到modules下的module,对所有module(用cfg_t类型的指针pymodule指向当前module配置)依次循环,返回符合以下条件的pymodule对像
(1).  查找module下的language值,判断是否为"python"(其中"python"不区分大小写,程序中用的都是小写),找不到或者不符合条件则continue到下一个module
(2).  查找module下的name,判断与传入的模块名称(
char *modname
)与此处配置的名称是否一致,不匹配时continue到下一个module
(3).  查找module下的enabled,判断是该module是否为有效状态(enabled = 1为有效,
enabled = 
0为无效), 无效时continue到下一个module
(4).  以上条件都满足时立即退出并返回pymodule
对象

(3).  循环结束,返回NULL(
没有找到满足的module

 
 
六.   static PyObject* build_params_dict(cfg_t *pymodule)
构造param字典
 
(1)把pymodule对象传入函数,找到pymodule下面所有的param,并依次循环
1)  找到param对应的name和value
2)  把value转换为string类型
3)  当name和value同时为真时,将其写入params_dict字典中
对象

(2)循环结束,返回params_dict字典对象
 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-369926-1-1.html 上篇帖子: python是个什么东西---python---提取页面内容--beautyfulsoup 下篇帖子: python异常处理常见错误
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表