-
Notifications
You must be signed in to change notification settings - Fork 160
添加感兴趣的组件
文件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);
不同组件的拦截请参照目录下tests/molten_xxx.phpt中例子。
希望大家多多提交, 尽量的晚上molten中拦截组件的丰富程度。
all we do is to support you !!!!!