@dynatrace/react-native-plugin 2.337.2 → 2.339.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 (38) hide show
  1. package/README.md +11 -5
  2. package/android/build.gradle +1 -1
  3. package/files/default.config.js +2 -0
  4. package/files/plugin.gradle +1 -1
  5. package/instrumentation/jsx/components/ClassComponent.js +2 -1
  6. package/instrumentation/libs/UserInteraction.js +1 -1
  7. package/instrumentation/libs/react-navigation/ReactNavigation.js +7 -4
  8. package/instrumentation/libs/withOnPressMonitoring.js +5 -2
  9. package/lib/core/Application.js +5 -2
  10. package/lib/core/Dynatrace.js +113 -44
  11. package/lib/core/DynatraceAction.js +78 -21
  12. package/lib/core/DynatraceInternal.js +19 -4
  13. package/lib/core/DynatraceRootAction.js +6 -3
  14. package/lib/core/DynatraceWebRequestTiming.js +25 -4
  15. package/lib/core/ErrorHandler.js +9 -2
  16. package/lib/core/logging/ConsoleLogger.js +17 -6
  17. package/lib/core/logging/LogMessages.js +764 -0
  18. package/lib/core/logging/LogType.js +9 -0
  19. package/lib/features/ui-interaction/IUserInteractionEvent.js +1 -1
  20. package/lib/features/ui-interaction/Runtime.js +7 -3
  21. package/lib/next/Dynatrace.js +42 -22
  22. package/lib/next/appstart/AppStartObserver.js +7 -2
  23. package/lib/next/events/EventPipeline.js +12 -5
  24. package/lib/next/events/EventTimestamp.js +5 -1
  25. package/lib/next/events/ExceptionEventData.js +1 -1
  26. package/lib/next/events/HttpRequestEventData.js +16 -7
  27. package/lib/next/events/modifier/BaseDataEventModifier.js +4 -1
  28. package/lib/next/events/modifier/EventModifierUtil.js +12 -5
  29. package/lib/next/events/modifier/ModifyEventValidation.js +20 -7
  30. package/lib/next/events/modifier/SendEventValidation.js +10 -4
  31. package/lib/next/events/modifier/StringLengthEventModifier.js +4 -1
  32. package/lib/next/events/modifier/ValueRestrictionModifier.js +5 -1
  33. package/lib/next/events/spec/EventSpecContstants.js +6 -2
  34. package/lib/next/provider/TimestampProvider.js +1 -1
  35. package/lib/next/util/TraceContextUtils.js +4 -3
  36. package/package.json +5 -4
  37. package/react-native-dynatrace.podspec +1 -1
  38. package/scripts/Config.js +1 -1
@@ -4,6 +4,7 @@ exports.DynatraceAction = void 0;
4
4
  const StringUtils_1 = require("./util/StringUtils");
5
5
  const DynatraceBridge_1 = require("./DynatraceBridge");
6
6
  const ConsoleLogger_1 = require("./logging/ConsoleLogger");
