自定义附加属性

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);
});
© 2007-2023 北京基调网络股份有限公司 all right reserved,powered by Gitbook本文档更新于: 2023-12-18 16:44

results matching ""

    No results matching ""