自定义附加属性
Action Scope概念
Scope
存储应用相关数据,随探针数据一起发送给后台。探针启动之后会自动创建一个Root Scope
,即全局Scope。用户也可以在局部范围手动创建局部Scope,详情见局部Scope部分。
Scope中存储contexts
类型的数据,用于存储用户相关的信息。
使用场景
- 获取自定义Ajax请求头和返回头,附加到Ajax数据中上传。
- JS错误触发时调用用户API记录错误ID。
- ...
设置context
全局setContext
用法1:
传入key和value。
TINGYUN.setContext('app', {
name: 'my_app',
version: 'V1.1.1'
});
用法2:
不携带key的设置方式。这种方式需要传入完整的context内部结构,例如:
TINGYUN.setContext({
app: {
name: 'my_app',
version: 'V1.1.1'
}
})
局部setContext
Action Hook用于在Action触发时执行用户自定义操作。在Action Hook中,默认会创建一个局部Scope用于设置自定义数据,详情见Action Hook。
Action Hook
Action Hook在Action监控数据项组装时触发。Action Hook的回调函数参数中会注入局部Scope
参数,可以用来设置自定义数据。
TINGYUN.addActionHook(name: string, handler: function)
参数说明:
name
Action Hook名称:
ajax
:Ajax action。error
:错误类型 action。
handler
hook触发的回调函数,会传入params参数。
- params.target:Ajax或错误原始对象(xhr对象或error对象)。
- params.actionData:TINGYUN 采集的数据, 不同类型的数据结构会不同。具体参考具体action hook的文档。修改actionData值不会影响上传数据内容。
- params.scope: 针对本action创建的局部Scope。如果需要在本条action中设置自定义数据,需要调用scope的
setContext
接口。
Ajax Hook
TINGYUN.addActionHook('ajax', function(params) {
const {target, actionData, scope} = params;
// 在ajax响应后执行一些自定义操作
});
actionData属性说明:
{
"method": "GET", // http method
"url": "https://jsonplaceholder.typicode.com/todos/1?orderId=2", // 请求url
"start": 1614312953359, // 开始发送时间
"end": 1614312954233, // 结束发送时间
"du": 874, //请求耗时
"status": 200,// 状态码
"err": 0, // xhr错误码 error: 990 abort: 905 timeout: 903
"rec": 83, // 返回字节数
"send": 0, // 发送字节数
"requestHeader": {
//...
} // setRequestHeader调用添加的请求头
}
示例场景
获取自定义Ajax请求头和返回头,附加到Ajax数据中上传:
TINGYUN.addActionHook('ajax', function(params) {
const {target, actionData, scope} = params;
scope.setContext({
customHeader: {
request: actionData.requestHeader['custom-request-header'], // 取自定义请求头
response: target.getResponseHeader('custom-response-header') // 取自定义请求头
}
});
});
Error Hook
TINGYUN.addActionHook('error', function(params) {
const {target, actionData, scope} = params;
// 在错误触发时执行一些自定义操作
});
actionData属性说明:
{
"id": "c8076d03fa4b4a11be7951e01e506f90", // 事件traceId
"o": 1612149081642, // js错误触发时间,毫秒
"e": "Uncaught Error: js-error", // 错误信息
"l": 42, // 错误行号
"c": 19, // 错误列号
"r": "http://127.0.0.1:8080/322/", // 错误文件名
"s": "Error: Simple Error\n at triggerNormalError (http://127.0.0.1:8080/322/:42:19)\n at HTMLButtonElement.onclick (http://127.0.0.1:8080/322/:30:45)", // 错误
"tr": "error", // trigger 触发收集的方式, report(captureException接口上报), error(探针监控获取)
}
示例场景
JS错误触发时调用用户API记录错误ID。
TINGYUN.addActionHook('error', function(params) {
const {target, actionData, scope} = params;
// 用户自定义api, 记录错误id到用户系统中
reportErrorId(actionData.id);
});