Skip to content

Commit 6ddf770

Browse files
authored
Merge branch 'dev' into feat/export-upload-utils
2 parents 8c1f860 + 635cd47 commit 6ddf770

34 files changed

+1215
-233
lines changed

CHANGELOG.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@
66

77
- Export `uploadSourcemaps` and `uploadSoFiles` utilities in the `instabug-reactnative/upload` sub-package for usage in custom Node.js upload scripts ([#1252](https://github.com/Instabug/Instabug-React-Native/pull/1252)).
88

9+
### Fixed
10+
11+
- Fix APM network logging on Android ([#1253](https://github.com/Instabug/Instabug-React-Native/pull/1253)).
12+
- Fix an OOM (out-of-memory) crash while saving network logs on Android ([#1244](https://github.com/Instabug/Instabug-React-Native/pull/1244)).
13+
914
## [13.2.0](https://github.com/Instabug/Instabug-React-Native/compare/v13.1.1...v13.2.0) (July 7, 2024)
1015

1116
### Changed
@@ -64,6 +69,11 @@
6469

6570
- Adds symbol files upload script ([#1137](https://github.com/Instabug/Instabug-React-Native/pull/1137))
6671
- Support enabling NDK crash capturing on Android ([#1132](https://github.com/Instabug/Instabug-React-Native/pull/1132)).
72+
- Add support for App Flows APIs `APM.startFlow`, `APM.setFlowAttribute` and `APM.endFlow` ([#1138](https://github.com/Instabug/Instabug-React-Native/pull/1138)).
73+
74+
### Deprecated
75+
76+
- Deprecate execution traces APIs `APM.startExecutionTrace`, `Trace.end` and `Trace.setFlowAttribute` in favor of the new app flow APIs ([#1138](https://github.com/Instabug/Instabug-React-Native/pull/1138)).
6777

6878
### Deprecated
6979

@@ -90,6 +100,10 @@
90100

91101
- Bump Instabug Android SDK to v12.8.0 ([#1149](https://github.com/Instabug/Instabug-React-Native/pull/1149)). [See release notes](https://github.com/Instabug/android/releases/tag/v12.8.0).
92102

103+
### Deprecated
104+
105+
- Deprecate Execution Traces APIs `APM.startExecutionTrace`, `Trace.end` and `Trace.setAttribute` in favor of the new App Flows APIs ([#1138](https://github.com/Instabug/Instabug-React-Native/pull/1138)).
106+
93107
## [12.7.1](https://github.com/Instabug/Instabug-React-Native/compare/v12.7.0...v12.7.1) (February 15, 2024)
94108

95109
### Changed

android/src/main/java/com/instabug/reactlibrary/RNInstabugAPMModule.java

Lines changed: 47 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,16 @@
55
import android.util.Log;
66

77
import androidx.annotation.NonNull;
8+
import androidx.annotation.Nullable;
9+
810
import com.facebook.react.bridge.Promise;
911
import com.facebook.react.bridge.ReactApplicationContext;
1012
import com.facebook.react.bridge.ReactContextBaseJavaModule;
1113
import com.facebook.react.bridge.ReactMethod;
1214
import com.instabug.apm.APM;
1315
import com.instabug.apm.model.ExecutionTrace;
1416
import com.instabug.apm.networking.APMNetworkLogger;
17+
import com.instabug.apm.networkinterception.cp.APMCPNetworkLog;
1518
import com.instabug.reactlibrary.utils.MainThreadHandler;
1619

1720
import org.json.JSONException;
@@ -312,56 +315,59 @@ public void run() {
312315
});
313316
}
314317

315-
/**
316-
* Send Apm network log by Reflection
317-
*/
318318
@ReactMethod
319-
public void networkLog(String networkData) throws JSONException {
320-
try{
321-
APMNetworkLogger apmNetworkLogger = new APMNetworkLogger();
322-
JSONObject jsonObject = new JSONObject(networkData);
323-
final String requestUrl = (String) jsonObject.get("url");
324-
final String requestBody = (String) jsonObject.get("requestBody");
325-
final String responseBody = (String) jsonObject.get("responseBody");
326-
final String requestMethod = (String) jsonObject.get("method");
327-
//--------------------------------------------
328-
final String requestContentType = (String) jsonObject.get("requestContentType");
329-
final String responseContentType = (String) jsonObject.get("contentType");
330-
//--------------------------------------------
331-
final long requestBodySize = ((Number) jsonObject.get("requestBodySize")).longValue();
332-
final long responseBodySize = ((Number) jsonObject.get("responseBodySize")).longValue();
333-
//--------------------------------------------
334-
final String errorDomain = (String) jsonObject.get("errorDomain");
335-
final Integer statusCode = (Integer) jsonObject.get("responseCode");
336-
final long requestDuration = ((Number) jsonObject.get("duration")).longValue();
337-
final long requestStartTime = ((Number) jsonObject.get("startTime")).longValue() * 1000;
338-
final String requestHeaders = (String) jsonObject.get("requestHeaders").toString();
339-
final String responseHeaders = (String) jsonObject.get("responseHeaders").toString();
340-
final String errorMessage;
341-
if(errorDomain.equals("")) {
342-
errorMessage = null;
343-
} else {
344-
errorMessage = errorDomain;
345-
}
346-
//--------------------------------------------
347-
String gqlQueryName = null;
348-
if(jsonObject.has("gqlQueryName")){
349-
gqlQueryName = (String) jsonObject.get("gqlQueryName");
350-
}
351-
final String serverErrorMessage = (String) jsonObject.get("serverErrorMessage");
319+
private void networkLogAndroid(final double requestStartTime,
320+
final double requestDuration,
321+
final String requestHeaders,
322+
final String requestBody,
323+
final double requestBodySize,
324+
final String requestMethod,
325+
final String requestUrl,
326+
final String requestContentType,
327+
final String responseHeaders,
328+
final String responseBody,
329+
final double responseBodySize,
330+
final double statusCode,
331+
final String responseContentType,
332+
@Nullable final String errorDomain,
333+
@Nullable final String gqlQueryName,
334+
@Nullable final String serverErrorMessage) {
335+
try {
336+
APMNetworkLogger networkLogger = new APMNetworkLogger();
337+
338+
final boolean hasError = errorDomain != null && !errorDomain.isEmpty();
339+
final String errorMessage = hasError ? errorDomain : null;
352340

353341
try {
354-
Method method = getMethod(Class.forName("com.instabug.apm.networking.APMNetworkLogger"), "log", long.class, long.class, String.class, String.class, long.class, String.class, String.class, String.class, String.class, String.class, long.class, int.class, String.class, String.class, String.class, String.class);
342+
Method method = getMethod(Class.forName("com.instabug.apm.networking.APMNetworkLogger"), "log", long.class, long.class, String.class, String.class, long.class, String.class, String.class, String.class, String.class, String.class, long.class, int.class, String.class, String.class, String.class, String.class, APMCPNetworkLog.W3CExternalTraceAttributes.class);
355343
if (method != null) {
356-
method.invoke(apmNetworkLogger, requestStartTime, requestDuration, requestHeaders, requestBody, requestBodySize, requestMethod, requestUrl, requestContentType, responseHeaders, responseBody, responseBodySize, statusCode, responseContentType, errorMessage, gqlQueryName, serverErrorMessage);
344+
method.invoke(
345+
networkLogger,
346+
(long) requestStartTime,
347+
(long) requestDuration,
348+
requestHeaders,
349+
requestBody,
350+
(long) requestBodySize,
351+
requestMethod,
352+
requestUrl,
353+
requestContentType,
354+
responseHeaders,
355+
responseBody,
356+
(long)responseBodySize,
357+
(int) statusCode,
358+
responseContentType,
359+
errorMessage,
360+
gqlQueryName,
361+
serverErrorMessage,
362+
null
363+
);
357364
} else {
358-
Log.e("IB-CP-Bridge", "apmNetworkLogByReflection was not found by reflection");
365+
Log.e("IB-CP-Bridge", "APMNetworkLogger.log was not found by reflection");
359366
}
360367
} catch (Throwable e) {
361368
e.printStackTrace();
362369
}
363-
}
364-
catch(Throwable e) {
370+
} catch(Throwable e) {
365371
e.printStackTrace();
366372
}
367373
}

android/src/main/java/com/instabug/reactlibrary/RNInstabugReactnativeModule.java

Lines changed: 34 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import android.app.Application;
66
import android.graphics.Bitmap;
77
import android.net.Uri;
8+
import android.util.Log;
89
import android.view.View;
910

1011
import androidx.annotation.UiThread;
@@ -34,6 +35,7 @@
3435
import com.instabug.library.model.NetworkLog;
3536
import com.instabug.library.model.Report;
3637
import com.instabug.library.ui.onboarding.WelcomeMessage;
38+
import com.instabug.library.util.InstabugSDKLogger;
3739
import com.instabug.reactlibrary.utils.ArrayUtil;
3840
import com.instabug.reactlibrary.utils.EventEmitterModule;
3941
import com.instabug.reactlibrary.utils.MainThreadHandler;
@@ -60,7 +62,7 @@
6062
*/
6163
public class RNInstabugReactnativeModule extends EventEmitterModule {
6264

63-
private static final String TAG = RNInstabugReactnativeModule.class.getSimpleName();
65+
private static final String TAG = "IBG-RN-Core";
6466

6567
private InstabugCustomTextPlaceHolder placeHolders;
6668
private static Report currentReport;
@@ -895,27 +897,38 @@ public void run() {
895897
});
896898
}
897899

898-
/**
899-
* Extracts HTTP connection properties. Request method, Headers, Date, Url and Response code
900-
*
901-
* @param jsonObject the JSON object containing all HTTP connection properties
902-
* @throws JSONException
903-
*/
904900
@ReactMethod
905-
public void networkLog(String jsonObject) throws JSONException {
906-
NetworkLog networkLog = new NetworkLog();
907-
String date = System.currentTimeMillis()+"";
908-
networkLog.setDate(date);
909-
JSONObject newJSONObject = new JSONObject(jsonObject);
910-
networkLog.setUrl(newJSONObject.getString("url"));
911-
networkLog.setRequest(newJSONObject.getString("requestBody"));
912-
networkLog.setResponse(newJSONObject.getString("responseBody"));
913-
networkLog.setMethod(newJSONObject.getString("method"));
914-
networkLog.setResponseCode(newJSONObject.getInt("responseCode"));
915-
networkLog.setRequestHeaders(newJSONObject.getString("requestHeaders"));
916-
networkLog.setResponseHeaders(newJSONObject.getString("responseHeaders"));
917-
networkLog.setTotalDuration(newJSONObject.getLong("duration"));
918-
networkLog.insert();
901+
public void networkLogAndroid(final String url,
902+
final String requestBody,
903+
final String responseBody,
904+
final String method,
905+
final double responseCode,
906+
final String requestHeaders,
907+
final String responseHeaders,
908+
final double duration) {
909+
try {
910+
final String date = String.valueOf(System.currentTimeMillis());
911+
912+
NetworkLog networkLog = new NetworkLog();
913+
networkLog.setDate(date);
914+
networkLog.setUrl(url);
915+
networkLog.setMethod(method);
916+
networkLog.setResponseCode((int) responseCode);
917+
networkLog.setTotalDuration((long) duration);
918+
919+
try {
920+
networkLog.setRequest(requestBody);
921+
networkLog.setResponse(responseBody);
922+
networkLog.setRequestHeaders(requestHeaders);
923+
networkLog.setResponseHeaders(responseHeaders);
924+
} catch (OutOfMemoryError | Exception exception) {
925+
Log.d(TAG, "Error: " + exception.getMessage() + "while trying to set network log contents (request body, response body, request headers, and response headers).");
926+
}
927+
928+
networkLog.insert();
929+
} catch (OutOfMemoryError | Exception exception) {
930+
Log.d(TAG, "Error: " + exception.getMessage() + "while trying to insert a network log");
931+
}
919932
}
920933

921934
@UiThread

examples/default/ios/InstabugTests/InstabugSampleTests.m

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#import <Instabug/IBGTypes.h>
1414
#import "IBGConstants.h"
1515
#import "RNInstabug.h"
16+
#import <RNInstabug/IBGNetworkLogger+CP.h>
1617

1718
@protocol InstabugCPTestProtocol <NSObject>
1819
/**
@@ -313,6 +314,61 @@ - (void)testSetWelcomeMessageMode {
313314
OCMVerify([mock setWelcomeMessageMode:welcomeMessageMode]);
314315
}
315316

317+
- (void)testNetworkLogIOS {
318+
id mIBGNetworkLogger = OCMClassMock([IBGNetworkLogger class]);
319+
320+
NSString *url = @"https://api.instabug.com";
321+
NSString *method = @"GET";
322+
NSString *requestBody = @"requestBody";
323+
double requestBodySize = 10;
324+
NSString *responseBody = @"responseBody";
325+
double responseBodySize = 15;
326+
double responseCode = 200;
327+
NSDictionary *requestHeaders = @{ @"accept": @"application/json" };
328+
NSDictionary *responseHeaders = @{ @"cache-control": @"no-store" };
329+
NSString *contentType = @"application/json";
330+
double errorCode = 0;
331+
NSString *errorDomain = nil;
332+
double startTime = 1719847101199;
333+
double duration = 150;
334+
NSString *gqlQueryName = nil;
335+
NSString *serverErrorMessage = nil;
336+
337+
[self.instabugBridge networkLogIOS:url
338+
method:method
339+
requestBody:requestBody
340+
requestBodySize:requestBodySize
341+
responseBody:responseBody
342+
responseBodySize:responseBodySize
343+
responseCode:responseCode
344+
requestHeaders:requestHeaders
345+
responseHeaders:responseHeaders
346+
contentType:contentType
347+
errorDomain:errorDomain
348+
errorCode:errorCode
349+
startTime:startTime
350+
duration:duration
351+
gqlQueryName:gqlQueryName
352+
serverErrorMessage:serverErrorMessage];
353+
354+
OCMVerify([mIBGNetworkLogger addNetworkLogWithUrl:url
355+
method:method
356+
requestBody:requestBody
357+
requestBodySize:requestBodySize
358+
responseBody:responseBody
359+
responseBodySize:responseBodySize
360+
responseCode:responseCode
361+
requestHeaders:requestHeaders
362+
responseHeaders:responseHeaders
363+
contentType:contentType
364+
errorDomain:errorDomain
365+
errorCode:errorCode
366+
startTime:startTime * 1000
367+
duration:duration * 1000
368+
gqlQueryName:gqlQueryName
369+
serverErrorMessage:serverErrorMessage]);
370+
}
371+
316372
- (void)testSetFileAttachment {
317373
id mock = OCMClassMock([Instabug class]);
318374
NSString *fileLocation = @"test";

examples/default/ios/Podfile.lock

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -404,6 +404,8 @@ PODS:
404404
- React-jsinspector (0.72.3)
405405
- React-logger (0.72.3):
406406
- glog
407+
- react-native-background-timer (2.4.1):
408+
- React-Core
407409
- react-native-config (1.5.1):
408410
- react-native-config/App (= 1.5.1)
409411
- react-native-config/App (1.5.1):
@@ -528,6 +530,8 @@ PODS:
528530
- React-jsi (= 0.72.3)
529531
- React-logger (= 0.72.3)
530532
- React-perflogger (= 0.72.3)
533+
- RNCClipboard (1.5.1):
534+
- React-Core
531535
- RNGestureHandler (2.13.4):
532536
- RCT-Folly (= 2021.07.22.00)
533537
- React-Core
@@ -623,6 +627,7 @@ DEPENDENCIES:
623627
- React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`)
624628
- React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`)
625629
- React-logger (from `../node_modules/react-native/ReactCommon/logger`)
630+
- react-native-background-timer (from `../node_modules/react-native-background-timer`)
626631
- react-native-config (from `../node_modules/react-native-config`)
627632
- react-native-google-maps (from `../node_modules/react-native-maps`)
628633
- react-native-maps (from `../node_modules/react-native-maps`)
@@ -645,6 +650,7 @@ DEPENDENCIES:
645650
- React-runtimescheduler (from `../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler`)
646651
- React-utils (from `../node_modules/react-native/ReactCommon/react/utils`)
647652
- ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`)
653+
- "RNCClipboard (from `../node_modules/@react-native-community/clipboard`)"
648654
- RNGestureHandler (from `../node_modules/react-native-gesture-handler`)
649655
- RNInstabug (from `../node_modules/instabug-reactnative`)
650656
- RNReanimated (from `../node_modules/react-native-reanimated`)
@@ -720,6 +726,8 @@ EXTERNAL SOURCES:
720726
:path: "../node_modules/react-native/ReactCommon/jsinspector"
721727
React-logger:
722728
:path: "../node_modules/react-native/ReactCommon/logger"
729+
react-native-background-timer:
730+
:path: "../node_modules/react-native-background-timer"
723731
react-native-config:
724732
:path: "../node_modules/react-native-config"
725733
react-native-google-maps:
@@ -764,6 +772,8 @@ EXTERNAL SOURCES:
764772
:path: "../node_modules/react-native/ReactCommon/react/utils"
765773
ReactCommon:
766774
:path: "../node_modules/react-native/ReactCommon"
775+
RNCClipboard:
776+
:path: "../node_modules/@react-native-community/clipboard"
767777
RNGestureHandler:
768778
:path: "../node_modules/react-native-gesture-handler"
769779
RNInstabug:
@@ -818,6 +828,7 @@ SPEC CHECKSUMS:
818828
React-jsiexecutor: 59d1eb03af7d30b7d66589c410f13151271e8006
819829
React-jsinspector: b511447170f561157547bc0bef3f169663860be7
820830
React-logger: c5b527272d5f22eaa09bb3c3a690fee8f237ae95
831+
react-native-background-timer: 17ea5e06803401a379ebf1f20505b793ac44d0fe
821832
react-native-config: 86038147314e2e6d10ea9972022aa171e6b1d4d8
822833
react-native-google-maps: 1bcc1f9f13f798fcf230db7fe476f3566d0bc0a3
823834
react-native-maps: 72a8a903f8a1b53e2c777ba79102078ab502e0bf
@@ -840,6 +851,7 @@ SPEC CHECKSUMS:
840851
React-runtimescheduler: 837c1bebd2f84572db17698cd702ceaf585b0d9a
841852
React-utils: bcb57da67eec2711f8b353f6e3d33bd8e4b2efa3
842853
ReactCommon: 3ccb8fb14e6b3277e38c73b0ff5e4a1b8db017a9
854+
RNCClipboard: 41d8d918092ae8e676f18adada19104fa3e68495
843855
RNGestureHandler: 6e46dde1f87e5f018a54fe5d40cd0e0b942b49ee
844856
RNInstabug: 6fa68cd181533f83154df2ebba000d0c47ca7ba3
845857
RNReanimated: ab2e96c6d5591c3dfbb38a464f54c8d17fb34a87

0 commit comments

Comments
 (0)