Skip to content

添加感兴趣的组件

silkCut edited this page Nov 30, 2017 · 2 revisions

添加组件

文件molten_intercept.c中 mo_intercept_ctor中添加感兴趣的组件, 添加的拦截组件请注释/*component*/。

如果是以扩展形式添加进入的组件先利用extension_loaded("extension")函数判断对应扩展已经加载。

如果是拦截关注的类,利用ADD_INTERCEPTOR_TAG(pit, tag)添加感兴趣的tag, 这里的tag是指如果是类名,并且是全路径,譬如:ADD_INTERCEPTOR_TAG(pit, GuzzleHttp\\Client), 然后利用INIT_INTERCEPTOR_ELE(className@method, capture, record), 去添加执行前拦截函数和执行后记录函数。

注意 对于用户定义的类需要定义capture函数去获取参数信息,详情请参照guzzle_request_capture函数, 并且在record函数中调用merge_span_extra(span, frame) 来将capture中拦截的信息merge进来。对于扩展中定义的类或者函数没有对应的限制,只需要定义record函数即可。

capture 和record函数原型如下:func(mo_interceptor_t *pit, mo_frame_t *frame), 对应的详细的结构信息请参照代码。 获取参数的方式:GET_FUNC_ARG(name, index), name是自定义的名称, index是指第几个参数, 第一个参数就是1-1 = 0, 以此类推。

记录信息的固定方式是pit->psb->xxxx , 其中xxxx 为span_add_ba是记录binaryannotation;xxxx为start_span是开始一个span。build_com_record是普遍的记录方式,会开始一个span并且记录执行参数。将信息设置完毕之后,同一调用mo_chain_add_span(pit->pct->pcl, span);

添加test case

不同组件的拦截请参照目录下tests/molten_xxx.phpt中例子。

最后

希望大家多多提交, 尽量的晚上molten中拦截组件的丰富程度。

Clone this wiki locally