Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
612d69e691 | ||
|
|
0cc4b691de | ||
|
|
9da25f822c | ||
|
|
989935c9a0 | ||
|
|
a85c2fcbc8 | ||
|
|
79ef9425bd | ||
|
|
d3bf57b0ea | ||
|
|
23ba4f41e4 | ||
|
|
690cc8ac34 |
+189
@@ -0,0 +1,189 @@
|
|||||||
|
import {
|
||||||
|
default as Record
|
||||||
|
} from "./record.js"; // record, pack
|
||||||
|
import request from './request.js'
|
||||||
|
const {
|
||||||
|
record,
|
||||||
|
pack,
|
||||||
|
unpack,
|
||||||
|
Replayer
|
||||||
|
} = Record;
|
||||||
|
|
||||||
|
window.TracePlugin = {
|
||||||
|
endOrNot: true,
|
||||||
|
uniqueNo: null,
|
||||||
|
traceId: null,
|
||||||
|
appKey: null,
|
||||||
|
productCode: null,
|
||||||
|
productName: null,
|
||||||
|
module: null,
|
||||||
|
content: null,
|
||||||
|
events: [],
|
||||||
|
replayer: null,
|
||||||
|
/**
|
||||||
|
* 开始录制函数
|
||||||
|
* uniqueNo 订单唯一标识,非必传
|
||||||
|
* extra 订单额外参数,非必传
|
||||||
|
*/
|
||||||
|
start: function(uniqueNo = null, extra = {}) {
|
||||||
|
window.TracePlugin.traceId = null;
|
||||||
|
window.TracePlugin.endOrNot = false;
|
||||||
|
if (window.stopFn) {
|
||||||
|
window.stopFn();
|
||||||
|
window.stopFn = null;
|
||||||
|
}
|
||||||
|
window.stopFn = record({
|
||||||
|
emit(event) {
|
||||||
|
window.TracePlugin.appKey = extra.appKey;
|
||||||
|
window.TracePlugin.productCode = extra.productCode;
|
||||||
|
window.TracePlugin.productName = extra.productName;
|
||||||
|
window.TracePlugin.module = extra.module;
|
||||||
|
window.TracePlugin.content = extra.content;
|
||||||
|
window.TracePlugin.uniqueNo = uniqueNo;
|
||||||
|
if (!window.TracePlugin.endOrNot) {
|
||||||
|
window.TracePlugin.events.push(event);
|
||||||
|
if (window.TracePlugin.events.length === 100) {
|
||||||
|
window.TracePlugin.stop(uniqueNo);
|
||||||
|
window.TracePlugin.endOrNot = false;
|
||||||
|
window.TracePlugin.events = [];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
packFn: pack,
|
||||||
|
sampling: {
|
||||||
|
// 定义不录制的鼠标交互事件类型,可以细粒度的开启或关闭对应交互录制
|
||||||
|
mouseInteraction: {
|
||||||
|
MouseUp: false,
|
||||||
|
MouseDown: false,
|
||||||
|
Click: true,
|
||||||
|
ContextMenu: false,
|
||||||
|
DblClick: false,
|
||||||
|
Focus: true,
|
||||||
|
Blur: true,
|
||||||
|
TouchStart: true,
|
||||||
|
TouchEnd: true,
|
||||||
|
},
|
||||||
|
mousemove: false,
|
||||||
|
scroll: 150, // 每 150ms 最多触发一次
|
||||||
|
// 设置输入事件的录制时机
|
||||||
|
input: "last", // 连续输入时,只录制最终值
|
||||||
|
},
|
||||||
|
recordCanvas: true, //支持录制canvas
|
||||||
|
});
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 暂停录制函数
|
||||||
|
* uniqueNo 订单唯一标识,必传
|
||||||
|
* callback 录制成功后回调函数,非必传
|
||||||
|
* fail 录制失败后回调函数,非必传
|
||||||
|
*/
|
||||||
|
stop: async function(uniqueNo, callback, fail) {
|
||||||
|
// 压缩、入库、重置事件库、唯一标识
|
||||||
|
window.TracePlugin.uniqueNo = uniqueNo;
|
||||||
|
// 事件数超过100则分割
|
||||||
|
let len = Math.ceil(window.TracePlugin.events.length / 100)
|
||||||
|
let save = async (events) => {
|
||||||
|
try {
|
||||||
|
const res = await request({
|
||||||
|
url: '/track/save',
|
||||||
|
method: 'post',
|
||||||
|
data: {
|
||||||
|
traceId: window.TracePlugin.traceId,
|
||||||
|
last: false,
|
||||||
|
orderId: uniqueNo,
|
||||||
|
appKey: window.TracePlugin.appKey,
|
||||||
|
productCode: window.TracePlugin.productCode,
|
||||||
|
productName: window.TracePlugin.productName,
|
||||||
|
module: window.TracePlugin.module,
|
||||||
|
content: window.TracePlugin.content,
|
||||||
|
events: events
|
||||||
|
}
|
||||||
|
})
|
||||||
|
const {
|
||||||
|
code,
|
||||||
|
data
|
||||||
|
} = res
|
||||||
|
if (code === 200 && data) {
|
||||||
|
const {
|
||||||
|
traceId
|
||||||
|
} = data
|
||||||
|
window.TracePlugin.traceId = traceId;
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e)
|
||||||
|
fail && fail(window.TracePlugin.traceId)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let timer = null;
|
||||||
|
for (let i = 0; i < len; i++) {
|
||||||
|
let events = window.TracePlugin.events.slice(i * 100, i === len - 1 ? window.TracePlugin.events
|
||||||
|
.length : 100)
|
||||||
|
timer && window.clearTimeout(timer);
|
||||||
|
timer = setTimeout(async function() {
|
||||||
|
await save(events);
|
||||||
|
}, 200);
|
||||||
|
}
|
||||||
|
window.TracePlugin.events = [];
|
||||||
|
callback && callback(window.TracePlugin.traceId);
|
||||||
|
window.TracePlugin.endOrNot = true;
|
||||||
|
return JSON.stringify(window.TracePlugin.events);
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 结束录制函数
|
||||||
|
* uniqueNo 订单唯一标识,必传
|
||||||
|
* callback 录制成功后回调函数,非必传
|
||||||
|
* fail 录制失败后回调函数,非必传
|
||||||
|
*/
|
||||||
|
end: async function(uniqueNo, callback, fail) {
|
||||||
|
if (window.stopFn) {
|
||||||
|
window.stopFn();
|
||||||
|
window.stopFn = null;
|
||||||
|
}
|
||||||
|
// 压缩、入库、重置事件库、唯一标识
|
||||||
|
window.TracePlugin.uniqueNo = uniqueNo
|
||||||
|
// 事件数超过100则分割
|
||||||
|
let len = Math.ceil(window.TracePlugin.events.length / 100)
|
||||||
|
let save = async (events) => {
|
||||||
|
try {
|
||||||
|
const res = await request({
|
||||||
|
url: '/track/save',
|
||||||
|
method: 'post',
|
||||||
|
data: {
|
||||||
|
traceId: window.TracePlugin.traceId,
|
||||||
|
last: true,
|
||||||
|
orderId: uniqueNo,
|
||||||
|
appKey: window.TracePlugin.appKey,
|
||||||
|
productCode: window.TracePlugin.productCode,
|
||||||
|
productName: window.TracePlugin.productName,
|
||||||
|
module: window.TracePlugin.module,
|
||||||
|
content: window.TracePlugin.content,
|
||||||
|
events: events
|
||||||
|
}
|
||||||
|
})
|
||||||
|
const {
|
||||||
|
code
|
||||||
|
} = res
|
||||||
|
if (code === 200) {
|
||||||
|
window.TracePlugin.traceId = null;
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e)
|
||||||
|
fail && fail(window.TracePlugin.traceId)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let timer = null;
|
||||||
|
for (let i = 0; i < len; i++) {
|
||||||
|
let events = window.TracePlugin.events.slice(i * 100, i === len - 1 ? window.TracePlugin.events
|
||||||
|
.length -
|
||||||
|
i * 100 : 100)
|
||||||
|
timer && window.clearTimeout(timer);
|
||||||
|
timer = setTimeout(async function() {
|
||||||
|
await save(events);
|
||||||
|
}, 200);
|
||||||
|
}
|
||||||
|
window.TracePlugin.events = [];
|
||||||
|
callback && callback(window.TracePlugin.traceId)
|
||||||
|
window.TracePlugin.endOrNot = true;
|
||||||
|
return JSON.stringify(window.TracePlugin.events);
|
||||||
|
}
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user