@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
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
  通过引入sdk文件,监控小程序性能指标,错误log,以及资源请求情况数据,上报到DataFlux 平台datakit
3
3
 
4
4
  ## 使用方法
5
- ### 在uniapp项目入口文件`main.js`文件以如下方式引入代码
5
+ ### 在uniapp项目入口文件`main.js`文件头部位置以如下方式引入代码
6
6
  ### npm 引入(可参考uniapp官方[npm引入方式](https://uniapp.dcloud.net.cn/frame?id=npm%e6%94%af%e6%8c%81))
7
7
  ```javascript
8
8
  //#ifndef H5 || APP-PLUS || APP-NVUE || APP-PLUS-NVUE
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.buildEnv = void 0;
7
7
  var buildEnv = {
8
- sdkVersion: '1.0.1',
8
+ sdkVersion: '2.0.1',
9
9
  sdkName: 'df_uniapp_rum_sdk'
10
10
  };
11
11
  exports.buildEnv = buildEnv;
@@ -9,8 +9,20 @@ 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
+ function clonedCommonContext() {
20
+ return (0, _utils.extend2Lev)({}, {
21
+ context: globalContextManager.get(),
22
+ user: user
23
+ });
24
+ }
25
+
14
26
  var rumGlobal = {
15
27
  init: function init(Vue, userConfiguration) {
16
28
  if (typeof userConfiguration === 'undefined') {
@@ -23,8 +35,29 @@ var makeRum = function makeRum(startRumImpl) {
23
35
  return;
24
36
  }
25
37
 
26
- startRumImpl(Vue, userConfiguration);
38
+ startRumImpl(Vue, userConfiguration, function () {
39
+ return {
40
+ user: user,
41
+ context: globalContextManager.get()
42
+ };
43
+ });
27
44
  isAlreadyInitialized = true;
45
+ },
46
+ addRumGlobalContext: globalContextManager.add,
47
+ removeRumGlobalContext: globalContextManager.remove,
48
+ getRumGlobalContext: globalContextManager.get,
49
+ setRumGlobalContext: globalContextManager.set,
50
+ setUser: function setUser(newUser) {
51
+ var sanitizedUser = sanitizeUser(newUser);
52
+
53
+ if (sanitizedUser) {
54
+ user = sanitizedUser;
55
+ } else {
56
+ console.error('Unsupported user:', newUser);
57
+ }
58
+ },
59
+ removeUser: function removeUser() {
60
+ user = {};
28
61
  }
29
62
  };
30
63
  return rumGlobal;
@@ -52,6 +85,28 @@ var makeRum = function makeRum(startRumImpl) {
52
85
 
53
86
  return true;
54
87
  }
88
+
89
+ function sanitizeUser(newUser) {
90
+ if (_typeof(newUser) !== 'object' || !newUser) {
91
+ return;
92
+ }
93
+
94
+ var result = (0, _utils.extend2Lev)({}, newUser);
95
+
96
+ if ('id' in result) {
97
+ result.id = String(result.id);
98
+ }
99
+
100
+ if ('name' in result) {
101
+ result.name = String(result.name);
102
+ }
103
+
104
+ if ('email' in result) {
105
+ result.email = String(result.email);
106
+ }
107
+
108
+ return result;
109
+ }
55
110
  };
56
111
 
57
112
  exports.makeRum = makeRum;
package/cjs/boot/rum.js CHANGED
@@ -35,12 +35,12 @@ var _actionCollection = require("../rumEventsCollection/action/actionCollection"
35
35
 
36
36
  var _sdk = require("../core/sdk");
37
37
 
38
- var startRum = function startRum(Vue, userConfiguration) {
38
+ var startRum = function startRum(Vue, userConfiguration, getCommonContext) {
39
39
  var configuration = (0, _configuration.commonInit)(userConfiguration, _buildEnv.buildEnv);
40
40
  var lifeCycle = new _lifeCycle.LifeCycle();
41
41
  var parentContexts = (0, _parentContexts.startParentContexts)(lifeCycle);
42
42
  var batch = (0, _batch.startRumBatch)(configuration, lifeCycle);
43
- (0, _assembly.startRumAssembly)(userConfiguration.applicationId, configuration, lifeCycle, parentContexts);
43
+ (0, _assembly.startRumAssembly)(userConfiguration.applicationId, configuration, lifeCycle, parentContexts, getCommonContext);
44
44
  (0, _appCollection.startAppCollection)(lifeCycle, configuration);
45
45
  (0, _resourceCollection.startResourceCollection)(lifeCycle, configuration);
46
46
  (0, _viewCollection.startViewCollection)(lifeCycle, configuration, Vue);
@@ -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,26 @@ 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
+
65
81
  return (0, _utils.extend2Lev)(DEFAULT_CONFIGURATION, transportConfiguration);
66
82
  }
67
83
 
84
+ function hasTraceType(traceType) {
85
+ if (traceType && (0, _utils.values)(_enums.TraceType).indexOf(traceType) > -1) return true;
86
+ return false;
87
+ }
88
+
68
89
  var haveSameOrigin = function haveSameOrigin(url1, url2) {
69
90
  var parseUrl1 = (0, _utils.urlParse)(url1).getParse();
70
91
  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',
@@ -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,124 @@ 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 (message.type === _enums.RumEventType.LOGGER) {
137
+ // 这里处理日志类型数据自定义字段
138
+ (0, _utils.each)(message, function (value, key) {
139
+ if (filterFileds.indexOf(key) === -1 && ((0, _utils.isNumber)(value) || (0, _utils.isString)(value) || (0, _utils.isBoolean)(value))) {
140
+ tagsStr.push((0, _utils.escapeRowData)(key) + '=' + (0, _utils.escapeRowData)(value));
141
+ }
142
+ });
143
+ }
144
+
145
+ if (tagsStr.length) {
146
+ rowStr += tagsStr.join(',');
147
+ }
148
+
149
+ if (fieldsStr.length) {
150
+ rowStr += ' ';
151
+ rowStr += fieldsStr.join(',');
152
+ hasFileds = true;
153
+ }
154
+
155
+ rowStr = rowStr + ' ' + message.date;
156
+ rowData.time = (0, _utils.toServerDuration)(message.date); // 这里不需要转译
157
+ }
158
+ });
159
+ return {
160
+ rowStr: hasFileds ? rowStr : '',
161
+ rowData: hasFileds ? rowData : undefined
162
+ };
163
+ };
164
+
165
+ exports.processedMessageByDataMap = processedMessageByDataMap;
166
+
46
167
  function batch(request, maxSize, bytesLimit, maxMessageSize, flushTimeout, lifeCycle) {
47
168
  this.request = request;
48
169
  this.maxSize = maxSize;
@@ -76,74 +197,7 @@ batch.prototype = {
76
197
  }
77
198
  },
78
199
  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 : '';
200
+ return processedMessageByDataMap(message).rowStr;
147
201
  },
148
202
  sizeInBytes: function sizeInBytes(candidate) {
149
203
  // 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
  }
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.MpHook = exports.ActionType = exports.RequestType = exports.RumEventType = exports.CLIENT_ID_TOKEN = exports.ONE_KILO_BYTE = exports.ONE_HOUR = exports.ONE_MINUTE = exports.ONE_SECOND = void 0;
6
+ exports.TraceType = exports.MpHook = exports.ActionType = exports.RequestType = exports.RumEventType = exports.CLIENT_ID_TOKEN = exports.ONE_KILO_BYTE = exports.ONE_HOUR = exports.ONE_MINUTE = exports.ONE_SECOND = void 0;
7
7
 
8
8
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
9
9
 
@@ -52,4 +52,13 @@ var MpHook = {
52
52
  onHide: 1,
53
53
  onUnload: 1
54
54
  };
55
- exports.MpHook = MpHook;
55
+ exports.MpHook = MpHook;
56
+ var TraceType = {
57
+ DDTRACE: 'ddtrace',
58
+ ZIPKIN_MULTI_HEADER: 'zipkin',
59
+ ZIPKIN_SINGLE_HEADER: 'zipkin_single_header',
60
+ W3C_TRACEPARENT: 'w3c_traceparent',
61
+ SKYWALKING_V3: 'skywalking_v3',
62
+ JAEGER: 'jaeger'
63
+ };
64
+ exports.TraceType = TraceType;