跳到主要内容

自定义附加属性

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);
});