7
+ const LogMessages_1 = require("./logging/LogMessages");
7
8
  class DynatraceAction {
8
9
  constructor(key, name, manual) {
9
10
  this.key = key;
@@ -14,96 +15,152 @@ class DynatraceAction {
14
15
  }
15
16
  reportError(errorName, errorCode, platform) {
16
17
  if (this.closed) {
17
- this.logger.debug(`reportError(${errorName}, ${errorCode}): Action was closed already!`);
18
+ this.logger.debug(LogMessages_1.LogMessage.ACTION_REPORT_ERROR_CLOSED, {
19
+ errorName,
20
+ errorCode,
21
+ });
18
22
  return;
19
23
  }
20
24
  if (!StringUtils_1.StringUtils.isStringNullEmptyOrUndefined(errorName)) {
21
25
  DynatraceBridge_1.DynatraceNative.reportErrorInAction(this.key, errorName, errorCode, platform === null || platform === void 0 ? void 0 : platform.toString());
22
- this.logger.debug(`reportError(${errorName}, ${errorCode}): in Action - ${this.name}`);
26
+ this.logger.debug(LogMessages_1.LogMessage.ACTION_REPORT_ERROR, {
27
+ errorName,
28
+ errorCode,
29
+ name: this.name,
30
+ });
23
31
  }
24
32
  else {
25
- this.logger.debug(`reportError(errorName, errorCode): Error will not be reported because errorName is invalid! errorName: ${errorName}, errorCode: ${errorCode}`);
33
+ this.logger.debug(LogMessages_1.LogMessage.ACTION_REPORT_ERROR_INVALID, {
34
+ errorName,
35
+ errorCode,
36
+ });
26
37
  }
27
38
  }
28
39
  reportEvent(eventName, platform) {
29
40
  if (this.closed) {
30
- this.logger.debug(`reportEvent(${eventName}): Action was closed already!`);
41
+ this.logger.debug(LogMessages_1.LogMessage.ACTION_REPORT_EVENT_CLOSED, {
42
+ eventName,
43
+ });
31
44
  return;
32
45
  }
33
46
  if (!StringUtils_1.StringUtils.isStringNullEmptyOrUndefined(eventName)) {
34
47
  DynatraceBridge_1.DynatraceNative.reportEventInAction(this.key, eventName, platform === null || platform === void 0 ? void 0 : platform.toString());
35
- this.logger.debug(`reportEvent(${eventName}): in Action - ${this.name}`);
48
+ this.logger.debug(LogMessages_1.LogMessage.ACTION_REPORT_EVENT, {
49
+ eventName,
50
+ name: this.name,
51
+ });
36
52
  }
37
53
  else {
38
- this.logger.debug(`reportEvent(eventName): Event will not be reported because eventName is invalid! eventName: ${eventName} in Action - ${this.name}`);
54
+ this.logger.debug(LogMessages_1.LogMessage.ACTION_REPORT_EVENT_INVALID, {
55
+ eventName,
56
+ name: this.name,
57
+ });
39
58
  }
40
59
  }
41
60
  reportStringValue(valueName, value, platform) {
42
61
  if (this.closed) {
43
- this.logger.debug(`reportStringValue(${valueName}, ${value}): Action was closed already!`);
62
+ this.logger.debug(LogMessages_1.LogMessage.ACTION_REPORT_STRING_VALUE_CLOSED, {
63
+ valueName,
64
+ value,
65
+ });
44
66
  return;
45
67
  }
46
68
  if (!StringUtils_1.StringUtils.isStringNullEmptyOrUndefined(valueName) &&
47
69
  !StringUtils_1.StringUtils.isStringNullEmptyOrUndefined(value)) {
48
70
  DynatraceBridge_1.DynatraceNative.reportStringValueInAction(this.key, valueName, value, platform === null || platform === void 0 ? void 0 : platform.toString());
49
- this.logger.debug(`reportStringValue(${valueName}, ${value}): in Action - ${this.name}`);
71
+ this.logger.debug(LogMessages_1.LogMessage.ACTION_REPORT_STRING_VALUE, {
72
+ valueName,
73
+ value,
74
+ name: this.name,
75
+ });
50
76
  }
51
77
  else {
52
- this.logger.debug(`reportStringValue(valueName, value): String value will not be reported because valueName or value is invalid! valueName: ${valueName}, value: ${value} in Action - ${this.name}`);
78
+ this.logger.debug(LogMessages_1.LogMessage.ACTION_REPORT_STRING_VALUE_INVALID, {
79
+ valueName,
80
+ value,
81
+ name: this.name,
82
+ });
53
83
  }
54
84
  }
55
85
  reportIntValue(valueName, value, platform) {
56
86
  if (this.closed) {
57
- this.logger.debug(`reportIntValue(${valueName}, ${value}): Action was closed already!`);
87
+ this.logger.debug(LogMessages_1.LogMessage.ACTION_REPORT_INT_VALUE_CLOSED, {
88
+ valueName,
89
+ value,
90
+ });
58
91
  return;
59
92
  }
60
93
  if (!StringUtils_1.StringUtils.isStringNullEmptyOrUndefined(valueName)) {
61
94
  DynatraceBridge_1.DynatraceNative.reportIntValueInAction(this.key, valueName, value, platform === null || platform === void 0 ? void 0 : platform.toString());
62
- this.logger.debug(`reportIntValue(${valueName}, ${value}): in Action - ${this.name}`);
95
+ this.logger.debug(LogMessages_1.LogMessage.ACTION_REPORT_INT_VALUE, {
96
+ valueName,
97
+ value,
98
+ name: this.name,
99
+ });
63
100
  }
64
101
  else {
65
- this.logger.debug(`reportIntValue(valueName, value): Int value will not be reported because valueName is invalid! valueName: ${valueName}, value: ${value} in Action - ${this.name}`);
102
+ this.logger.debug(LogMessages_1.LogMessage.ACTION_REPORT_INT_VALUE_INVALID, {
103
+ valueName,
104
+ value,
105
+ name: this.name,
106
+ });
66
107
  }
67
108
  }
68
109
  reportDoubleValue(valueName, value, platform) {
69
110
  if (this.closed) {
70
- this.logger.debug(`reportDoubleValue(${valueName}, ${value}): Action was closed already!`);
111
+ this.logger.debug(LogMessages_1.LogMessage.ACTION_REPORT_DOUBLE_VALUE_CLOSED, {
112
+ valueName,
113
+ value,
114
+ });
71
115
  return;
72
116
  }
73
117
  if (!StringUtils_1.StringUtils.isStringNullEmptyOrUndefined(valueName)) {
74
118
  DynatraceBridge_1.DynatraceNative.reportDoubleValueInAction(this.key, valueName, value, platform === null || platform === void 0 ? void 0 : platform.toString());
75
- this.logger.debug(`reportDoubleValue(${valueName}, ${value}): in Action - ${this.name}`);
119
+ this.logger.debug(LogMessages_1.LogMessage.ACTION_REPORT_DOUBLE_VALUE, {
120
+ valueName,
121
+ value,
122
+ name: this.name,
123
+ });
76
124
  }
77
125
  else {
78
- this.logger.debug(`reportDoubleValue(valueName, value): Double value will not be reported because valueName is invalid! valueName: ${valueName}, value: ${value} in Action - ${this.name}`);
126
+ this.logger.debug(LogMessages_1.LogMessage.ACTION_REPORT_DOUBLE_VALUE_INVALID, {
127
+ valueName,
128
+ value,
129
+ name: this.name,
130
+ });
79
131
  }
80
132
  }
81
133
  leaveAction(platform) {
82
134
  if (this.closed) {
83
- this.logger.debug('leaveAction(): Action was closed already!');
135
+ this.logger.debug(LogMessages_1.LogMessage.ACTION_LEAVE_CLOSED);
84
136
  return;
85
137
  }
86
138
  this.closed = true;
87
- this.logger.debug(`leaveAction(): ${this.name}`);
139
+ this.logger.debug(LogMessages_1.LogMessage.ACTION_LEAVE, { name: this.name });
88
140
  DynatraceBridge_1.DynatraceNative.leaveAction(this.key, this.manual, platform === null || platform === void 0 ? void 0 : platform.toString());
89
141
  }
90
142
  cancel(platform) {
91
143
  if (this.closed) {
92
- this.logger.debug('cancelAction(): Action was closed already!');
144
+ this.logger.debug(LogMessages_1.LogMessage.ACTION_CANCEL_CLOSED);
93
145
  return;
94
146
  }
95
147
  this.closed = true;
96
- this.logger.debug(`cancelAction(): ${this.name}`);
148
+ this.logger.debug(LogMessages_1.LogMessage.ACTION_CANCEL, { name: this.name });
97
149
  DynatraceBridge_1.DynatraceNative.cancelAction(this.key, platform === null || platform === void 0 ? void 0 : platform.toString());
98
150
  }
99
151
  getRequestTag(url) {
100
152
  if (this.closed) {
101
- this.logger.debug(`getRequestTag(${url}): Action was closed already!`);
153
+ this.logger.debug(LogMessages_1.LogMessage.ACTION_GET_REQUEST_TAG_CLOSED, {
154
+ url,
155
+ });
102
156
  return new Promise((resolve) => {
103
157
  resolve('');
104
158
  });
105
159
  }
106
- this.logger.debug(`getRequestTag(${url}): in Action - ${this.name}`);
160
+ this.logger.debug(LogMessages_1.LogMessage.ACTION_GET_REQUEST_TAG, {
161
+ url,
162
+ name: this.name,
163
+ });
107
164
  return DynatraceBridge_1.DynatraceNative.getRequestTag(this.key, url);
108
165
  }
109
166
  getRequestTagHeader() {
@@ -6,17 +6,26 @@ const Dynatrace_1 = require("../next/Dynatrace");
6
6
  const DynatraceBridge_1 = require("./DynatraceBridge");
7
7
  const StringUtils_1 = require("./util/StringUtils");
8
8
  const ConsoleLogger_1 = require("./logging/ConsoleLogger");
9
+ const LogMessages_1 = require("./logging/LogMessages");
9
10
  let counter = 0;
10
11
  const logger = new ConsoleLogger_1.ConsoleLogger('DyntraceInt');
11
12
  exports.DynatraceInternal = {
12
13
  reportErrorFromHandler: (isFatal, errorName, reason, stacktrace, isReportFatalErrorAsCrash, platform) => {
13
14
  if (isFatal && isReportFatalErrorAsCrash) {
14
15
  if (react_native_1.Platform.OS === 'ios') {
15
- logger.debug(`storeCrash(${errorName}, ${reason}, ${stacktrace})`);
16
+ logger.debug(LogMessages_1.LogMessage.STORE_CRASH, {
17
+ errorName,
18
+ reason,
19
+ stacktrace,
20
+ });
16
21
  DynatraceBridge_1.DynatraceNative.storeCrash(errorName, reason, stacktrace);
17
22
  }
18
23
  else {
19
- logger.debug(`reportCrash(${errorName}, ${reason}, ${stacktrace})`);
24
+ logger.debug(LogMessages_1.LogMessage.REPORT_CRASH, {
25
+ crashName: errorName,
26
+ reason,
27
+ stacktrace,
28
+ });
20
29
  DynatraceBridge_1.DynatraceNative.reportCrash(errorName, reason, stacktrace, true, platform === null || platform === void 0 ? void 0 : platform.toString());
21
30
  }
22
31
  Dynatrace_1.Dynatrace.reportCrash({
@@ -27,7 +36,11 @@ exports.DynatraceInternal = {
27
36
  }
28
37
  else {
29
38
  if (!StringUtils_1.StringUtils.isStringNullEmptyOrUndefined(stacktrace)) {
30
- logger.debug(`reportError(${errorName}, ${reason}, ${stacktrace})`);
39
+ logger.debug(LogMessages_1.LogMessage.INTERNAL_REPORT_ERROR, {
40
+ errorName,
41
+ reason,
42
+ stacktrace,
43
+ });
31
44
  DynatraceBridge_1.DynatraceNative.reportError(errorName, '-', reason, stacktrace, platform === null || platform === void 0 ? void 0 : platform.toString());
32
45
  Dynatrace_1.Dynatrace.reportError({
33
46
  name: errorName,
@@ -36,7 +49,9 @@ exports.DynatraceInternal = {
36
49
  }, false);
37
50
  }
38
51
  else {
39
- logger.debug(`reportError(${errorName})`);
52
+ logger.debug(LogMessages_1.LogMessage.INTERNAL_REPORT_ERROR_SIMPLE, {
53
+ errorName,
54
+ });
40
55
  DynatraceBridge_1.DynatraceNative.reportErrorWithoutStacktrace(errorName, -1);
41
56
  Dynatrace_1.Dynatrace.reportErrorCode(errorName, -1, false);
42
57
  }
@@ -8,6 +8,7 @@ const NullAction_1 = require("./NullAction");
8
8
  const DynatraceInternal_1 = require("./DynatraceInternal");
9
9
  const ConfigurationHandler_1 = require("./configuration/ConfigurationHandler");
10
10
  const ConsoleLogger_1 = require("./logging/ConsoleLogger");
11
+ const LogMessages_1 = require("./logging/LogMessages");
11
12
  class DynatraceRootAction extends DynatraceAction_1.DynatraceAction {
12
13
  constructor(key, name) {
13
14
  super(key, name, true);
@@ -15,7 +16,7 @@ class DynatraceRootAction extends DynatraceAction_1.DynatraceAction {
15
16
  }
16
17
  enterAction(name, platform) {
17
18
  if (this.closed) {
18
- this.logger.debug(`enterAction(${name}): Action was closed already!`);
19
+ this.logger.debug(LogMessages_1.LogMessage.ROOT_ACTION_ENTER_CLOSED, { name });
19
20
  return new NullAction_1.NullAction();
20
21
  }
21
22
  let childKey;
@@ -29,12 +30,14 @@ class DynatraceRootAction extends DynatraceAction_1.DynatraceAction {
29
30
  childKey = 'DEFAULT_' + DynatraceInternal_1.DynatraceInternal.getCounter();
30
31
  }
31
32
  if (!StringUtils_1.StringUtils.isStringNullEmptyOrUndefined(name)) {
32
- this.logger.debug(`enterAction(${name})`);
33
+ this.logger.debug(LogMessages_1.LogMessage.ROOT_ACTION_ENTER, { name });
33
34
  DynatraceBridge_1.DynatraceNative.enterManualActionWithParent(name, childKey, this.key, platform === null || platform === void 0 ? void 0 : platform.toString());
34
35
  return new DynatraceAction_1.DynatraceAction(childKey, name, true);
35
36
  }
36
37
  else {
37
- this.logger.debug(`enterAction(${name}): Action Name was empty or null! Action will have no effect.`);
38
+ this.logger.debug(LogMessages_1.LogMessage.ROOT_ACTION_ENTER_NAME_EMPTY, {
39
+ name,
40
+ });
38
41
  return new NullAction_1.NullAction();
39
42
  }
40
43
  }
@@ -4,6 +4,7 @@ exports.DynatraceWebRequestTiming = void 0;
4
4
  const DynatraceBridge_1 = require("./DynatraceBridge");
5
5
  const ConsoleLogger_1 = require("./logging/ConsoleLogger");
6
6
  const StringUtils_1 = require("./util/StringUtils");
7
+ const LogMessages_1 = require("./logging/LogMessages");
7
8
  const logger = new ConsoleLogger_1.ConsoleLogger('DynatraceWebRequestTiming');
8
9
  class DynatraceWebRequestTiming {
9
10
  constructor(requestTag, url) {
@@ -13,11 +14,17 @@ class DynatraceWebRequestTiming {
13
14
  startWebRequestTiming() {
14
15
  if (!StringUtils_1.StringUtils.isStringNullEmptyOrUndefined(this.requestTag) &&
15
16
  !StringUtils_1.StringUtils.isStringNullEmptyOrUndefined(this.url)) {
16
- logger.debug(`startWebRequestTiming() - (${this.url}/${this.requestTag})`);
17
+ logger.debug(LogMessages_1.LogMessage.WEB_REQUEST_TIMING_START, {
18
+ url: this.url,
19
+ requestTag: this.requestTag,
20
+ });
17
21
  DynatraceBridge_1.DynatraceNative.startWebRequestTiming(this.requestTag, this.url);
18
22
  }
19
23
  else {
20
- logger.debug(`startWebRequestTiming(): Web Request Timing could not be created! - (${this.url}/${this.requestTag})`);
24
+ logger.debug(LogMessages_1.LogMessage.WEB_REQUEST_TIMING_START_FAILED, {
25
+ url: this.url,
26
+ requestTag: this.requestTag,
27
+ });
21
28
  }
22
29
  }
23
30
  stopWebRequestTiming(responseCode, responseMessage) {
@@ -28,11 +35,25 @@ class DynatraceWebRequestTiming {
28
35
  !StringUtils_1.StringUtils.isStringNullEmptyOrUndefined(this.url) &&
29
36
  responseCode != null &&
30
37
  !StringUtils_1.StringUtils.isStringNullOrUndefined(responseMessage)) {
31
- logger.debug(`stopWebRequestTiming(${responseCode}, ${responseMessage}, ${requestSize}, ${responseSize}) - (${this.url}/${this.requestTag})`);
38
+ logger.debug(LogMessages_1.LogMessage.WEB_REQUEST_TIMING_STOP, {
39
+ responseCode,
40
+ responseMessage,
41
+ requestSize,
42
+ responseSize,
43
+ url: this.url,
44
+ requestTag: this.requestTag,
45
+ });
32
46
  DynatraceBridge_1.DynatraceNative.stopWebRequestTimingWithSize(this.requestTag, this.url, responseCode, responseMessage, requestSize, responseSize);
33
47
  }
34
48
  else {
35
- logger.debug(`stopWebRequestTiming(${responseCode}, ${responseMessage}, ${requestSize}, ${responseSize}): Web Request Timing could not be stopped! - (${this.url}/${this.requestTag})`);
49
+ logger.debug(LogMessages_1.LogMessage.WEB_REQUEST_TIMING_STOP_FAILED, {
50
+ responseCode,
51
+ responseMessage,
52
+ requestSize,
53
+ responseSize,
54
+ url: this.url,
55
+ requestTag: this.requestTag,
56
+ });
36
57
  }
37
58
  }
38
59
  getRequestTag() {
@@ -5,6 +5,7 @@ const DynatraceInternal_1 = require("./DynatraceInternal");
5
5
  const Dynatrace_1 = require("./Dynatrace");
6
6
  const StringUtils_1 = require("./util/StringUtils");
7
7
  const ConsoleLogger_1 = require("./logging/ConsoleLogger");
8
+ const LogMessages_1 = require("./logging/LogMessages");
8
9
  const react_native_1 = require("react-native");
9
10
  const logger = new ConsoleLogger_1.ConsoleLogger('ErrorHandler');
10
11
  let manualStart = { enabled: false };
@@ -27,12 +28,18 @@ const reportErrorToDynatrace = (exception, isFatal, reportFatalErrorAsCrashFromC
27
28
  isFatal = false;
28
29
  }
29
30
  DynatraceInternal_1.DynatraceInternal.reportErrorFromHandler(isFatal, String(exception.name), adjustedReason(exception.message), exception.stack != null ? exception.stack : '', reportFatalErrorAsCrash);
30
- logger.debug(`reportErrorToDynatrace(${exception}, ${isFatal})`);
31
+ logger.debug(LogMessages_1.LogMessage.REPORT_ERROR_TO_DYNATRACE, {
32
+ exception: String(exception),
33
+ isFatal: String(isFatal),
34
+ });
31
35
  }
32
36
  }
33
37
  else {
34
38
  Dynatrace_1.Dynatrace.reportError(String(exception), -1);
35
- logger.debug(`reportErrorToDynatrace(${exception}, -1)`);
39
+ logger.debug(LogMessages_1.LogMessage.REPORT_ERROR_TO_DYNATRACE, {
40
+ exception: String(exception),
41
+ isFatal: '-1',
42
+ });
36
43
  }
37
44
  return react_native_1.Platform.OS === 'ios' ? 200 : 0;
38
45
  };
@@ -3,21 +3,32 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ConsoleLogger = void 0;
4
4
  const ConfigurationHandler_1 = require("../configuration/ConfigurationHandler");
5
5
  const LogLevel_1 = require("./LogLevel");
6
+ const LogMessages_1 = require("./LogMessages");
7
+ const LogType_1 = require("./LogType");
6
8
  class ConsoleLogger {
7
9
  constructor(name, logLevel) {
8
10
  this.name = name;
9
11
  this.level = logLevel;
10
12
  }
11
- debug(msg) {
13
+ debug(key, ...args) {
12
14
  if (this.isDebugEnabled()) {
13
- this.logMessage(msg);
15
+ this.logMessage(key, args[0]);
14
16
  }
15
17
  }
16
- info(msg) {
17
- this.logMessage(msg);
18
+ info(key, ...args) {
19
+ this.logMessage(key, args[0]);
18
20
  }
19
- logMessage(msg) {
20
- console.log(`[${this.name}]: ${msg}`);
21
+ logMessage(key, params) {
22
+ var _a;
23
+ const entry = LogMessages_1.LOG_MESSAGES[key];
24
+ let message = typeof entry.template === 'function'
25
+ ? entry.template(params)
26
+ : entry.template;
27
+ if ('documentationUri' in entry && entry.documentationUri) {
28
+ message += `\nFor more information, see: ${entry.documentationUri}`;
29
+ }
30
+ const logType = 'logType' in entry ? (_a = entry.logType) !== null && _a !== void 0 ? _a : LogType_1.LogType.Info : LogType_1.LogType.Info;
31
+ console.log(`[${logType}][${this.name}]: ${message}`);
21
32
  }
22
33
  isDebugEnabled() {
23
34
  return (this.level === LogLevel_1.LogLevel.Debug ||