@cloudcare/rum-uniapp 1.0.1 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/README.md +1 -1
  2. package/cjs/boot/buildEnv.js +1 -1
  3. package/cjs/boot/rum.entry.js +56 -1
  4. package/cjs/boot/rum.js +2 -2
  5. package/cjs/core/boundedBuffer.js +28 -0
  6. package/cjs/core/configuration.js +22 -1
  7. package/cjs/core/dataMap.js +5 -1
  8. package/cjs/core/transport.js +123 -69
  9. package/cjs/core/xhrProxy.js +3 -2
  10. package/cjs/helper/enums.js +11 -2
  11. package/cjs/helper/utils.js +189 -6
  12. package/cjs/rumEventsCollection/assembly.js +19 -2
  13. package/cjs/rumEventsCollection/page/index.js +1 -11
  14. package/cjs/rumEventsCollection/requestCollection.js +9 -2
  15. package/cjs/rumEventsCollection/resource/resourceCollection.js +21 -1
  16. package/cjs/rumEventsCollection/tracing/ddtraceTracer.js +50 -0
  17. package/cjs/rumEventsCollection/tracing/jaegerTracer.js +58 -0
  18. package/cjs/rumEventsCollection/tracing/skywalkingTracer.js +75 -0
  19. package/cjs/rumEventsCollection/tracing/tracer.js +108 -0
  20. package/cjs/rumEventsCollection/tracing/w3cTraceParentTracer.js +51 -0
  21. package/cjs/rumEventsCollection/tracing/zipkinMultiTracer.js +58 -0
  22. package/cjs/rumEventsCollection/tracing/zipkinSingleTracer.js +51 -0
  23. package/esm/boot/buildEnv.js +1 -1
  24. package/esm/boot/rum.entry.js +55 -2
  25. package/esm/boot/rum.js +2 -2
  26. package/esm/core/boundedBuffer.js +20 -0
  27. package/esm/core/configuration.js +24 -3
  28. package/esm/core/dataMap.js +5 -1
  29. package/esm/core/transport.js +120 -70
  30. package/esm/core/xhrProxy.js +3 -2
  31. package/esm/helper/enums.js +8 -0
  32. package/esm/helper/utils.js +168 -5
  33. package/esm/rumEventsCollection/assembly.js +20 -3
  34. package/esm/rumEventsCollection/page/index.js +1 -11
  35. package/esm/rumEventsCollection/requestCollection.js +8 -2
  36. package/esm/rumEventsCollection/resource/resourceCollection.js +22 -2
  37. package/esm/rumEventsCollection/tracing/ddtraceTracer.js +42 -0
  38. package/esm/rumEventsCollection/tracing/jaegerTracer.js +50 -0
  39. package/esm/rumEventsCollection/tracing/skywalkingTracer.js +66 -0
  40. package/esm/rumEventsCollection/tracing/tracer.js +90 -0
  41. package/esm/rumEventsCollection/tracing/w3cTraceParentTracer.js +43 -0
  42. package/esm/rumEventsCollection/tracing/zipkinMultiTracer.js +50 -0
  43. package/esm/rumEventsCollection/tracing/zipkinSingleTracer.js +43 -0
  44. package/package.json +5 -1
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.clearTracingIfCancelled = clearTracingIfCancelled;
7
+ exports.startTracer = startTracer;
8
+ exports.injectHeadersIfTracingAllowed = injectHeadersIfTracingAllowed;
9
+
10
+ var _utils = require("../../helper/utils");
11
+
12
+ var _enums = require("../../helper/enums");
13
+
14
+ var _ddtraceTracer = require("./ddtraceTracer");
15
+
16
+ var _skywalkingTracer = require("./skywalkingTracer");
17
+
18
+ var _jaegerTracer = require("./jaegerTracer");
19
+
20
+ var _zipkinSingleTracer = require("./zipkinSingleTracer");
21
+
22
+ var _zipkinMultiTracer = require("./zipkinMultiTracer");
23
+
24
+ var _w3cTraceParentTracer = require("./w3cTraceParentTracer");
25
+
26
+ function clearTracingIfCancelled(context) {
27
+ if (context.status === 0) {
28
+ context.traceId = undefined;
29
+ context.spanId = undefined;
30
+ }
31
+ }
32
+
33
+ function startTracer(configuration) {
34
+ return {
35
+ clearTracingIfCancelled: clearTracingIfCancelled,
36
+ traceXhr: function traceXhr(context) {
37
+ return injectHeadersIfTracingAllowed(configuration, context, function (tracingHeaders) {
38
+ context.option = (0, _utils.extend)({}, context.option);
39
+ var header = {};
40
+
41
+ if (context.option.header) {
42
+ (0, _utils.each)(context.option.header, function (value, key) {
43
+ header[key] = value;
44
+ });
45
+ }
46
+
47
+ context.option.header = (0, _utils.extend)(header, tracingHeaders);
48
+ });
49
+ }
50
+ };
51
+ }
52
+
53
+ function isAllowedUrl(configuration, requestUrl) {
54
+ var requestOrigin = (0, _utils.getOrigin)(requestUrl);
55
+ var flag = false;
56
+ (0, _utils.each)(configuration.allowedTracingOrigins, function (allowedOrigin) {
57
+ if (requestOrigin === allowedOrigin || allowedOrigin instanceof RegExp && allowedOrigin.test(requestOrigin)) {
58
+ flag = true;
59
+ return false;
60
+ }
61
+ });
62
+ return flag;
63
+ }
64
+
65
+ function injectHeadersIfTracingAllowed(configuration, context, inject) {
66
+ if (!isAllowedUrl(configuration, context.url) || !configuration.traceType) {
67
+ return;
68
+ }
69
+
70
+ var tracer;
71
+
72
+ switch (configuration.traceType) {
73
+ case _enums.TraceType.DDTRACE:
74
+ tracer = new _ddtraceTracer.DDtraceTracer();
75
+ break;
76
+
77
+ case _enums.TraceType.SKYWALKING_V3:
78
+ tracer = new _skywalkingTracer.SkyWalkingTracer(configuration, context.url);
79
+ break;
80
+
81
+ case _enums.TraceType.ZIPKIN_MULTI_HEADER:
82
+ tracer = new _zipkinMultiTracer.ZipkinMultiTracer(configuration);
83
+ break;
84
+
85
+ case _enums.TraceType.JAEGER:
86
+ tracer = new _jaegerTracer.JaegerTracer(configuration);
87
+ break;
88
+
89
+ case _enums.TraceType.W3C_TRACEPARENT:
90
+ tracer = new _w3cTraceParentTracer.W3cTraceParentTracer(configuration);
91
+ break;
92
+
93
+ case _enums.TraceType.ZIPKIN_SINGLE_HEADER:
94
+ tracer = new _zipkinSingleTracer.ZipkinSingleTracer(configuration);
95
+ break;
96
+
97
+ default:
98
+ break;
99
+ }
100
+
101
+ if (!tracer || !tracer.isTracingSupported()) {
102
+ return;
103
+ }
104
+
105
+ context.traceId = tracer.getTraceId();
106
+ context.spanId = tracer.getSpanId();
107
+ inject(tracer.makeTracingHeaders());
108
+ }
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.W3cTraceParentTracer = W3cTraceParentTracer;
7
+
8
+ // === Generate a random 64-bit number in fixed-length hex format
9
+ function randomTraceId() {
10
+ var digits = '0123456789abcdef';
11
+ var n = '';
12
+
13
+ for (var i = 0; i < 16; i += 1) {
14
+ var rand = Math.floor(Math.random() * 16);
15
+ n += digits[rand];
16
+ }
17
+
18
+ return n;
19
+ }
20
+ /**
21
+ *
22
+ * @param {*} configuration 配置信息
23
+ */
24
+
25
+
26
+ function W3cTraceParentTracer(configuration) {
27
+ var rootSpanId = randomTraceId();
28
+ this._traceId = randomTraceId() + rootSpanId;
29
+ this._spanId = rootSpanId;
30
+ }
31
+
32
+ W3cTraceParentTracer.prototype = {
33
+ isTracingSupported: function isTracingSupported() {
34
+ return true;
35
+ },
36
+ getSpanId: function getSpanId() {
37
+ return this._spanId;
38
+ },
39
+ getTraceId: function getTraceId() {
40
+ return this._traceId;
41
+ },
42
+ getTraceParent: function getTraceParent() {
43
+ // '{version}-{traceId}-{spanId}-{sampleDecision}'
44
+ return '00-' + this._traceId + '-' + this._spanId + '-01';
45
+ },
46
+ makeTracingHeaders: function makeTracingHeaders() {
47
+ return {
48
+ 'traceparent': this.getTraceParent()
49
+ };
50
+ }
51
+ };
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ZipkinMultiTracer = ZipkinMultiTracer;
7
+
8
+ // === Generate a random 64-bit number in fixed-length hex format
9
+ function randomTraceId() {
10
+ var digits = '0123456789abcdef';
11
+ var n = '';
12
+
13
+ for (var i = 0; i < 16; i += 1) {
14
+ var rand = Math.floor(Math.random() * 16);
15
+ n += digits[rand];
16
+ }
17
+
18
+ return n;
19
+ }
20
+ /**
21
+ *
22
+ * @param {*} configuration 配置信息
23
+ */
24
+
25
+
26
+ function ZipkinMultiTracer(configuration) {
27
+ var rootSpanId = randomTraceId();
28
+
29
+ if (configuration.traceId128Bit) {
30
+ // 128bit生成traceid
31
+ this._traceId = randomTraceId() + rootSpanId;
32
+ } else {
33
+ this._traceId = rootSpanId;
34
+ }
35
+
36
+ this._spanId = rootSpanId;
37
+ }
38
+
39
+ ZipkinMultiTracer.prototype = {
40
+ isTracingSupported: function isTracingSupported() {
41
+ return true;
42
+ },
43
+ getSpanId: function getSpanId() {
44
+ return this._spanId;
45
+ },
46
+ getTraceId: function getTraceId() {
47
+ return this._traceId;
48
+ },
49
+ makeTracingHeaders: function makeTracingHeaders() {
50
+ return {
51
+ 'X-B3-TraceId': this.getTraceId(),
52
+ 'X-B3-SpanId': this.getSpanId(),
53
+ // 'X-B3-ParentSpanId': '',
54
+ 'X-B3-Sampled': '1' // 'X-B3-Flags': '0'
55
+
56
+ };
57
+ }
58
+ };
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ZipkinSingleTracer = ZipkinSingleTracer;
7
+
8
+ // === Generate a random 64-bit number in fixed-length hex format
9
+ function randomTraceId() {
10
+ var digits = '0123456789abcdef';
11
+ var n = '';
12
+
13
+ for (var i = 0; i < 16; i += 1) {
14
+ var rand = Math.floor(Math.random() * 16);
15
+ n += digits[rand];
16
+ }
17
+
18
+ return n;
19
+ }
20
+ /**
21
+ *
22
+ * @param {*} configuration 配置信息
23
+ */
24
+
25
+
26
+ function ZipkinSingleTracer(configuration) {
27
+ var rootSpanId = randomTraceId();
28
+ this._traceId = randomTraceId() + rootSpanId;
29
+ this._spanId = rootSpanId;
30
+ }
31
+
32
+ ZipkinSingleTracer.prototype = {
33
+ isTracingSupported: function isTracingSupported() {
34
+ return true;
35
+ },
36
+ getSpanId: function getSpanId() {
37
+ return this._spanId;
38
+ },
39
+ getTraceId: function getTraceId() {
40
+ return this._traceId;
41
+ },
42
+ getB3Str: function getB3Str() {
43
+ //{TraceId}-{SpanId}-{SamplingState}-{ParentSpanId}
44
+ return this._traceId + '-' + this._spanId + '-1';
45
+ },
46
+ makeTracingHeaders: function makeTracingHeaders() {
47
+ return {
48
+ 'b3': this.getB3Str()
49
+ };
50
+ }
51
+ };
@@ -1,4 +1,4 @@
1
1
  export var buildEnv = {
2
- sdkVersion: '1.0.1',
2
+ sdkVersion: '2.0.1',
3
3
  sdkName: 'df_uniapp_rum_sdk'
4
4
  };
