@dynatrace/react-native-plugin 2.285.1 → 2.287.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.
package/README.md CHANGED
@@ -29,8 +29,8 @@ If you want to start using this plugin and are not a Dynatrace customer yet, hea
29
29
  ## Agent Versions
30
30
  This agent versions are configured in this plugin:
31
31
 
32
- * Android Agent: 8.285.1.1006
33
- * iOS Agent: 8.285.1.1004
32
+ * Android Agent: 8.287.1.1006
33
+ * iOS Agent: 8.287.2.1009
34
34
 
35
35
  ## Quick Setup
36
36
 
@@ -356,7 +356,11 @@ let timing = new DynatraceWebRequestTiming(url, tag);
356
356
 
357
357
  try {
358
358
  timing.startWebRequestTiming();
359
- let axiosResponse = await axios.get(url);
359
+ let axiosResponse = await axios.get(url, {
360
+ headers: {
361
+ timing.getRequestTagHeader(): tag
362
+ }
363
+ });
360
364
  timing.stopWebRequestTiming(axiosResponse.status, axiosResponse.data);
361
365
  } catch (error) {
362
366
  timing.stopWebRequestTiming(-1, error);
@@ -365,6 +369,26 @@ try {
365
369
  }
366
370
  ```
367
371
 
372
+ There is also the option to report values for request and response size:
373
+
374
+ ```js
375
+ let url = 'https://www.dynatrace.com';
376
+ // You can also use enterAutoAction if desired
377
+ let action = Dynatrace.enterManualAction("Manual Web Request");
378
+ let tag = await action.getRequestTag(url);
379
+ let timing = new DynatraceWebRequestTiming(url, tag);
380
+
381
+ try {
382
+ timing.startWebRequestTiming();
383
+ let axiosResponse = await axios.get(url);
384
+ timing.stopWebRequestTimingWithSize(axiosResponse.status, axiosResponse.data, 122, 63);
385
+ } catch (error) {
386
+ timing.stopWebRequestTiming(-1, error);
387
+ } finally {
388
+ action.leaveAction();
389
+ }
390
+ ```
391
+
368
392
  ### Report values
369
393
 
370
394
  For any open action you can report certain values. The following API is available for action:
@@ -1296,9 +1320,14 @@ If you are struggling with a problem, submit a support ticket to Dynatrace (supp
1296
1320
  <br/><br/>
1297
1321
  ## Changelog
1298
1322
 
1299
- 2.285.1
1323
+ 2.287.1
1324
+ * Update Android (8.287.1.1006) & iOS Agent (8.287.2.1009)
1325
+ * Added request and response size to [manual web request tagging](#manual-web-request-tagging)
1326
+
1327
+ 2.285.2
1328
+ * Fixed bridge module issue for older React Native versions (< 0.65.0)
1300
1329
  * Introduced support for @react-native/metro-babel-transformer
1301
- * Update Android (8.285.1.1006) & iOS Agent (8.285.1.1004)
1330
+ * Update Android (8.287.1.1006) & iOS Agent (8.285.1.1004)
1302
1331
 
1303
1332
  2.283.3
1304
1333
  * Added Auto-Instrumentation for React Native Switch
@@ -70,7 +70,7 @@ repositories {
70
70
  }
71
71
 
72
72
  dependencies {
73
- implementation 'com.dynatrace.agent:agent-android:8.285.1.1006'
73
+ implementation 'com.dynatrace.agent:agent-android:8.287.1.1006'
74
74
  implementation "com.facebook.react:react-native:${safeExtGet('reactNative', '+')}"
75
75
  }
76
76
 
@@ -13,7 +13,8 @@ import com.facebook.react.bridge.ReactApplicationContext;
13
13
  import com.facebook.react.bridge.ReactMethod;
14
14
  import com.facebook.react.bridge.ReadableMapKeySetIterator;
15
15
 
16
- import java.net.MalformedURLException;
16
+ import java.net.URI;
17
+ import java.net.URISyntaxException;
17
18
  import java.util.Hashtable;
18
19
  import java.util.HashMap;
19
20
  import java.util.Map;
@@ -207,13 +208,17 @@ public class DynatraceRNBridgeImpl {
207
208
  }
208
209
 
209
210
  public void stopWebRequestTiming(String requestTag, String url, int responseCode, String responseMessage) {
211
+ stopWebRequestTimingWithSize(requestTag, url, responseCode, responseMessage, -1, -1);
212
+ }
213
+
214
+ public void stopWebRequestTimingWithSize(String requestTag, String url, int responseCode, String responseMessage, long requestSize, long responseSize) {
210
215
  if (requestTag != null) {
211
216
  WebRequestTiming timing = webTimings.get(requestTag);
212
217
  if (timing != null) {
213
218
  try {
214
- timing.stopWebRequestTiming(url, responseCode, responseMessage);
219
+ timing.stopWebRequestTiming(new URI(url), responseCode, responseMessage, requestSize, responseSize);
215
220
  webTimings.remove(requestTag);
216
- } catch (MalformedURLException ex) {
221
+ } catch (URISyntaxException ex) {
217
222
  // do nothing
218
223
  }
219
224
  }
@@ -1,34 +1,57 @@
1
1
  package com.dynatrace.android.agent;
2
2
 
3
3
  import androidx.annotation.Nullable;
4
+ import android.util.Log;
5
+
6
+ import com.facebook.react.ReactPackage;
4
7
  import com.facebook.react.TurboReactPackage;
5
8
  import com.facebook.react.bridge.NativeModule;
6
9
  import com.facebook.react.bridge.ReactApplicationContext;
7
10
  import com.facebook.react.module.model.ReactModuleInfo;
8
11
  import com.facebook.react.module.model.ReactModuleInfoProvider;
12
+ import com.facebook.react.uimanager.ViewManager;
9
13
 
10
14
  import java.util.HashMap;
11
15
  import java.util.Map;
12
16
 
13
- public class DynatraceReactPackage extends TurboReactPackage {
17
+ import java.util.Arrays;
18
+ import java.util.Collections;
19
+ import java.util.List;
20
+
21
+ public class DynatraceReactPackage extends TurboReactPackage implements ReactPackage {
22
+
23
+ @Override
24
+ public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
25
+ return Collections.emptyList();
26
+ }
27
+
28
+ @Override
29
+ public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
30
+ PrivateDTBridge bridge = new PrivateDTBridge(reactContext);
31
+ return Arrays.<NativeModule>asList(new DynatraceRNBridge(reactContext, bridge), bridge);
32
+ }
14
33
 
15
34
  @Override
16
35
  public ReactModuleInfoProvider getReactModuleInfoProvider() {
17
- return () -> {
18
- final Map<String, ReactModuleInfo> moduleInfos = new HashMap<>();
19
- boolean isTurboModule = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED;
20
- moduleInfos.put(
21
- DynatraceRNBridgeImpl.NAME,
22
- new ReactModuleInfo(
23
- DynatraceRNBridgeImpl.NAME,
24
- DynatraceRNBridgeImpl.NAME,
25
- false, // canOverrideExistingModule
26
- false, // needsEagerInit
27
- true, // hasConstants
28
- false, // isCxxModule
29
- isTurboModule // isTurboModule
30
- ));
31
- return moduleInfos;
36
+ final Map<String, ReactModuleInfo> moduleInfos = new HashMap<>();
37
+ boolean isTurboModule = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED;
38
+ moduleInfos.put(
39
+ DynatraceRNBridgeImpl.NAME,
40
+ new ReactModuleInfo(
41
+ DynatraceRNBridgeImpl.NAME,
42
+ DynatraceRNBridgeImpl.NAME,
43
+ false, // canOverrideExistingModule
44
+ false, // needsEagerInit
45
+ true, // hasConstants
46
+ false, // isCxxModule
47
+ isTurboModule // isTurboModule
48
+ ));
49
+
50
+ return new ReactModuleInfoProvider() {
51
+ @Override
52
+ public Map<String, ReactModuleInfo> getReactModuleInfos() {
53
+ return moduleInfos;
54
+ }
32
55
  };
33
56
  }
34
57
 
@@ -41,5 +64,4 @@ public class DynatraceReactPackage extends TurboReactPackage {
41
64
  return null;
42
65
  }
43
66
  }
44
-
45
67
  }
@@ -105,6 +105,11 @@ public class DynatraceRNBridge extends NativeDynatraceBridgeSpec {
105
105
  this.impl.stopWebRequestTiming(requestTag, url, (int) responseCode, responseMessage);
106
106
  }
107
107
 
108
+ @Override
109
+ public void stopWebRequestTimingWithSize(String requestTag, String url, double responseCode, String responseMessage, double requestSize, double responseSize) {
110
+ this.impl.stopWebRequestTimingWithSize(requestTag, url, (int) responseCode, responseMessage, (long) requestSize, (long) responseSize);
111
+ }
112
+
108
113
  @Override
109
114
  public void identifyUser(String user, String platform) {
110
115
  this.impl.identifyUser(user, platform);
@@ -107,6 +107,11 @@ public class DynatraceRNBridge extends ReactContextBaseJavaModule {
107
107
  this.impl.stopWebRequestTiming(requestTag, url, responseCode, responseMessage);
108
108
  }
109
109
 
110
+ @ReactMethod
111
+ public void stopWebRequestTimingWithSize(String requestTag, String url, int responseCode, String responseMessage, double requestSize, double responseSize) {
112
+ this.impl.stopWebRequestTimingWithSize(requestTag, url, responseCode, responseMessage, (long) requestSize, (long) responseSize);
113
+ }
114
+
110
115
  @ReactMethod
111
116
  public void identifyUser(String user, String platform) {
112
117
  this.impl.identifyUser(user, platform);
@@ -1,3 +1,3 @@
1
1
  dependencies {
2
- classpath 'com.dynatrace.tools.android:gradle-plugin:8.285.1.1006'
2
+ classpath 'com.dynatrace.tools.android:gradle-plugin:8.287.1.1006'
3
3
  }
@@ -265,12 +265,17 @@ RCT_EXPORT_METHOD(startWebRequestTiming:(NSString*) requestTag url:(NSString*) u
265
265
 
266
266
  }
267
267
 
268
- RCT_EXPORT_METHOD(stopWebRequestTiming:(NSString*) requestTag url:(NSString*)url responseCode:(nonnull NSNumber*) responseCode responseMessage:(NSString*)responseMessage)
268
+ RCT_EXPORT_METHOD(stopWebRequestTiming:(NSString*) requestTag responseCode:(nonnull NSNumber*) responseCode responseMessage:(NSString*)responseMessage)
269
+ {
270
+ [self stopWebRequestTimingWithSize:requestTag responseCode:responseCode requestSize:-1 responseSize:-1];
271
+ }
272
+
273
+ RCT_EXPORT_METHOD(stopWebRequestTimingWithSize:(NSString*) requestTag responseCode:(nonnull NSNumber*) responseCode responseMessage:(NSString*)responseMessage requestSize:(nonnull NSNumber*) requestSize responseSize:(nonnull NSNumber*) responseSize)
269
274
  {
270
275
  if(requestTag != NULL){
271
276
  DTXWebRequestTiming* timing = [webTimingsDict objectForKey:requestTag];
272
277
  if(timing){
273
- [timing stopWebRequestTiming:[responseCode stringValue]];
278
+ [timing stopWebRequestTiming:[responseCode stringValue] bytesSent:[requestSize longLongValue] bytesReceived:[responseSize longLongValue]];
274
279
  [webTimingsDict removeObjectForKey:requestTag];
275
280
  }
276
281
  }
@@ -10,7 +10,7 @@ class DynatraceWebRequestTiming {
10
10
  this.url = url;
11
11
  }
12
12
  startWebRequestTiming() {
13
- if (this.requestTag != null && !StringUtils_1.StringUtils.isStringNullEmptyOrUndefined(this.url)) {
13
+ if (!StringUtils_1.StringUtils.isStringNullEmptyOrUndefined(this.requestTag) && !StringUtils_1.StringUtils.isStringNullEmptyOrUndefined(this.url)) {
14
14
  DynatraceBridge_1.DynatraceNative.startWebRequestTiming(this.requestTag, this.url);
15
15
  }
16
16
  else {
@@ -18,13 +18,17 @@ class DynatraceWebRequestTiming {
18
18
  }
19
19
  }
20
20
  stopWebRequestTiming(responseCode, responseMessage) {
21
- if (this.requestTag != null && !StringUtils_1.StringUtils.isStringNullEmptyOrUndefined(this.url) &&
22
- responseCode != null && !(Boolean(StringUtils_1.StringUtils.isStringNullOrUndefined(responseMessage)))) {
23
- DynatraceBridge_1.DynatraceNative.stopWebRequestTiming(this.requestTag, this.url, responseCode, responseMessage);
21
+ this.stopWebRequestTimingWithSize(responseCode, responseMessage, -1, -1);
22
+ }
23
+ stopWebRequestTimingWithSize(responseCode, responseMessage, requestSize, responseSize) {
24
+ if (!StringUtils_1.StringUtils.isStringNullEmptyOrUndefined(this.requestTag) && !StringUtils_1.StringUtils.isStringNullEmptyOrUndefined(this.url) &&
25
+ responseCode != null && !StringUtils_1.StringUtils.isStringNullOrUndefined(responseMessage)) {
26
+ DynatraceBridge_1.DynatraceNative.stopWebRequestTimingWithSize(this.requestTag, this.url, responseCode, responseMessage, requestSize, responseSize);
24
27
  }
25
28
  else {
26
- Logger_1.Logger.logDebug(`Web Request Timing could not be stopped! - Request Tag:
27
- ${this.requestTag} Url: ${this.url} responseCode: ${responseCode} responseMessage: ${responseMessage}`);
29
+ Logger_1.Logger.logDebug(`Web Request Timing could not be stopped! - requestTag: ${this.requestTag} ` +
30
+ `url: ${this.url} responseCode: ${responseCode} responseMessage: ${responseMessage} ` +
31
+ `requestSize: ${requestSize} responseSize: ${responseSize}`);
28
32
  }
29
33
  }
30
34
  getRequestTag() {
@@ -6,6 +6,9 @@ class NullWebRequestTiming {
6
6
  stopWebRequestTiming(responseCode, responseMessage) {
7
7
  return;
8
8
  }
9
+ stopWebRequestTimingWithSize(responseCode, responseMessage, requestSize, responseSize) {
10
+ return;
11
+ }
9
12
  getRequestTag() {
10
13
  return '';
11
14
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dynatrace/react-native-plugin",
3
- "version": "2.285.1",
3
+ "version": "2.287.1",
4
4
  "description": "This plugin gives you the ability to use the Dynatrace Mobile agent in your react native application.",
5
5
  "main": "index.js",
6
6
  "types": "typings/react-native-dynatrace.d.ts",
@@ -71,7 +71,7 @@
71
71
  "author": "Dynatrace",
72
72
  "license": "SEE LICENSE IN LICENSE.md",
73
73
  "dependencies": {
74
- "@babel/runtime": "^7.24.0",
74
+ "@babel/runtime": "^7.24.1",
75
75
  "jscodeshift": "^0.15.2",
76
76
  "plist": "^3.1.0",
77
77
  "proxy-polyfill": "^0.3.2",
@@ -111,7 +111,7 @@ Pod::Spec.new do |s|
111
111
  #
112
112
 
113
113
  s.dependency "React"
114
- s.dependency 'Dynatrace', '~> 8.285.1.1004'
114
+ s.dependency 'Dynatrace', '~> 8.287.2.1009'
115
115
 
116
116
  # Allows for better compatibility for older and newer versions
117
117
  if defined?(install_modules_dependencies)
@@ -79,6 +79,9 @@ export interface Spec extends TurboModule {
79
79
  startWebRequestTiming(requestTag: string, url: string): void;
80
80
 
81
81
  stopWebRequestTiming(requestTag: string, url: string, responseCode: number, responseMessage: string): void;
82
+
83
+ stopWebRequestTimingWithSize(requestTag: string, url: string, responseCode: number, responseMessage: string,
84
+ requestSize: number, responseSize: number): void;
82
85
  }
83
86
 
84
87
  // eslint-disable-next-line @typescript-eslint/consistent-type-definitions