@cloudcare/rum-uniapp 1.0.2 → 2.0.2

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 (68) hide show
  1. package/README.md +11 -8
  2. package/cjs/boot/buildEnv.js +1 -1
  3. package/cjs/boot/rum.entry.js +65 -2
  4. package/cjs/boot/rum.js +11 -2
  5. package/cjs/core/baseInfo.js +0 -6
  6. package/cjs/core/boundedBuffer.js +28 -0
  7. package/cjs/core/configuration.js +26 -1
  8. package/cjs/core/dataMap.js +5 -1
  9. package/cjs/core/errorCollection.js +5 -6
  10. package/cjs/core/errorFilter.js +47 -0
  11. package/cjs/core/errorTools.js +2 -1
  12. package/cjs/core/lifeCycle.js +1 -0
  13. package/cjs/core/sdk.js +0 -1
  14. package/cjs/core/sessionManagement.js +45 -0
  15. package/cjs/core/transport.js +114 -69
  16. package/cjs/core/xhrProxy.js +3 -2
  17. package/cjs/helper/enums.js +20 -6
  18. package/cjs/helper/limitModification.js +83 -0
  19. package/cjs/helper/tracekit.js +1 -1
  20. package/cjs/helper/utils.js +274 -6
  21. package/cjs/rumEventsCollection/app/appCollection.js +0 -1
  22. package/cjs/rumEventsCollection/assembly.js +41 -14
  23. package/cjs/rumEventsCollection/error/errorCollection.js +37 -5
  24. package/cjs/rumEventsCollection/internalContext.js +34 -0
  25. package/cjs/rumEventsCollection/page/index.js +2 -11
  26. package/cjs/rumEventsCollection/requestCollection.js +9 -2
  27. package/cjs/rumEventsCollection/resource/resourceCollection.js +20 -2
  28. package/cjs/rumEventsCollection/tracing/ddtraceTracer.js +50 -0
  29. package/cjs/rumEventsCollection/tracing/jaegerTracer.js +58 -0
  30. package/cjs/rumEventsCollection/tracing/skywalkingTracer.js +75 -0
  31. package/cjs/rumEventsCollection/tracing/tracer.js +108 -0
  32. package/cjs/rumEventsCollection/tracing/w3cTraceParentTracer.js +51 -0
  33. package/cjs/rumEventsCollection/tracing/zipkinMultiTracer.js +58 -0
  34. package/cjs/rumEventsCollection/tracing/zipkinSingleTracer.js +51 -0
  35. package/esm/boot/buildEnv.js +1 -1
  36. package/esm/boot/rum.entry.js +64 -3
  37. package/esm/boot/rum.js +9 -2
  38. package/esm/core/baseInfo.js +0 -5
  39. package/esm/core/boundedBuffer.js +20 -0
  40. package/esm/core/configuration.js +28 -3
  41. package/esm/core/dataMap.js +5 -1
  42. package/esm/core/errorCollection.js +5 -6
  43. package/esm/core/errorFilter.js +38 -0
  44. package/esm/core/errorTools.js +2 -1
  45. package/esm/core/lifeCycle.js +1 -0
  46. package/esm/core/sdk.js +0 -1
  47. package/esm/core/sessionManagement.js +20 -0
  48. package/esm/core/transport.js +111 -70
  49. package/esm/core/xhrProxy.js +3 -2
  50. package/esm/helper/enums.js +14 -1
  51. package/esm/helper/limitModification.js +57 -0
  52. package/esm/helper/tracekit.js +1 -1
  53. package/esm/helper/utils.js +236 -5
  54. package/esm/rumEventsCollection/app/appCollection.js +0 -1
  55. package/esm/rumEventsCollection/assembly.js +40 -15
  56. package/esm/rumEventsCollection/error/errorCollection.js +36 -5
  57. package/esm/rumEventsCollection/internalContext.js +27 -0
  58. package/esm/rumEventsCollection/page/index.js +2 -11
  59. package/esm/rumEventsCollection/requestCollection.js +8 -2
  60. package/esm/rumEventsCollection/resource/resourceCollection.js +21 -3
  61. package/esm/rumEventsCollection/tracing/ddtraceTracer.js +42 -0
  62. package/esm/rumEventsCollection/tracing/jaegerTracer.js +50 -0
  63. package/esm/rumEventsCollection/tracing/skywalkingTracer.js +66 -0
  64. package/esm/rumEventsCollection/tracing/tracer.js +90 -0
  65. package/esm/rumEventsCollection/tracing/w3cTraceParentTracer.js +43 -0
  66. package/esm/rumEventsCollection/tracing/zipkinMultiTracer.js +50 -0
  67. package/esm/rumEventsCollection/tracing/zipkinSingleTracer.js +43 -0
  68. package/package.json +5 -1
