You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by qi...@apache.org on 2021/04/23 01:55:51 UTC
[skywalking-client-js] branch master updated: feat: Support
reporting multiple logs (#49)
This is an automated email from the ASF dual-hosted git repository.
qiuxiafan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/skywalking-client-js.git
The following commit(s) were added to refs/heads/master by this push:
new 43951cc feat: Support reporting multiple logs (#49)
43951cc is described below
commit 43951cc636e063316bb9fd61edde6c52f6eb13e2
Author: Qiuxia Fan <fi...@outlook.com>
AuthorDate: Fri Apr 23 09:55:34 2021 +0800
feat: Support reporting multiple logs (#49)
* fix: update message
* feat: reports multiple errors
* docs: add comment
* fix: ajax errors
* fix: report errors log
---
src/errors/ajax.ts | 13 +++++++++----
src/services/base.ts | 40 ++++++----------------------------------
src/services/report.ts | 1 -
src/services/task.ts | 17 +++++++++--------
src/trace/interceptors/fetch.ts | 4 ++++
5 files changed, 28 insertions(+), 47 deletions(-)
diff --git a/src/errors/ajax.ts b/src/errors/ajax.ts
index 1a4879a..d2174b5 100644
--- a/src/errors/ajax.ts
+++ b/src/errors/ajax.ts
@@ -17,7 +17,7 @@
import uuid from '../services/uuid';
import Base from '../services/base';
-import { GradeTypeEnum, ErrorsCategory } from '../services/constant';
+import { GradeTypeEnum, ErrorsCategory, ReportTypes } from '../services/constant';
class AjaxErrors extends Base {
// get http error info
@@ -29,6 +29,11 @@ class AjaxErrors extends Base {
const xhrEvent = (event: any) => {
try {
if (event && event.currentTarget && (event.currentTarget.status >= 400 || event.currentTarget.status === 0)) {
+ const response = 'net::ERR_EMPTY_RESPONSE';
+
+ if (event.target && event.target.getRequestConfig[1] === options.collector + ReportTypes.ERRORS) {
+ return;
+ }
this.logInfo = {
uniqueId: uuid(),
service: options.service,
@@ -36,10 +41,10 @@ class AjaxErrors extends Base {
pagePath: options.pagePath,
category: ErrorsCategory.AJAX_ERROR,
grade: GradeTypeEnum.ERROR,
- errorUrl: event.target.responseURL,
- message: event.target.response,
+ errorUrl: event.target.getRequestConfig[1],
+ message: event.target.response || response,
collector: options.collector,
- stack: event.type + ':' + event.target.response,
+ stack: event.type + ': ' + (event.target.response || response),
};
this.traceInfo();
}
diff --git a/src/services/base.ts b/src/services/base.ts
index bd4a508..9c8ac20 100644
--- a/src/services/base.ts
+++ b/src/services/base.ts
@@ -41,41 +41,13 @@ export default class Base {
jsErrorPv = true;
this.logInfo.firstReportedError = true;
}
- this.handleRecordError();
+ const collector = this.logInfo.collector;
+
+ delete this.logInfo.collector;
+ Task.addTask(this.logInfo, collector);
+ // report errors within 1min
setTimeout(() => {
Task.fireTasks();
- }, 100);
- }
-
- private handleRecordError() {
- try {
- if (!this.logInfo.message) {
- return;
- }
- const errorInfo = this.handleErrorInfo();
-
- Task.addTask(errorInfo);
- } catch (error) {
- throw error;
- }
- }
-
- private handleErrorInfo() {
- let message = `error category:${this.logInfo.category}\r\n log info:${this.logInfo.message}\r\n
- error url: ${this.logInfo.errorUrl}\r\n `;
-
- switch (this.logInfo.category) {
- case ErrorsCategory.JS_ERROR:
- message += `error line number: ${this.logInfo.line}\r\n error col number:${this.logInfo.col}\r\n`;
- break;
- default:
- message;
- break;
- }
- const recordInfo = {
- ...this.logInfo,
- message,
- };
- return recordInfo;
+ }, 60000);
}
}
diff --git a/src/services/report.ts b/src/services/report.ts
index 263bf8e..96ddae4 100644
--- a/src/services/report.ts
+++ b/src/services/report.ts
@@ -51,7 +51,6 @@ class Report {
}
public sendByXhr(data: any) {
- delete data.collector;
if (!this.url) {
return;
}
diff --git a/src/services/task.ts b/src/services/task.ts
index 0fd44df..b777a43 100644
--- a/src/services/task.ts
+++ b/src/services/task.ts
@@ -14,23 +14,24 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+import { ErrorInfoFeilds, ReportFields } from './types';
import Report from './report';
class TaskQueue {
- private queues: any[] = [];
+ private queues: ((ErrorInfoFeilds & ReportFields) | undefined)[] = [];
+ private collector: string = '';
- public addTask(data: any) {
- this.queues.push({ data });
+ public addTask(data: ErrorInfoFeilds & ReportFields, collector: string) {
+ this.queues.push(data);
+ this.collector = collector;
}
public fireTasks() {
- if (!this.queues || !this.queues.length) {
+ if (!(this.queues && this.queues.length)) {
return;
}
- const item = this.queues[0];
- new Report('ERROR', item.data.collector).sendByXhr(item.data);
- this.queues.splice(0, 1);
- this.fireTasks();
+ new Report('ERRORS', this.collector).sendByXhr(this.queues);
+ this.queues = [];
}
}
diff --git a/src/trace/interceptors/fetch.ts b/src/trace/interceptors/fetch.ts
index 5d946ed..5bbb1e2 100644
--- a/src/trace/interceptors/fetch.ts
+++ b/src/trace/interceptors/fetch.ts
@@ -73,6 +73,10 @@ export default function windowFetch(options: CustomOptionsType, segments: Segmen
const index = segment.spans.length;
const values = `${1}-${traceIdStr}-${segmentId}-${index}-${service}-${instance}-${endpoint}-${peer}`;
+ if (!args[1]) {
+ args[1] = {};
+ args[1].headers = {};
+ }
args[1].headers['sw8'] = values;
}