import defaultConfig from './defaultConfig' import * as Tools from "../tool"; import { TracerConfigType } from './type' import { pageLoadTransaction, pageErrorTransaction, pageRunTransactionStart, pageRunTransactionEnd, //part networkTaskPart, pageChangeTaskPart, elementActionTaskPart, } from './task' import { onHandleHashChange, onHandleHttpRequest, onHandleDomActive, } from './handleEvent' import { start, setUserInfo, createCustomLog, captureError, //catch control stopElementActionCatch, resumeElementActionCatch, stopPageChangeEventCatch, resumePageChangeEventCatch, stopRequestCatch, resumeRequestCatch, } from './api' class Tracer { private _config: TracerConfigType; private isStart: boolean; private currTransaction: any; private apmCoreServiceFactory: any private apmCoreConfigServer: any //judge control private isGlobalElementActionCatch: boolean //instance server private tracerTransaction :any private tracerEvent : any private tracerNetwork : any private tarcerElement : any constructor(config: TracerConfigType) { this._config = Tools.extend({},defaultConfig,config); const { automaticStart } = this._config this.isGlobalElementActionCatch = config.isGlobalElementActionCatch?true:false; // is automatic start if(automaticStart){ this.start() } } private initApmCore = () => { const { _config } = this; //初始化配置 this.apmCoreConfigServer = this.apmCoreServiceFactory.getService("ConfigService"); this.apmCoreConfigServer.setConfig(_config); this.apmCoreServiceFactory.init(); //init custom transaction this.tracerTransaction.initCustomTransaction(_config) } private initPageTracer = () => { Tools.asynGenerator( this.pageErrorTransaction, this.pageLoadTransaction, this.pageRunTransactionStart, //register event this.registerEventListener ) } private registerEventListener = () => { //hashchange this.tracerEvent.addPageChangeEventLister(this.onHandleHashChange) //network this.tracerNetwork.addRequestListenr(this.onHandleHttpRequest); //element this.tarcerElement.addElementActionListenr(this.onHandleDomActive); }; /******************* page tracer task *********************/ private pageLoadTransaction = pageLoadTransaction.bind(this) private pageErrorTransaction = pageErrorTransaction.bind(this) private pageRunTransactionStart = pageRunTransactionStart.bind(this) private pageRunTransactionEnd = pageRunTransactionEnd.bind(this) private networkTaskPart = networkTaskPart.bind(this) private pageChangeTaskPart = pageChangeTaskPart.bind(this) private elementActionTaskPart = elementActionTaskPart.bind(this) /******************* event handle *********************/ private onHandleHashChange = onHandleHashChange.bind(this) private onHandleHttpRequest = onHandleHttpRequest.bind(this) private onHandleDomActive = onHandleDomActive.bind(this) /******************* api *********************/ //启动 public start = start.bind(this) //设置用户信息 public setUserInfo = setUserInfo.bind(this) //创建自定义事件part-transaction @return new part-transcation public createCustomLog = createCustomLog.bind(this) //添加错误日志 public captureError = captureError.bind(this) //catch control public stopElementActionCatch = stopElementActionCatch.bind(this) public resumeElementActionCatch = resumeElementActionCatch.bind(this) public stopPageChangeEventCatch = stopPageChangeEventCatch.bind(this) public resumePageChangeEventCatch = resumePageChangeEventCatch.bind(this) public stopRequestCatch = stopRequestCatch.bind(this) public resumeRequestCatch = resumeRequestCatch.bind(this) } export default Tracer;