This is an automated email from the ASF dual-hosted git repository. wusheng pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/skywalking-client-js.git
commit eef867b55a4a6e1be2c16a181ec860ef0fd7d275 Author: Qiuxia Fan <[email protected]> AuthorDate: Wed Jan 8 15:17:28 2020 +0800 feat: trace resource error --- src/errors/index.ts | 3 ++- src/errors/resource.ts | 47 +++++++++++++++++++++++++++++++++++++++++++++++ src/monitor.ts | 3 ++- src/services/base.ts | 4 +++- 4 files changed, 54 insertions(+), 3 deletions(-) diff --git a/src/errors/index.ts b/src/errors/index.ts index b213fd0..8a10f4c 100644 --- a/src/errors/index.ts +++ b/src/errors/index.ts @@ -17,7 +17,8 @@ import JSErrors from './js'; import PromiseErrors from './promise'; import AjaxErrors from './ajax'; +import ResourceErrors from './resource'; export { - JSErrors, PromiseErrors, AjaxErrors, + JSErrors, PromiseErrors, AjaxErrors, ResourceErrors, }; diff --git a/src/errors/resource.ts b/src/errors/resource.ts new file mode 100644 index 0000000..c861357 --- /dev/null +++ b/src/errors/resource.ts @@ -0,0 +1,47 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import Base from '../services/base'; +import { GradeTypeEnum, ErrorsCategory } from '../services/constant'; + +class ResourceErrors extends Base { + public handleErrors(options: {reportUrl: string; serviceName: string}) { + window.addEventListener('error', (event) => { + if (!event) { + return; + } + this.reportUrl = options.reportUrl; + this.serviceName = options.serviceName; + const target: any = event.target || event.srcElement; + const isElementTarget = target instanceof HTMLScriptElement + || target instanceof HTMLLinkElement || target instanceof HTMLImageElement; + + if (!isElementTarget) { // return js error + return; + } + this.logInfo = { + category: ErrorsCategory.RESOURCE_ERROR, + grade: target.tagName === 'IMG' ? GradeTypeEnum.WARNING : GradeTypeEnum.ERROR, + errorUrl: target.src || target.href, + errorInfo: target, + message: `load ${target.tagName} resource error`, + }; + this.traceInfo(); + }); + } +} +export default new ResourceErrors(); diff --git a/src/monitor.ts b/src/monitor.ts index a164606..934b711 100644 --- a/src/monitor.ts +++ b/src/monitor.ts @@ -16,7 +16,7 @@ */ import { CustomOptionsType } from './types'; -import { JSErrors, PromiseErrors, AjaxErrors } from './errors/index'; +import { JSErrors, PromiseErrors, AjaxErrors, ResourceErrors } from './errors/index'; const ClientMonitor = { customOptions: { @@ -43,6 +43,7 @@ const ClientMonitor = { } if (this.customOptions.resourceErrors) { this.customOptions.resourceErrors = options.resourceErrors; + ResourceErrors.handleErrors({reportUrl, serviceName}); } if (this.customOptions.ajaxErrors) { this.customOptions.ajaxErrors = options.ajaxErrors || this.customOptions.ajaxErrors; diff --git a/src/services/base.ts b/src/services/base.ts index fa655c9..08fa270 100644 --- a/src/services/base.ts +++ b/src/services/base.ts @@ -20,7 +20,9 @@ import { errorInfoFeilds } from './types'; export default class Base { public reportUrl: string; + public serviceName: string; + public logInfo: errorInfoFeilds = { category: ErrorsCategory.UNKNOW_ERROR, grade: GradeTypeEnum.INFO, @@ -52,7 +54,7 @@ export default class Base { Task.addTask(this.reportUrl, errorInfo); } catch (error) { - // console.log(error); + throw error; } }