package/README.md CHANGED
@@ -37,14 +37,17 @@ datafluxRum.init({
37
37
 
38
38
  ### 初始化参数
39
39
 
40
- | 参数 | 类型 | 是否必须 | 默认值 | 描述 |
41
- | ------------------- | ------- | -------- | ------- | ------------------------------------------------------------------------------------------------------------ |
42
- | `applicationId` | String | 是 | | 从 dataflux 创建的应用 ID |
43
- | `datakitOrigin` | String | 是 | | datakit 数据上报 Origin;`注意:需要在小程序管理后台加上request白名单` |
44
- | `env` | String | 否 | | 小程序 应用当前环境, 如 prod:线上环境;gray:灰度环境;pre:预发布环境 common:日常环境;local:本地环境; |
45
- | `version` | String | 否 | | 小程序 应用的版本号 |
46
- | `sampleRate` | Number | 否 | `100` | 指标数据收集百分比: `100`表示全收集,`0`表示不收集 |
47
- | `trackInteractions` | Boolean | 否 | `false` | 是否开启用户行为采集 |
40
+ | 参数 | 类型 | 是否必须 | 默认值 | 描述 |
41
+ | ----------------------------------------------- | ------- | -------- | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
42
+ | `applicationId` | String | 是 | | 从 dataflux 创建的应用 ID |
43
+ | `datakitOrigin` | String | 是 | | datakit 数据上报 Origin;`注意:需要在小程序管理后台加上request白名单` |
44
+ | `env` | String | 否 | | 小程序 应用当前环境, 如 prod:线上环境;gray:灰度环境;pre:预发布环境 common:日常环境;local:本地环境; |
45
+ | `version` | String | 否 | | 小程序 应用的版本号 |
46
+ | `sampleRate` | Number | 否 | `100` | 指标数据收集百分比: `100`表示全收集,`0`表示不收集 |
47
+ | `traceType` $\color{#FF0000}{新增}$ | Enum | 否 | `ddtrace` | 与 APM 采集工具连接的请求header类型,目前兼容的类型包括:`ddtrace`、`zipkin`、`skywalking_v3`、`jaeger`、`zipkin_single_header`、`w3c_traceparent`。*注: opentelemetry 支持 `zipkin_single_header`,`w3c_traceparent`,`zipkin`三种类型* |
48
+ | `traceId128Bit` $\color{#FF0000}{新增}$ | Boolean | 否 | `false` | 是否以128位的方式生成 `traceID`,与`traceType` 对应,目前支持类型 `zipkin`、`jaeger` |
49
+ | `allowedTracingOrigins` $\color{#FF0000}{新增}$ | Array | 否 | `[]` | 允许注入 `trace` 采集器所需header头部的所有请求列表。可以是请求的origin,也可以是是正则,origin: `协议(包括://),域名(或IP地址)[和端口号]` 例如:`["https://api.example.com", /https:\/\/.*\.my-api-domain\.com/]` |
50
+ | `trackInteractions` | Boolean | 否 | `false` | 是否开启用户行为采集 |
48
51
 
49
52
  ## 注意事项
50
53
 
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.buildEnv = void 0;
7
7
  var buildEnv = {
8
- sdkVersion: '1.0.2',
8
+ sdkVersion: '2.0.2',
9
9
  sdkName: 'df_uniapp_rum_sdk'
10
10
  };
11
11
  exports.buildEnv = buildEnv;
@@ -9,8 +9,22 @@ var _utils = require("../helper/utils");
9
9
 
10
10
  var _rum = require("./rum");
11
11
 
12
+ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
13
+
12
14
  var makeRum = function makeRum(startRumImpl) {
13
15
  var isAlreadyInitialized = false;
16
+ var globalContextManager = (0, _utils.createContextManager)();
17
+ var user = {};
18
+
19
+ var _getInternalContext = function getInternalContext() {};
20
+
21
+ function clonedCommonContext() {
22
+ return (0, _utils.extend2Lev)({}, {
23
+ context: globalContextManager.get(),
24
+ user: user
25
+ });
26
+ }
27
+
14
28
  var rumGlobal = {
15
29
  init: function init(Vue, userConfiguration) {
16
30
  if (typeof userConfiguration === 'undefined') {
@@ -23,8 +37,34 @@ var makeRum = function makeRum(startRumImpl) {
23
37
  return;
24
38
  }
25
39
 
26
- startRumImpl(Vue, userConfiguration);
40
+ var _startRumImpl = startRumImpl(Vue, userConfiguration, function () {
41
+ return {
42
+ user: user,
43
+ context: globalContextManager.get()
44
+ };
45
+ });
46
+
47
+ _getInternalContext = _startRumImpl.getInternalContext;
27
48
  isAlreadyInitialized = true;
49
+ },
50
+ getInternalContext: function getInternalContext(startTime) {
51
+ return _getInternalContext(startTime);
52
+ },
53
+ addRumGlobalContext: globalContextManager.add,
54
+ removeRumGlobalContext: globalContextManager.remove,
55
+ getRumGlobalContext: globalContextManager.get,
56
+ setRumGlobalContext: globalContextManager.set,
57
+ setUser: function setUser(newUser) {
58
+ var sanitizedUser = sanitizeUser(newUser);
59
+
60
+ if (sanitizedUser) {
61
+ user = sanitizedUser;
62
+ } else {
63
+ console.error('Unsupported user:', newUser);
64
+ }
65
+ },
66
+ removeUser: function removeUser() {
67
+ user = {};
28
68
  }
29
69
  };
30
70
  return rumGlobal;
@@ -52,8 +92,31 @@ var makeRum = function makeRum(startRumImpl) {
52
92
 
53
93
  return true;
54
94
  }
95
+
96
+ function sanitizeUser(newUser) {
97
+ if (_typeof(newUser) !== 'object' || !newUser) {
98
+ return;
99
+ }
100
+
101
+ var result = (0, _utils.extend2Lev)({}, newUser);
102
+
103
+ if ('id' in result) {
104
+ result.id = String(result.id);
105
+ }
106
+
107
+ if ('name' in result) {
108
+ result.name = String(result.name);
109
+ }
110
+
111
+ if ('email' in result) {
112
+ result.email = String(result.email);
113
+ }
114
+
115
+ return result;
116
+ }
55
117
  };
56
118
 
57
119
  exports.makeRum = makeRum;
58
120
  var datafluxRum = makeRum(_rum.startRum);
59
- exports.datafluxRum = datafluxRum;
121
+ exports.datafluxRum = datafluxRum;
122
+ (0, _utils.defineGlobal)((0, _utils.getGlobalObject)(), 'DATAFLUX_RUM_MIN', datafluxRum);
package/cjs/boot/rum.js CHANGED
@@ -33,14 +33,19 @@ var _setDataCollection = require("../rumEventsCollection/setDataCollection");
33
33
 
34
34
  var _actionCollection = require("../rumEventsCollection/action/actionCollection");
35
35
 
36
+ var _sessionManagement = require("../core/sessionManagement");
37
+
38
+ var _internalContext = require("../rumEventsCollection/internalContext");
39
+
36
40
  var _sdk = require("../core/sdk");
37
41
 
38
- var startRum = function startRum(Vue, userConfiguration) {
42
+ var startRum = function startRum(Vue, userConfiguration, getCommonContext) {
39
43
  var configuration = (0, _configuration.commonInit)(userConfiguration, _buildEnv.buildEnv);
40
44
  var lifeCycle = new _lifeCycle.LifeCycle();
41
45
  var parentContexts = (0, _parentContexts.startParentContexts)(lifeCycle);
42
46
  var batch = (0, _batch.startRumBatch)(configuration, lifeCycle);
43
- (0, _assembly.startRumAssembly)(userConfiguration.applicationId, configuration, lifeCycle, parentContexts);
47
+ var session = new _sessionManagement.sessionManagement(configuration);
48
+ (0, _assembly.startRumAssembly)(userConfiguration.applicationId, configuration, session, lifeCycle, parentContexts, getCommonContext);
44
49
  (0, _appCollection.startAppCollection)(lifeCycle, configuration);
45
50
  (0, _resourceCollection.startResourceCollection)(lifeCycle, configuration);
46
51
  (0, _viewCollection.startViewCollection)(lifeCycle, configuration, Vue);
@@ -49,6 +54,10 @@ var startRum = function startRum(Vue, userConfiguration) {
49
54
  (0, _performanceCollection.startPagePerformanceObservable)(lifeCycle, configuration);
50
55
  (0, _setDataCollection.startSetDataColloction)(lifeCycle, Vue);
51
56
  (0, _actionCollection.startActionCollection)(lifeCycle, configuration, Vue);
57
+ var internalContext = (0, _internalContext.startInternalContext)(userConfiguration.applicationId, session, parentContexts);
58
+ return {
59
+ getInternalContext: internalContext.get
60
+ };
52
61
  };
53
62
 
54
63
  exports.startRum = startRum;
@@ -21,7 +21,6 @@ var BaseInfo = /*#__PURE__*/function () {
21
21
  function BaseInfo() {
22
22
  _classCallCheck(this, BaseInfo);
23
23
 
24
- this.sessionId = (0, _utils.UUID)();
25
24
  this.getDeviceInfo();
26
25
  this.getNetWork();
27
26
  }
@@ -88,11 +87,6 @@ var BaseInfo = /*#__PURE__*/function () {
88
87
  _this.deviceInfo.network = e.networkType ? e.networkType : 'unknown';
89
88
  });
90
89
  }
91
- }, {
92
- key: "getSessionId",
93
- value: function getSessionId() {
94
- return this.sessionId;
95
- }
96
90
  }]);
97
91
 
98
92
  return BaseInfo;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.BoundedBuffer = void 0;
7
+
8
+ var _BoundedBuffer = function _BoundedBuffer() {
9
+ this.buffer = [];
10
+ };
11
+
12
+ _BoundedBuffer.prototype = {
13
+ add: function add(item) {
14
+ var length = this.buffer.push(item);
15
+
16
+ if (length > this.limit) {
17
+ this.buffer.splice(0, 1);
18
+ }
19
+ },
20
+ drain: function drain(fn) {
21
+ this.buffer.forEach(function (item) {
22
+ fn(item);
23
+ });
24
+ this.buffer.length = 0;
25
+ }
26
+ };
27
+ var BoundedBuffer = _BoundedBuffer;
28
+ exports.BoundedBuffer = BoundedBuffer;
@@ -34,7 +34,11 @@ var DEFAULT_CONFIGURATION = {
34
34
  * arbitrary value, byte precision not needed
35
35
  */
36
36
  requestErrorResponseLengthLimit: 32 * _enums.ONE_KILO_BYTE,
37
- trackInteractions: false
37
+ trackInteractions: false,
38
+ traceType: _enums.TraceType.DDTRACE,
39
+ traceId128Bit: false,
40
+ allowedTracingOrigins: [] // 新增
41
+
38
42
  };
39
43
  exports.DEFAULT_CONFIGURATION = DEFAULT_CONFIGURATION;
40
44
 
@@ -62,9 +66,30 @@ function commonInit(userConfiguration, buildEnv) {
62
66
  transportConfiguration.trackInteractions = !!userConfiguration.trackInteractions;
63
67
  }
64
68
 
69
+ if ('allowedTracingOrigins' in userConfiguration) {
70
+ transportConfiguration.allowedTracingOrigins = userConfiguration.allowedTracingOrigins;
71
+ }
72
+
73
+ if ('traceId128Bit' in userConfiguration) {
74
+ transportConfiguration.traceId128Bit = !!userConfiguration.traceId128Bit;
75
+ }
76
+
77
+ if ('traceType' in userConfiguration && hasTraceType(userConfiguration.traceType)) {
78
+ transportConfiguration.traceType = userConfiguration.traceType;
79
+ }
80
+
81
+ if ('sampleRate' in userConfiguration) {
82
+ transportConfiguration.sampleRate = userConfiguration.sampleRate;
83
+ }
84
+
65
85
  return (0, _utils.extend2Lev)(DEFAULT_CONFIGURATION, transportConfiguration);
66
86
  }
67
87
 
88
+ function hasTraceType(traceType) {
89
+ if (traceType && (0, _utils.values)(_enums.TraceType).indexOf(traceType) > -1) return true;
90
+ return false;
91
+ }
92
+
68
93
  var haveSameOrigin = function haveSameOrigin(url1, url2) {
69
94
  var parseUrl1 = (0, _utils.urlParse)(url1).getParse();
70
95
  var parseUrl2 = (0, _utils.urlParse)(url2).getParse();
@@ -14,7 +14,9 @@ var commonTags = {
14
14
  app_id: 'application.id',
15
15
  env: '_dd.env',
16
16
  version: '_dd.version',
17
- userid: 'user.user_id',
17
+ userid: 'user.id',
18
+ user_email: 'user.email',
19
+ user_name: 'user.name',
18
20
  session_id: 'session.id',
19
21
  session_type: 'session.type',
20
22
  is_signin: 'user.is_signin',
@@ -59,6 +61,8 @@ var dataMap = {
59
61
  resource: {
60
62
  type: _enums.RumEventType.RESOURCE,
61
63
  tags: {
64
+ trace_id: '_dd.trace_id',
65
+ span_id: '_dd.span_id',
62
66
  resource_type: 'resource.type',
63
67
  resource_status: 'resource.status',
64
68
  resource_status_group: 'resource.status_group',
@@ -106,18 +106,17 @@ function stopRuntimeErrorTracking() {
106
106
  _tracekit.report.unsubscribe(traceKitReportHandler);
107
107
  }
108
108
 
109
- var filteredErrorsObservable;
109
+ var errorObservable;
110
110
 
111
111
  function startAutomaticErrorCollection(configuration) {
112
- if (!filteredErrorsObservable) {
113
- var errorObservable = new _observable.Observable();
112
+ if (!errorObservable) {
113
+ errorObservable = new _observable.Observable();
114
114
  trackNetworkError(configuration, errorObservable);
115
115
  startConsoleTracking(errorObservable);
116
- startRuntimeErrorTracking(errorObservable);
117
- filteredErrorsObservable = filterErrors(configuration, errorObservable);
116
+ startRuntimeErrorTracking(errorObservable); // filteredErrorsObservable = filterErrors(configuration, errorObservable)
118
117
  }
119
118
 
120
- return filteredErrorsObservable;
119
+ return errorObservable;
121
120
  }
122
121
 
123
122
  function trackNetworkError(configuration, errorObservable) {
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createErrorFilter = createErrorFilter;
7
+
8
+ var _errorTools = require("./errorTools");
9
+
10
+ var _utils = require("../helper/utils");
11
+
12
+ function createErrorFilter(configuration, onLimitReached) {
13
+ var errorCount = 0;
14
+ var allowNextError = false;
15
+ return {
16
+ isLimitReached: function isLimitReached() {
17
+ if (errorCount === 0) {
18
+ setTimeout(function () {
19
+ errorCount = 0;
20
+ }, _utils.ONE_MINUTE);
21
+ }
22
+
23
+ errorCount += 1;
24
+
25
+ if (errorCount <= configuration.maxErrorsByMinute || allowNextError) {
26
+ allowNextError = false;
27
+ return false;
28
+ }
29
+
30
+ if (errorCount === configuration.maxErrorsByMinute + 1) {
31
+ allowNextError = true;
32
+
33
+ try {
34
+ onLimitReached({
35
+ message: "Reached max number of errors by minute: ".concat(configuration.maxErrorsByMinute),
36
+ source: _errorTools.ErrorSource.AGENT,
37
+ startTime: (0, _utils.now)()
38
+ });
39
+ } finally {
40
+ allowNextError = false;
41
+ }
42
+ }
43
+
44
+ return true;
45
+ }
46
+ };
47
+ }
@@ -11,7 +11,8 @@ var ErrorSource = {
11
11
  CONSOLE: 'console',
12
12
  NETWORK: 'network',
13
13
  SOURCE: 'source',
14
- LOGGER: 'logger'
14
+ LOGGER: 'logger',
15
+ CUSTOM: 'custom'
15
16
  };
16
17
  exports.ErrorSource = ErrorSource;
17
18
 
@@ -68,6 +68,7 @@ var LifeCycleEventType = {
68
68
  REQUEST_STARTED: 'REQUEST_STARTED',
69
69
  REQUEST_COMPLETED: 'REQUEST_COMPLETED',
70
70
  RAW_RUM_EVENT_COLLECTED: 'RAW_RUM_EVENT_COLLECTED',
71
+ RAW_ERROR_COLLECTED: 'RAW_ERROR_COLLECTED',
71
72
  RUM_EVENT_COLLECTED: 'RUM_EVENT_COLLECTED'
72
73
  };
73
74
  exports.LifeCycleEventType = LifeCycleEventType;
package/cjs/core/sdk.js CHANGED
@@ -43,7 +43,6 @@ function getSDK() {
43
43
  console.warn('unsupport platform, Fail to start');
44
44
  }
45
45
 
46
- console.log('------get SDK-------');
47
46
  return {
48
47
  sdk: sdk,
49
48
  tracker: tracker
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.sessionManagement = exports.SessionType = void 0;
7
+
8
+ var _utils = require("../helper/utils");
9
+
10
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
11
+
12
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
13
+
14
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
15
+
16
+ var SessionType = {
17
+ SYNTHETICS: 'synthetics',
18
+ USER: 'user'
19
+ };
20
+ exports.SessionType = SessionType;
21
+
22
+ var sessionManagement = /*#__PURE__*/function () {
23
+ function sessionManagement(configuration) {
24
+ _classCallCheck(this, sessionManagement);
25
+
26
+ this.sessionId = (0, _utils.UUID)();
27
+ this.isTrack = (0, _utils.performDraw)(configuration.sampleRate);
28
+ }
29
+
30
+ _createClass(sessionManagement, [{
31
+ key: "getSessionId",
32
+ value: function getSessionId() {
33
+ return this.sessionId;
34
+ }
35
+ }, {
36
+ key: "isTracked",
37
+ value: function isTracked() {
38
+ return this.isTrack;
39
+ }
40
+ }]);
41
+
42
+ return sessionManagement;
43
+ }();
44
+
45
+ exports.sessionManagement = sessionManagement;
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.Batch = exports.HttpRequest = void 0;
6
+ exports.Batch = exports.processedMessageByDataMap = exports.HttpRequest = void 0;
7
7
 
8
8
  var _utils = require("../helper/utils");
9
9
 
@@ -13,8 +13,11 @@ var _lifeCycle = require("../core/lifeCycle");
13
13
 
14
14
  var _dataMap = require("./dataMap");
15
15
 
16
+ var _enums = require("../helper/enums");
17
+
16
18
  // https://en.wikipedia.org/wiki/UTF-8
17
19
  var HAS_MULTI_BYTES_CHARACTERS = /[^\u0000-\u007F]/;
20
+ var CUSTOM_KEYS = 'custom_keys';
18
21
 
19
22
  function addBatchPrecision(url) {
20
23
  if (!url) return url;
@@ -43,6 +46,115 @@ httpRequest.prototype = {
43
46
  var HttpRequest = httpRequest;
44
47
  exports.HttpRequest = HttpRequest;
45
48
 
49
+ var processedMessageByDataMap = function processedMessageByDataMap(message) {
50
+ if (!message || !message.type) return {
51
+ rowStr: '',
52
+ rowData: undefined
53
+ };
54
+ var rowData = {
55
+ tags: {},
56
+ fields: {}
57
+ };
58
+ var hasFileds = false;
59
+ var rowStr = '';
60
+ (0, _utils.each)(_dataMap.dataMap, function (value, key) {
61
+ if (value.type === message.type) {
62
+ if (value.alias_key) {
63
+ rowStr += value.alias_key + ',';
64
+ } else {
65
+ rowStr += key + ',';
66
+ }
67
+
68
+ rowData.measurement = key;
69
+ var tagsStr = [];
70
+ var tags = (0, _utils.extend)({}, _dataMap.commonTags, value.tags);
71
+ var filterFileds = ['date', 'type']; // 已经在datamap中定义过的fields和tags
72
+
73
+ (0, _utils.each)(tags, function (value_path, _key) {
74
+ var _value = (0, _utils.findByPath)(message, value_path);
75
+
76
+ filterFileds.push(_key);
77
+
78
+ if (_value || (0, _utils.isNumber)(_value)) {
79
+ rowData.tags[_key] = _value;
80
+ tagsStr.push((0, _utils.escapeRowData)(_key) + '=' + (0, _utils.escapeRowData)(_value));
81
+ }
82
+ });
83
+
84
+ if (message.tags && (0, _utils.isObject)(message.tags) && !(0, _utils.isEmptyObject)(message.tags)) {
85
+ // 自定义tag
86
+ var _tagKeys = [];
87
+ (0, _utils.each)(message.tags, function (_value, _key) {
88
+ // 如果和之前tag重名,则舍弃
89
+ if (filterFileds.indexOf(_key) > -1) return;
90
+ filterFileds.push(_key);
91
+
92
+ if (_value || (0, _utils.isNumber)(_value)) {
93
+ _tagKeys.push(_key);
94
+
95
+ rowData.tags[_key] = _value;
96
+ tagsStr.push((0, _utils.escapeRowData)(_key) + '=' + (0, _utils.escapeRowData)(_value));
97
+ }
98
+ });
99
+
100
+ if (_tagKeys.length) {
101
+ rowData.tags[CUSTOM_KEYS] = _tagKeys;
102
+ tagsStr.push((0, _utils.escapeRowData)(CUSTOM_KEYS) + '=' + (0, _utils.escapeRowData)(_tagKeys));
103
+ }
104
+ }
105
+
106
+ var fieldsStr = [];
107
+ (0, _utils.each)(value.fields, function (_value, _key) {
108
+ if ((0, _utils.isArray)(_value) && _value.length === 2) {
109
+ var type = _value[0],
110
+ value_path = _value[1];
111
+
112
+ var _valueData = (0, _utils.findByPath)(message, value_path);
113
+
114
+ filterFileds.push(_key);
115
+
116
+ if (_valueData || (0, _utils.isNumber)(_valueData)) {
117
+ rowData.fields[_key] = _valueData; // 这里不需要转译
118
+
119
+ _valueData = type === 'string' ? '"' + _valueData.replace(/[\\]*"/g, '"').replace(/"/g, '\\"') + '"' : (0, _utils.escapeRowData)(_valueData);
120
+ fieldsStr.push((0, _utils.escapeRowData)(_key) + '=' + _valueData);
121
+ }
122
+ } else if ((0, _utils.isString)(_value)) {
123
+ var _valueData = (0, _utils.findByPath)(message, _value);
124
+
125
+ filterFileds.push(_key);
126
+
127
+ if (_valueData || (0, _utils.isNumber)(_valueData)) {
128
+ rowData.fields[_key] = _valueData; // 这里不需要转译
129
+
130
+ _valueData = (0, _utils.escapeRowData)(_valueData);
131
+ fieldsStr.push((0, _utils.escapeRowData)(_key) + '=' + _valueData);
132
+ }
133
+ }
134
+ });
135
+
136
+ if (tagsStr.length) {
137
+ rowStr += tagsStr.join(',');
138
+ }
139
+
140
+ if (fieldsStr.length) {
141
+ rowStr += ' ';
142
+ rowStr += fieldsStr.join(',');
143
+ hasFileds = true;
144
+ }
145
+
146
+ rowStr = rowStr + ' ' + message.date;
147
+ rowData.time = (0, _utils.toServerDuration)(message.date); // 这里不需要转译
148
+ }
149
+ });
150
+ return {
151
+ rowStr: hasFileds ? rowStr : '',
152
+ rowData: hasFileds ? rowData : undefined
153
+ };
154
+ };
155
+
156
+ exports.processedMessageByDataMap = processedMessageByDataMap;
157
+
46
158
  function batch(request, maxSize, bytesLimit, maxMessageSize, flushTimeout, lifeCycle) {
47
159
  this.request = request;
48
160
  this.maxSize = maxSize;
@@ -76,74 +188,7 @@ batch.prototype = {
76
188
  }
77
189
  },
78
190
  processSendData: function processSendData(message) {
79
- // var data = safeJSONParse(message)
80
- if (!message || !message.type) return '';
81
- var rowStr = '';
82
- var hasFileds = false;
83
- (0, _utils.each)(_dataMap.dataMap, function (value, key) {
84
- if (value.type === message.type) {
85
- // 做一下别名处理
86
- if (value.alias_key) {
87
- rowStr += value.alias_key + ',';
88
- } else {
89
- rowStr += key + ',';
90
- }
91
-
92
- var tagsStr = [];
93
- var tags = (0, _utils.extend)({}, _dataMap.commonTags, value.tags);
94
- (0, _utils.each)(tags, function (value_path, _key) {
95
- var _value = (0, _utils.findByPath)(message, value_path);
96
-
97
- if (_value || (0, _utils.isNumber)(_value)) {
98
- tagsStr.push((0, _utils.escapeRowData)(_key) + '=' + (0, _utils.escapeRowData)(_value));
99
- }
100
- });
101
-
102
- if (message.tags.length) {
103
- // 自定义tag
104
- (0, _utils.each)(message.tags, function (_value, _key) {
105
- if (_value || (0, _utils.isNumber)(_value)) {
106
- tagsStr.push((0, _utils.escapeRowData)(_key) + '=' + (0, _utils.escapeRowData)(_value));
107
- }
108
- });
109
- }
110
-
111
- var fieldsStr = [];
112
- (0, _utils.each)(value.fields, function (_value, _key) {
113
- if (Array.isArray(_value) && _value.length === 2) {
114
- var type = _value[0],
115
- value_path = _value[1];
116
-
117
- var _valueData = (0, _utils.findByPath)(message, value_path);
118
-
119
- if (_valueData || (0, _utils.isNumber)(_valueData)) {
120
- _valueData = type === 'string' ? '"' + String(_valueData).replace(/[\\]*"/g, '"').replace(/"/g, '\\"') + '"' : (0, _utils.escapeRowData)(_valueData);
121
- fieldsStr.push((0, _utils.escapeRowData)(_key) + '=' + _valueData);
122
- }
123
- } else if ((0, _utils.isString)(_value)) {
124
- var _valueData = (0, _utils.findByPath)(message, _value);
125
-
126
- if (_valueData || (0, _utils.isNumber)(_valueData)) {
127
- _valueData = (0, _utils.escapeRowData)(_valueData);
128
- fieldsStr.push((0, _utils.escapeRowData)(_key) + '=' + _valueData);
129
- }
130
- }
131
- });
132
-
133
- if (tagsStr.length) {
134
- rowStr += tagsStr.join(',');
135
- }
136
-
137
- if (fieldsStr.length) {
138
- rowStr += ' ';
139
- rowStr += fieldsStr.join(',');
140
- hasFileds = true;
141
- }
142
-
143
- rowStr = rowStr + ' ' + message.date;
144
- }
145
- });
146
- return hasFileds ? rowStr : '';
191
+ return processedMessageByDataMap(message).rowStr;
147
192
  },
148
193
  sizeInBytes: function sizeInBytes(candidate) {
149
194
  // Accurate byte size computations can degrade performances when there is a lot of events to process
@@ -53,7 +53,8 @@ function proxyXhr() {
53
53
  startTime: 0,
54
54
  url: arguments[0].url,
55
55
  type: _enums.RequestType.XHR,
56
- responseType: arguments[0].responseType || 'text'
56
+ responseType: arguments[0].responseType || 'text',
57
+ option: arguments[0]
57
58
  };
58
59
  dataflux_xhr.startTime = (0, _utils.now)();
59
60
  var originalSuccess = arguments[0].success;
@@ -97,6 +98,6 @@ function proxyXhr() {
97
98
  beforeSendCallbacks.forEach(function (callback) {
98
99
  callback(dataflux_xhr);
99
100
  });
100
- return originalXhrRequest.apply(this, arguments);
101
+ return originalXhrRequest.call(this, dataflux_xhr.option);
101
102
  };
102
103
  }