@cloudcare/rum-uniapp 2.1.8 → 2.1.11

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.
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.buildEnv = void 0;
7
7
  var buildEnv = {
8
- sdkVersion: '2.1.8',
8
+ sdkVersion: '2.1.11',
9
9
  sdkName: 'df_uniapp_rum_sdk'
10
10
  };
11
11
  exports.buildEnv = buildEnv;
@@ -89,6 +89,8 @@ var dataMap = {
89
89
  error: {
90
90
  type: _enums.RumEventType.ERROR,
91
91
  tags: {
92
+ trace_id: '_dd.trace_id',
93
+ span_id: '_dd.span_id',
92
94
  error_source: 'error.source',
93
95
  error_type: 'error.type',
94
96
  resource_url: 'error.resource.url',
@@ -134,7 +134,9 @@ function trackNetworkError(configuration, errorObservable) {
134
134
  resource: {
135
135
  method: request.method,
136
136
  statusCode: request.status,
137
- url: request.url
137
+ url: request.url,
138
+ traceId: request.traceId,
139
+ spanId: request.spanId
138
140
  },
139
141
  type: _errorTools.ErrorSource.NETWORK,
140
142
  source: _errorTools.ErrorSource.NETWORK,
@@ -13,8 +13,6 @@ var _lifeCycle = require("../core/lifeCycle");
13
13
 
14
14
  var _dataMap = require("./dataMap");
15
15
 
16
- var _enums = require("../helper/enums");
17
-
18
16
  // https://en.wikipedia.org/wiki/UTF-8
19
17
  var HAS_MULTI_BYTES_CHARACTERS = /[^\u0000-\u007F]/;
20
18
  var CUSTOM_KEYS = 'custom_keys';
@@ -68,7 +66,7 @@ var processedMessageByDataMap = function processedMessageByDataMap(message) {
68
66
  rowData.measurement = key;
69
67
  var tagsStr = [];
70
68
  var tags = (0, _utils.extend)({}, _dataMap.commonTags, value.tags);
71
- var filterFileds = ['date', 'type']; // 已经在datamap中定义过的fields和tags
69
+ var filterFileds = ['date', 'type', CUSTOM_KEYS]; // 已经在datamap中定义过的fields和tags
72
70
 
73
71
  (0, _utils.each)(tags, function (value_path, _key) {
74
72
  var _value = (0, _utils.findByPath)(message, value_path);
@@ -76,33 +74,10 @@ var processedMessageByDataMap = function processedMessageByDataMap(message) {
76
74
  filterFileds.push(_key);
77
75
 
78
76
  if (_value || (0, _utils.isNumber)(_value)) {
79
- rowData.tags[_key] = _value;
77
+ rowData.tags[_key] = (0, _utils.escapeJsonValue)(_value);
80
78
  tagsStr.push((0, _utils.escapeRowData)(_key) + '=' + (0, _utils.escapeRowData)(_value));
81
79
  }
82
80
  });
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
81
  var fieldsStr = [];
107
82
  (0, _utils.each)(value.fields, function (_value, _key) {
108
83
  if ((0, _utils.isArray)(_value) && _value.length === 2) {
@@ -116,8 +91,7 @@ var processedMessageByDataMap = function processedMessageByDataMap(message) {
116
91
  if (_valueData || (0, _utils.isNumber)(_valueData)) {
117
92
  rowData.fields[_key] = _valueData; // 这里不需要转译
118
93
 
119
- _valueData = type === 'string' ? '"' + _valueData.replace(/[\\]*"/g, '"').replace(/"/g, '\\"') + '"' : (0, _utils.escapeRowData)(_valueData);
120
- fieldsStr.push((0, _utils.escapeRowData)(_key) + '=' + _valueData);
94
+ fieldsStr.push((0, _utils.escapeRowData)(_key) + '=' + (0, _utils.escapeRowField)(_valueData));
121
95
  }
122
96
  } else if ((0, _utils.isString)(_value)) {
123
97
  var _valueData = (0, _utils.findByPath)(message, _value);
@@ -127,12 +101,34 @@ var processedMessageByDataMap = function processedMessageByDataMap(message) {
127
101
  if (_valueData || (0, _utils.isNumber)(_valueData)) {
128
102
  rowData.fields[_key] = _valueData; // 这里不需要转译
129
103
 
130
- _valueData = (0, _utils.escapeRowData)(_valueData);
131
- fieldsStr.push((0, _utils.escapeRowData)(_key) + '=' + _valueData);
104
+ fieldsStr.push((0, _utils.escapeRowData)(_key) + '=' + (0, _utils.escapeRowField)(_valueData));
132
105
  }
133
106
  }
134
107
  });
135
108
 
109
+ if (message.tags && (0, _utils.isObject)(message.tags) && !(0, _utils.isEmptyObject)(message.tags)) {
110
+ // 自定义tag, 存储成field
111
+ var _tagKeys = [];
112
+ (0, _utils.each)(message.tags, function (_value, _key) {
113
+ // 如果和之前tag重名,则舍弃
114
+ if (filterFileds.indexOf(_key) > -1) return;
115
+ filterFileds.push(_key);
116
+
117
+ if (_value || (0, _utils.isNumber)(_value)) {
118
+ _tagKeys.push(_key);
119
+
120
+ rowData.fields[_key] = _value; // 这里不需要转译
121
+
122
+ fieldsStr.push((0, _utils.escapeRowData)(_key) + '=' + (0, _utils.escapeRowField)(_value));
123
+ }
124
+ });
125
+
126
+ if (_tagKeys.length) {
127
+ rowData.fields[CUSTOM_KEYS] = (0, _utils.escapeRowField)(_tagKeys);
128
+ fieldsStr.push((0, _utils.escapeRowData)(CUSTOM_KEYS) + '=' + (0, _utils.escapeRowField)(_tagKeys));
129
+ }
130
+ }
131
+
136
132
  if (tagsStr.length) {
137
133
  rowStr += tagsStr.join(',');
138
134
  }
@@ -20,6 +20,9 @@ exports.withSnakeCaseKeys = withSnakeCaseKeys;
20
20
  exports.deepSnakeCase = deepSnakeCase;
21
21
  exports.toSnakeCase = toSnakeCase;
22
22
  exports.escapeRowData = escapeRowData;
23
+ exports.escapeJsonValue = escapeJsonValue;
24
+ exports.escapeFieldValueStr = escapeFieldValueStr;
25
+ exports.escapeRowField = escapeRowField;
23
26
  exports.getOrigin = getOrigin;
24
27
  exports.createContextManager = createContextManager;
25
28
  exports.getActivePage = getActivePage;
@@ -641,6 +644,28 @@ function escapeRowData(str) {
641
644
  });
642
645
  }
643
646
 
647
+ function escapeJsonValue(value) {
648
+ if (isString(value)) {
649
+ return value;
650
+ } else {
651
+ return jsonStringify(value);
652
+ }
653
+ }
654
+
655
+ function escapeFieldValueStr(str) {
656
+ return '"' + str.replace(/[\\]*"/g, '"').replace(/"/g, '\\"') + '"';
657
+ }
658
+
659
+ function escapeRowField(value) {
660
+ if (_typeof(value) === 'object' && value) {
661
+ return escapeFieldValueStr(jsonStringify(value));
662
+ } else if (isString(value)) {
663
+ return escapeFieldValueStr(value);
664
+ } else {
665
+ return value;
666
+ }
667
+ }
668
+
644
669
  var urlParse = function urlParse(para) {
645
670
  var URLParser = function URLParser(a) {
646
671
  this._fields = {
@@ -58,8 +58,10 @@ function doStartErrorCollection(lifeCycle) {
58
58
 
59
59
  function processError(error) {
60
60
  var resource = error.resource;
61
+ var tracingInfo;
61
62
 
62
63
  if (resource) {
64
+ tracingInfo = computeRequestTracingInfo(resource);
63
65
  var urlObj = (0, _utils.urlParse)(error.resource.url).getParse();
64
66
  resource = {
65
67
  method: error.resource.method,
@@ -72,7 +74,7 @@ function processError(error) {
72
74
  };
73
75
  }
74
76
 
75
- var rawRumEvent = {
77
+ var rawRumEvent = (0, _utils.extend2Lev)({
76
78
  date: error.startTime,
77
79
  error: {
78
80
  message: error.message,
@@ -83,9 +85,24 @@ function processError(error) {
83
85
  starttime: error.startTime
84
86
  },
85
87
  type: _enums.RumEventType.ERROR
86
- };
88
+ }, tracingInfo);
87
89
  return {
88
90
  rawRumEvent: rawRumEvent,
89
91
  startTime: error.startTime
90
92
  };
93
+ }
94
+
95
+ function computeRequestTracingInfo(request) {
96
+ var hasBeenTraced = request.traceId && request.spanId;
97
+
98
+ if (!hasBeenTraced) {
99
+ return undefined;
100
+ }
101
+
102
+ return {
103
+ _dd: {
104
+ spanId: request.spanId,
105
+ traceId: request.traceId
106
+ }
107
+ };
91
108
  }
@@ -41,7 +41,7 @@ DDtraceTracer.prototype = {
41
41
  makeTracingHeaders: function makeTracingHeaders() {
42
42
  return {
43
43
  'x-datadog-origin': 'rum',
44
- // 'x-datadog-parent-id': spanId.toDecimalString(),
44
+ 'x-datadog-parent-id': this.getSpanId(),
45
45
  'x-datadog-sampled': '1',
46
46
  'x-datadog-sampling-priority': '1',
47
47
  'x-datadog-trace-id': this.getTraceId()
@@ -1,4 +1,4 @@
1
1
  export var buildEnv = {
2
- sdkVersion: '2.1.8',
2
+ sdkVersion: '2.1.11',
3
3
  sdkName: 'df_uniapp_rum_sdk'
4
4
  };
@@ -80,6 +80,8 @@ export var dataMap = {
80
80
  error: {
81
81
  type: RumEventType.ERROR,
82
82
  tags: {
83
+ trace_id: '_dd.trace_id',
84
+ span_id: '_dd.span_id',
83
85
  error_source: 'error.source',
84
86
  error_type: 'error.type',
85
87
  resource_url: 'error.resource.url',
@@ -105,7 +105,9 @@ export function trackNetworkError(configuration, errorObservable) {
105
105
  resource: {
106
106
  method: request.method,
107
107
  statusCode: request.status,
108
- url: request.url
108
+ url: request.url,
109
+ traceId: request.traceId,
110
+ spanId: request.spanId
109
111
  },
110
112
  type: ErrorSource.NETWORK,
111
113
  source: ErrorSource.NETWORK,
@@ -1,8 +1,7 @@
1
- import { findByPath, escapeRowData, isNumber, each, isString, values, extend, isObject, isEmptyObject, isArray, isBoolean, toServerDuration } from '../helper/utils';
1
+ import { findByPath, escapeRowData, isNumber, each, isString, values, extend, isObject, isEmptyObject, isArray, escapeRowField, escapeJsonValue, toServerDuration } from '../helper/utils';
2
2
  import { sdk } from '../core/sdk';
3
3
  import { LifeCycleEventType } from '../core/lifeCycle';
4
- import { commonTags, dataMap } from './dataMap';
5
- import { RumEventType } from '../helper/enums'; // https://en.wikipedia.org/wiki/UTF-8
4
+ import { commonTags, dataMap } from './dataMap'; // https://en.wikipedia.org/wiki/UTF-8
6
5
 
7
6
  var HAS_MULTI_BYTES_CHARACTERS = /[^\u0000-\u007F]/;
8
7
  var CUSTOM_KEYS = 'custom_keys';
@@ -53,7 +52,7 @@ export var processedMessageByDataMap = function processedMessageByDataMap(messag
53
52
  rowData.measurement = key;
54
53
  var tagsStr = [];
55
54
  var tags = extend({}, commonTags, value.tags);
56
- var filterFileds = ['date', 'type']; // 已经在datamap中定义过的fields和tags
55
+ var filterFileds = ['date', 'type', CUSTOM_KEYS]; // 已经在datamap中定义过的fields和tags
57
56
 
58
57
  each(tags, function (value_path, _key) {
59
58
  var _value = findByPath(message, value_path);
@@ -61,33 +60,10 @@ export var processedMessageByDataMap = function processedMessageByDataMap(messag
61
60
  filterFileds.push(_key);
62
61
 
63
62
  if (_value || isNumber(_value)) {
64
- rowData.tags[_key] = _value;
63
+ rowData.tags[_key] = escapeJsonValue(_value);
65
64
  tagsStr.push(escapeRowData(_key) + '=' + escapeRowData(_value));
66
65
  }
67
66
  });
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
67
  var fieldsStr = [];
92
68
  each(value.fields, function (_value, _key) {
93
69
  if (isArray(_value) && _value.length === 2) {
@@ -101,8 +77,7 @@ export var processedMessageByDataMap = function processedMessageByDataMap(messag
101
77
  if (_valueData || isNumber(_valueData)) {
102
78
  rowData.fields[_key] = _valueData; // 这里不需要转译
103
79
 
104
- _valueData = type === 'string' ? '"' + _valueData.replace(/[\\]*"/g, '"').replace(/"/g, '\\"') + '"' : escapeRowData(_valueData);
105
- fieldsStr.push(escapeRowData(_key) + '=' + _valueData);
80
+ fieldsStr.push(escapeRowData(_key) + '=' + escapeRowField(_valueData));
106
81
  }
107
82
  } else if (isString(_value)) {
108
83
  var _valueData = findByPath(message, _value);
@@ -112,12 +87,34 @@ export var processedMessageByDataMap = function processedMessageByDataMap(messag
112
87
  if (_valueData || isNumber(_valueData)) {
113
88
  rowData.fields[_key] = _valueData; // 这里不需要转译
114
89
 
115
- _valueData = escapeRowData(_valueData);
116
- fieldsStr.push(escapeRowData(_key) + '=' + _valueData);
90
+ fieldsStr.push(escapeRowData(_key) + '=' + escapeRowField(_valueData));
117
91
  }
118
92
  }
119
93
  });
120
94
 
95
+ if (message.tags && isObject(message.tags) && !isEmptyObject(message.tags)) {
96
+ // 自定义tag, 存储成field
97
+ var _tagKeys = [];
98
+ each(message.tags, function (_value, _key) {
99
+ // 如果和之前tag重名,则舍弃
100
+ if (filterFileds.indexOf(_key) > -1) return;
101
+ filterFileds.push(_key);
102
+
103
+ if (_value || isNumber(_value)) {
104
+ _tagKeys.push(_key);
105
+
106
+ rowData.fields[_key] = _value; // 这里不需要转译
107
+
108
+ fieldsStr.push(escapeRowData(_key) + '=' + escapeRowField(_value));
109
+ }
110
+ });
111
+
112
+ if (_tagKeys.length) {
113
+ rowData.fields[CUSTOM_KEYS] = escapeRowField(_tagKeys);
114
+ fieldsStr.push(escapeRowData(CUSTOM_KEYS) + '=' + escapeRowField(_tagKeys));
115
+ }
116
+ }
117
+
121
118
  if (tagsStr.length) {
122
119
  rowStr += tagsStr.join(',');
123
120
  }
@@ -511,6 +511,25 @@ export function escapeRowData(str) {
511
511
  return '\\' + word;
512
512
  });
513
513
  }
514
+ export function escapeJsonValue(value) {
515
+ if (isString(value)) {
516
+ return value;
517
+ } else {
518
+ return jsonStringify(value);
519
+ }
520
+ }
521
+ export function escapeFieldValueStr(str) {
522
+ return '"' + str.replace(/[\\]*"/g, '"').replace(/"/g, '\\"') + '"';
523
+ }
524
+ export function escapeRowField(value) {
525
+ if (typeof value === 'object' && value) {
526
+ return escapeFieldValueStr(jsonStringify(value));
527
+ } else if (isString(value)) {
528
+ return escapeFieldValueStr(value);
529
+ } else {
530
+ return value;
531
+ }
532
+ }
514
533
  export var urlParse = function urlParse(para) {
515
534
  var URLParser = function URLParser(a) {
516
535
  this._fields = {
@@ -1,7 +1,7 @@
1
1
  import { startAutomaticErrorCollection } from '../../core/errorCollection';
2
2
  import { RumEventType } from '../../helper/enums';
3
3
  import { LifeCycleEventType } from '../../core/lifeCycle';
4
- import { urlParse, replaceNumberCharByPath, getStatusGroup } from '../../helper/utils';
4
+ import { urlParse, replaceNumberCharByPath, getStatusGroup, extend2Lev } from '../../helper/utils';
5
5
  export function startErrorCollection(lifeCycle, configuration) {
6
6
  // return doStartErrorCollection(
7
7
  // lifeCycle,
@@ -44,8 +44,10 @@ export function doStartErrorCollection(lifeCycle) {
44
44
 
45
45
  function processError(error) {
46
46
  var resource = error.resource;
47
+ var tracingInfo;
47
48
 
48
49
  if (resource) {
50
+ tracingInfo = computeRequestTracingInfo(resource);
49
51
  var urlObj = urlParse(error.resource.url).getParse();
50
52
  resource = {
51
53
  method: error.resource.method,
@@ -58,7 +60,7 @@ function processError(error) {
58
60
  };
59
61
  }
60
62
 
61
- var rawRumEvent = {
63
+ var rawRumEvent = extend2Lev({
62
64
  date: error.startTime,
63
65
  error: {
64
66
  message: error.message,
@@ -69,9 +71,24 @@ function processError(error) {
69
71
  starttime: error.startTime
70
72
  },
71
73
  type: RumEventType.ERROR
72
- };
74
+ }, tracingInfo);
73
75
  return {
74
76
  rawRumEvent: rawRumEvent,
75
77
  startTime: error.startTime
76
78
  };
79
+ }
80
+
81
+ function computeRequestTracingInfo(request) {
82
+ var hasBeenTraced = request.traceId && request.spanId;
83
+
84
+ if (!hasBeenTraced) {
85
+ return undefined;
86
+ }
87
+
88
+ return {
89
+ _dd: {
90
+ spanId: request.spanId,
91
+ traceId: request.traceId
92
+ }
93
+ };
77
94
  }
@@ -33,7 +33,7 @@ DDtraceTracer.prototype = {
33
33
  makeTracingHeaders: function makeTracingHeaders() {
34
34
  return {
35
35
  'x-datadog-origin': 'rum',
36
- // 'x-datadog-parent-id': spanId.toDecimalString(),
36
+ 'x-datadog-parent-id': this.getSpanId(),
37
37
  'x-datadog-sampled': '1',
38
38
  'x-datadog-sampling-priority': '1',
39
39
  'x-datadog-trace-id': this.getTraceId()
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cloudcare/rum-uniapp",
3
- "version": "2.1.8",
3
+ "version": "2.1.11",
4
4
  "main": "cjs/index.js",
5
5
  "module": "esm/index.js",
6
6
  "miniprogram": "cjs",