@@ -1,7 +1,17 @@
1
- import { isPercentage } from '../helper/utils';
1
+ import { isPercentage, extend2Lev, createContextManager } from '../helper/utils';
2
2
  import { startRum } from './rum';
3
3
  export var makeRum = function makeRum(startRumImpl) {
4
4
  var isAlreadyInitialized = false;
5
+ var globalContextManager = createContextManager();
6
+ var user = {};
7
+
8
+ function clonedCommonContext() {
9
+ return extend2Lev({}, {
10
+ context: globalContextManager.get(),
11
+ user: user
12
+ });
13
+ }
14
+
5
15
  var rumGlobal = {
6
16
  init: function init(Vue, userConfiguration) {
7
17
  if (typeof userConfiguration === 'undefined') {
@@ -14,8 +24,29 @@ export var makeRum = function makeRum(startRumImpl) {
14
24
  return;
15
25
  }
16
26
 
17
- startRumImpl(Vue, userConfiguration);
27
+ startRumImpl(Vue, userConfiguration, function () {
28
+ return {
29
+ user: user,
30
+ context: globalContextManager.get()
31
+ };
32
+ });
18
33
  isAlreadyInitialized = true;
34
+ },
35
+ addRumGlobalContext: globalContextManager.add,
36
+ removeRumGlobalContext: globalContextManager.remove,
37
+ getRumGlobalContext: globalContextManager.get,
38
+ setRumGlobalContext: globalContextManager.set,
39
+ setUser: function setUser(newUser) {
40
+ var sanitizedUser = sanitizeUser(newUser);
41
+
42
+ if (sanitizedUser) {
43
+ user = sanitizedUser;
44
+ } else {
45
+ console.error('Unsupported user:', newUser);
46
+ }
47
+ },
48
+ removeUser: function removeUser() {
49
+ user = {};
19
50
  }
20
51
  };
21
52
  return rumGlobal;
@@ -43,5 +74,27 @@ export var makeRum = function makeRum(startRumImpl) {
43
74
 
44
75
  return true;
45
76
  }
77
+
78
+ function sanitizeUser(newUser) {
79
+ if (typeof newUser !== 'object' || !newUser) {
80
+ return;
81
+ }
82
+
83
+ var result = extend2Lev({}, newUser);
84
+
85
+ if ('id' in result) {
86
+ result.id = String(result.id);
87
+ }
88
+
89
+ if ('name' in result) {
90
+ result.name = String(result.name);
91
+ }
92
+
93
+ if ('email' in result) {
94
+ result.email = String(result.email);
95
+ }
96
+
97
+ return result;
98
+ }
46
99
  };
47
100
  export var datafluxRum = makeRum(startRum);
package/esm/boot/rum.js CHANGED
@@ -13,12 +13,12 @@ import { startPagePerformanceObservable } from '../rumEventsCollection/performan
13
13
  import { startSetDataColloction } from '../rumEventsCollection/setDataCollection';
14
14
  import { startActionCollection } from '../rumEventsCollection/action/actionCollection';
15
15
  import { sdk } from '../core/sdk';
16
- export var startRum = function startRum(Vue, userConfiguration) {
16
+ export var startRum = function startRum(Vue, userConfiguration, getCommonContext) {
17
17
  var configuration = commonInit(userConfiguration, buildEnv);
18
18
  var lifeCycle = new LifeCycle();
19
19
  var parentContexts = startParentContexts(lifeCycle);
20
20
  var batch = startRumBatch(configuration, lifeCycle);
21
- startRumAssembly(userConfiguration.applicationId, configuration, lifeCycle, parentContexts);
21
+ startRumAssembly(userConfiguration.applicationId, configuration, lifeCycle, parentContexts, getCommonContext);
22
22
  startAppCollection(lifeCycle, configuration);
23
23
  startResourceCollection(lifeCycle, configuration);
24
24
  startViewCollection(lifeCycle, configuration, Vue);
@@ -0,0 +1,20 @@
1
+ var _BoundedBuffer = function _BoundedBuffer() {
2
+ this.buffer = [];
3
+ };
4
+
5
+ _BoundedBuffer.prototype = {
6
+ add: function add(item) {
7
+ var length = this.buffer.push(item);
8
+
9
+ if (length > this.limit) {
10
+ this.buffer.splice(0, 1);
11
+ }
12
+ },
13
+ drain: function drain(fn) {
14
+ this.buffer.forEach(function (item) {
15
+ fn(item);
16
+ });
17
+ this.buffer.length = 0;
18
+ }
19
+ };
20
+ export var BoundedBuffer = _BoundedBuffer;
@@ -1,5 +1,5 @@
1
- import { extend2Lev, urlParse } from '../helper/utils';
2
- import { ONE_KILO_BYTE, ONE_SECOND } from '../helper/enums';
1
+ import { extend2Lev, urlParse, values } from '../helper/utils';
2
+ import { ONE_KILO_BYTE, ONE_SECOND, TraceType } from '../helper/enums';
3
3
  var TRIM_REGIX = /^\s+|\s+$/g;
4
4
  export var DEFAULT_CONFIGURATION = {
5
5
  sampleRate: 100,
@@ -23,7 +23,11 @@ export var DEFAULT_CONFIGURATION = {
23
23
  * arbitrary value, byte precision not needed
24
24
  */
25
25
  requestErrorResponseLengthLimit: 32 * ONE_KILO_BYTE,
26
- trackInteractions: false
26
+ trackInteractions: false,
27
+ traceType: TraceType.DDTRACE,
28
+ traceId128Bit: false,
29
+ allowedTracingOrigins: [] // 新增
30
+
27
31
  };
28
32
 
29
33
  function trim(str) {
@@ -50,9 +54,26 @@ export function commonInit(userConfiguration, buildEnv) {
50
54
  transportConfiguration.trackInteractions = !!userConfiguration.trackInteractions;
51
55
  }
52
56
 
57
+ if ('allowedTracingOrigins' in userConfiguration) {
58
+ transportConfiguration.allowedTracingOrigins = userConfiguration.allowedTracingOrigins;
59
+ }
60
+
61
+ if ('traceId128Bit' in userConfiguration) {
62
+ transportConfiguration.traceId128Bit = !!userConfiguration.traceId128Bit;
63
+ }
64
+
65
+ if ('traceType' in userConfiguration && hasTraceType(userConfiguration.traceType)) {
66
+ transportConfiguration.traceType = userConfiguration.traceType;
67
+ }
68
+
53
69
  return extend2Lev(DEFAULT_CONFIGURATION, transportConfiguration);
54
70
  }
55
71
 
72
+ function hasTraceType(traceType) {
73
+ if (traceType && values(TraceType).indexOf(traceType) > -1) return true;
74
+ return false;
75
+ }
76
+
56
77
  var haveSameOrigin = function haveSameOrigin(url1, url2) {
57
78
  var parseUrl1 = urlParse(url1).getParse();
58
79
  var parseUrl2 = urlParse(url2).getParse();
@@ -6,7 +6,9 @@ export var commonTags = {
6
6
  app_id: 'application.id',
7
7
  env: '_dd.env',
8
8
  version: '_dd.version',
9
- userid: 'user.user_id',
9
+ userid: 'user.id',
10
+ user_email: 'user.email',
11
+ user_name: 'user.name',
10
12
  session_id: 'session.id',
11
13
  session_type: 'session.type',
12
14
  is_signin: 'user.is_signin',
@@ -50,6 +52,8 @@ export var dataMap = {
50
52
  resource: {
51
53
  type: RumEventType.RESOURCE,
52
54
  tags: {
55
+ trace_id: '_dd.trace_id',
56
+ span_id: '_dd.span_id',
53
57
  resource_type: 'resource.type',
54
58
  resource_status: 'resource.status',
55
59
  resource_status_group: 'resource.status_group',
@@ -1,9 +1,11 @@
1
- import { findByPath, escapeRowData, isNumber, each, isString, values, extend } from '../helper/utils';
1
+ import { findByPath, escapeRowData, isNumber, each, isString, values, extend, isObject, isEmptyObject, isArray, isBoolean, toServerDuration } from '../helper/utils';
2
2
  import { sdk } from '../core/sdk';
3
3
  import { LifeCycleEventType } from '../core/lifeCycle';
4
- import { commonTags, dataMap } from './dataMap'; // https://en.wikipedia.org/wiki/UTF-8
4
+ import { commonTags, dataMap } from './dataMap';
5
+ import { RumEventType } from '../helper/enums'; // https://en.wikipedia.org/wiki/UTF-8
5
6
 
6
7
  var HAS_MULTI_BYTES_CHARACTERS = /[^\u0000-\u007F]/;
8
+ var CUSTOM_KEYS = 'custom_keys';
7
9
 
8
10
  function addBatchPrecision(url) {
9
11
  if (!url) return url;
@@ -29,6 +31,121 @@ httpRequest.prototype = {
29
31
  }
30
32
  };
31
33
  export var HttpRequest = httpRequest;
34
+ export var processedMessageByDataMap = function processedMessageByDataMap(message) {
35
+ if (!message || !message.type) return {
36
+ rowStr: '',
37
+ rowData: undefined
38
+ };
39
+ var rowData = {
40
+ tags: {},
41
+ fields: {}
42
+ };
43
+ var hasFileds = false;
44
+ var rowStr = '';
45
+ each(dataMap, function (value, key) {
46
+ if (value.type === message.type) {
47
+ if (value.alias_key) {
48
+ rowStr += value.alias_key + ',';
49
+ } else {
50
+ rowStr += key + ',';
51
+ }
52
+
53
+ rowData.measurement = key;
54
+ var tagsStr = [];
55
+ var tags = extend({}, commonTags, value.tags);
56
+ var filterFileds = ['date', 'type']; // 已经在datamap中定义过的fields和tags
57
+
58
+ each(tags, function (value_path, _key) {
59
+ var _value = findByPath(message, value_path);
60
+
61
+ filterFileds.push(_key);
62
+
63
+ if (_value || isNumber(_value)) {
64
+ rowData.tags[_key] = _value;
65
+ tagsStr.push(escapeRowData(_key) + '=' + escapeRowData(_value));
66
+ }
67
+ });
68
+
69
+ if (message.tags && isObject(message.tags) && !isEmptyObject(message.tags)) {
70
+ // 自定义tag
71
+ var _tagKeys = [];
72
+ each(message.tags, function (_value, _key) {
73
+ // 如果和之前tag重名,则舍弃
74
+ if (filterFileds.indexOf(_key) > -1) return;
75
+ filterFileds.push(_key);
76
+
77
+ if (_value || isNumber(_value)) {
78
+ _tagKeys.push(_key);
79
+
80
+ rowData.tags[_key] = _value;
81
+ tagsStr.push(escapeRowData(_key) + '=' + escapeRowData(_value));
82
+ }
83
+ });
84
+
85
+ if (_tagKeys.length) {
86
+ rowData.tags[CUSTOM_KEYS] = _tagKeys;
87
+ tagsStr.push(escapeRowData(CUSTOM_KEYS) + '=' + escapeRowData(_tagKeys));
88
+ }
89
+ }
90
+
91
+ var fieldsStr = [];
92
+ each(value.fields, function (_value, _key) {
93
+ if (isArray(_value) && _value.length === 2) {
94
+ var type = _value[0],
95
+ value_path = _value[1];
96
+
97
+ var _valueData = findByPath(message, value_path);
98
+
99
+ filterFileds.push(_key);
100
+
101
+ if (_valueData || isNumber(_valueData)) {
102
+ rowData.fields[_key] = _valueData; // 这里不需要转译
103
+
104
+ _valueData = type === 'string' ? '"' + _valueData.replace(/[\\]*"/g, '"').replace(/"/g, '\\"') + '"' : escapeRowData(_valueData);
105
+ fieldsStr.push(escapeRowData(_key) + '=' + _valueData);
106
+ }
107
+ } else if (isString(_value)) {
108
+ var _valueData = findByPath(message, _value);
109
+
110
+ filterFileds.push(_key);
111
+
112
+ if (_valueData || isNumber(_valueData)) {
113
+ rowData.fields[_key] = _valueData; // 这里不需要转译
114
+
115
+ _valueData = escapeRowData(_valueData);
116
+ fieldsStr.push(escapeRowData(_key) + '=' + _valueData);
117
+ }
118
+ }
119
+ });
120
+
121
+ if (message.type === RumEventType.LOGGER) {
122
+ // 这里处理日志类型数据自定义字段
123
+ each(message, function (value, key) {
124
+ if (filterFileds.indexOf(key) === -1 && (isNumber(value) || isString(value) || isBoolean(value))) {
125
+ tagsStr.push(escapeRowData(key) + '=' + escapeRowData(value));
126
+ }
127
+ });
128
+ }
129
+
130
+ if (tagsStr.length) {
131
+ rowStr += tagsStr.join(',');
132
+ }
133
+
134
+ if (fieldsStr.length) {
135
+ rowStr += ' ';
136
+ rowStr += fieldsStr.join(',');
137
+ hasFileds = true;
138
+ }
139
+
140
+ rowStr = rowStr + ' ' + message.date;
141
+ rowData.time = toServerDuration(message.date); // 这里不需要转译
142
+ }
143
+ });
144
+ return {
145
+ rowStr: hasFileds ? rowStr : '',
146
+ rowData: hasFileds ? rowData : undefined
147
+ };
148
+ };
32
149
 
33
150
  function batch(request, maxSize, bytesLimit, maxMessageSize, flushTimeout, lifeCycle) {
34
151
  this.request = request;
@@ -63,74 +180,7 @@ batch.prototype = {
63
180
  }
64
181
  },
65
182
  processSendData: function processSendData(message) {
66
- // var data = safeJSONParse(message)
67
- if (!message || !message.type) return '';
68
- var rowStr = '';
69
- var hasFileds = false;
70
- each(dataMap, function (value, key) {
71
- if (value.type === message.type) {
72
- // 做一下别名处理
73
- if (value.alias_key) {
74
- rowStr += value.alias_key + ',';
75
- } else {
76
- rowStr += key + ',';
77
- }
78
-
79
- var tagsStr = [];
80
- var tags = extend({}, commonTags, value.tags);
81
- each(tags, function (value_path, _key) {
82
- var _value = findByPath(message, value_path);
83
-
84
- if (_value || isNumber(_value)) {
85
- tagsStr.push(escapeRowData(_key) + '=' + escapeRowData(_value));
86
- }
87
- });
88
-
89
- if (message.tags.length) {
90
- // 自定义tag
91
- each(message.tags, function (_value, _key) {
92
- if (_value || isNumber(_value)) {
93
- tagsStr.push(escapeRowData(_key) + '=' + escapeRowData(_value));
94
- }
95
- });
96
- }
97
-
98
- var fieldsStr = [];
99
- each(value.fields, function (_value, _key) {
100
- if (Array.isArray(_value) && _value.length === 2) {
101
- var type = _value[0],
102
- value_path = _value[1];
103
-
104
- var _valueData = findByPath(message, value_path);
105
-
106
- if (_valueData || isNumber(_valueData)) {
107
- _valueData = type === 'string' ? '"' + String(_valueData).replace(/[\\]*"/g, '"').replace(/"/g, '\\"') + '"' : escapeRowData(_valueData);
108
- fieldsStr.push(escapeRowData(_key) + '=' + _valueData);
109
- }
110
- } else if (isString(_value)) {
111
- var _valueData = findByPath(message, _value);
112
-
113
- if (_valueData || isNumber(_valueData)) {
114
- _valueData = escapeRowData(_valueData);
115
- fieldsStr.push(escapeRowData(_key) + '=' + _valueData);
116
- }
117
- }
118
- });
119
-
120
- if (tagsStr.length) {
121
- rowStr += tagsStr.join(',');
122
- }
123
-
124
- if (fieldsStr.length) {
125
- rowStr += ' ';
126
- rowStr += fieldsStr.join(',');
127
- hasFileds = true;
128
- }
129
-
130
- rowStr = rowStr + ' ' + message.date;
131
- }
132
- });
133
- return hasFileds ? rowStr : '';
183
+ return processedMessageByDataMap(message).rowStr;
134
184
  },
135
185
  sizeInBytes: function sizeInBytes(candidate) {
136
186
  // Accurate byte size computations can degrade performances when there is a lot of events to process
@@ -40,7 +40,8 @@ function proxyXhr() {
40
40
  startTime: 0,
41
41
  url: arguments[0].url,
42
42
  type: RequestType.XHR,
43
- responseType: arguments[0].responseType || 'text'
43
+ responseType: arguments[0].responseType || 'text',
44
+ option: arguments[0]
44
45
  };
45
46
  dataflux_xhr.startTime = now();
46
47
  var originalSuccess = arguments[0].success;
@@ -84,6 +85,6 @@ function proxyXhr() {
84
85
  beforeSendCallbacks.forEach(function (callback) {
85
86
  callback(dataflux_xhr);
86
87
  });
87
- return originalXhrRequest.apply(this, arguments);
88
+ return originalXhrRequest.call(this, dataflux_xhr.option);
88
89
  };
89
90
  }