From 3e53f66f1f15ca401efbac041aefe3f362ffb90e Mon Sep 17 00:00:00 2001 From: kholood Date: Tue, 23 Jul 2024 10:06:08 +0300 Subject: [PATCH 1/4] fix(android): add w3c external trace attributes placeholder --- .../src/main/java/com/instabug/flutter/modules/ApmApi.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/android/src/main/java/com/instabug/flutter/modules/ApmApi.java b/android/src/main/java/com/instabug/flutter/modules/ApmApi.java index ea14dc9e4..5038364ff 100644 --- a/android/src/main/java/com/instabug/flutter/modules/ApmApi.java +++ b/android/src/main/java/com/instabug/flutter/modules/ApmApi.java @@ -14,6 +14,7 @@ import com.instabug.flutter.generated.ApmPigeon; import com.instabug.flutter.util.Reflection; import com.instabug.flutter.util.ThreadManager; +import com.instabug.apm.networkinterception.cp.APMCPNetworkLog; import io.flutter.plugin.common.BinaryMessenger; @@ -210,9 +211,9 @@ public void networkLogAndroid(@NonNull Map data) { serverErrorMessage = (String) data.get("serverErrorMessage"); } - Method method = Reflection.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); + Method method = Reflection.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); if (method != null) { - method.invoke(apmNetworkLogger, requestStartTime, requestDuration, requestHeaders, requestBody, requestBodySize, requestMethod, requestUrl, requestContentType, responseHeaders, responseBody, responseBodySize, statusCode, responseContentType, errorMessage, gqlQueryName, serverErrorMessage); + method.invoke(apmNetworkLogger, requestStartTime, requestDuration, requestHeaders, requestBody, requestBodySize, requestMethod, requestUrl, requestContentType, responseHeaders, responseBody, responseBodySize, statusCode, responseContentType, errorMessage, gqlQueryName, serverErrorMessage,null); } else { Log.e(TAG, "APMNetworkLogger.log was not found by reflection"); } From 4b0d23eb2c797c669fd5fc160113088dfd2a1a70 Mon Sep 17 00:00:00 2001 From: kholood Date: Wed, 31 Jul 2024 16:59:57 +0300 Subject: [PATCH 2/4] chore: add changelog --- CHANGELOG.md | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 099defc51..8d5fa7497 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,10 @@ - Deprecate Experiments APIs `Instabug.addExperiments`, `Instabug.removeExperiments` and `Instabug.clearAllExperiments` in favor of the new Feature Flags APIs ([#471](https://github.com/Instabug/Instabug-Flutter/pull/471)). +### Fixed + +- Fix APM network logging on Android ([#491](https://github.com/Instabug/Instabug-Flutter/pull/491)). + ## [13.2.0](https://github.com/Instabug/Instabug-Flutter/compare/v13.1.1...v13.2.0) ### Added @@ -169,18 +173,18 @@ Below is a list of all the affected APIs: - - `APM.startExecutionTrace` - - `BugReporting.setOnInvokeCallback` - - `BugReporting.setOnDismissCallback` - - `Instabug.getTags` - - `Instabug.getUserAttributeForKey` - - `Instabug.getUserAttributes` - - `Replies.getUnreadRepliesCount` - - `Replies.hasChats` - - `Replies.setOnNewReplyReceivedCallback` - - `Surveys.hasRespondToSurvey` - - `Surveys.setOnShowCallback` - - `Surveys.setOnDismissCallback` + - `APM.startExecutionTrace` + - `BugReporting.setOnInvokeCallback` + - `BugReporting.setOnDismissCallback` + - `Instabug.getTags` + - `Instabug.getUserAttributeForKey` + - `Instabug.getUserAttributes` + - `Replies.getUnreadRepliesCount` + - `Replies.hasChats` + - `Replies.setOnNewReplyReceivedCallback` + - `Surveys.hasRespondToSurvey` + - `Surveys.setOnShowCallback` + - `Surveys.setOnDismissCallback` ## [11.12.0](https://github.com/Instabug/Instabug-Flutter/compare/v11.10.1...v11.12.0) (May 30, 2023) @@ -257,10 +261,10 @@ - Deprecates Instabug.enableAndroid and Instabug.disableAndroid APIs in favour of the new API Instabug.setEnabled, which works on both platforms - Deprecates callbacks in favor of return values in the following APIs: - 1. Replies.getUnreadRepliesCount - 2. Replies.hasChats - 3. Surveys.hasRespondedToSurvey - 4. Surveys.getAvailableSurveys + 1. Replies.getUnreadRepliesCount + 2. Replies.hasChats + 3. Surveys.hasRespondedToSurvey + 4. Surveys.getAvailableSurveys ## 11.3.0 (2022-09-30) From 6d2b1cc6ec42390bff35213e0f371ec9abb31e19 Mon Sep 17 00:00:00 2001 From: kholood Date: Wed, 31 Jul 2024 17:04:52 +0300 Subject: [PATCH 3/4] chore: fix formatting --- .../src/main/java/com/instabug/flutter/modules/ApmApi.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/android/src/main/java/com/instabug/flutter/modules/ApmApi.java b/android/src/main/java/com/instabug/flutter/modules/ApmApi.java index 5038364ff..b28545745 100644 --- a/android/src/main/java/com/instabug/flutter/modules/ApmApi.java +++ b/android/src/main/java/com/instabug/flutter/modules/ApmApi.java @@ -211,9 +211,9 @@ public void networkLogAndroid(@NonNull Map data) { serverErrorMessage = (String) data.get("serverErrorMessage"); } - Method method = Reflection.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); + Method method = Reflection.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); if (method != null) { - method.invoke(apmNetworkLogger, requestStartTime, requestDuration, requestHeaders, requestBody, requestBodySize, requestMethod, requestUrl, requestContentType, responseHeaders, responseBody, responseBodySize, statusCode, responseContentType, errorMessage, gqlQueryName, serverErrorMessage,null); + method.invoke(apmNetworkLogger, requestStartTime, requestDuration, requestHeaders, requestBody, requestBodySize, requestMethod, requestUrl, requestContentType, responseHeaders, responseBody, responseBodySize, statusCode, responseContentType, errorMessage, gqlQueryName, serverErrorMessage, null); } else { Log.e(TAG, "APMNetworkLogger.log was not found by reflection"); } From 28d6c145bd748bf67781e6a68fd889024ff60b76 Mon Sep 17 00:00:00 2001 From: Ahmed Mahmoud Date: Mon, 5 Aug 2024 11:30:17 +0300 Subject: [PATCH 4/4] test: update apm network log signature in mocks --- android/src/test/java/com/instabug/flutter/ApmApiTest.java | 3 ++- .../src/test/java/com/instabug/flutter/util/GlobalMocks.java | 5 +++-- .../test/java/com/instabug/flutter/util/MockReflected.java | 3 ++- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/android/src/test/java/com/instabug/flutter/ApmApiTest.java b/android/src/test/java/com/instabug/flutter/ApmApiTest.java index 677da604b..935521466 100644 --- a/android/src/test/java/com/instabug/flutter/ApmApiTest.java +++ b/android/src/test/java/com/instabug/flutter/ApmApiTest.java @@ -262,7 +262,8 @@ public void testNetworkLogAndroid() { responseContentType, errorDomain, null, - serverErrorMessage + serverErrorMessage, + null )); mAPMNetworkLogger.close(); diff --git a/android/src/test/java/com/instabug/flutter/util/GlobalMocks.java b/android/src/test/java/com/instabug/flutter/util/GlobalMocks.java index c25d8f46e..0795acf77 100644 --- a/android/src/test/java/com/instabug/flutter/util/GlobalMocks.java +++ b/android/src/test/java/com/instabug/flutter/util/GlobalMocks.java @@ -8,6 +8,7 @@ import android.net.Uri; import android.util.Log; +import com.instabug.apm.networkinterception.cp.APMCPNetworkLog; import com.instabug.crash.models.IBGNonFatalException; import org.json.JSONObject; @@ -69,10 +70,10 @@ public static void setUp() throws NoSuchMethodException { .when(() -> Reflection.getMethod(Class.forName("com.instabug.library.Instabug"), "setCurrentPlatform", int.class)) .thenReturn(mSetCurrentPlatform); - Method mAPMNetworkLog = MockReflected.class.getDeclaredMethod("apmNetworkLog", 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); + Method mAPMNetworkLog = MockReflected.class.getDeclaredMethod("apmNetworkLog", 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); mAPMNetworkLog.setAccessible(true); reflection - .when(() -> Reflection.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)) + .when(() -> Reflection.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)) .thenReturn(mAPMNetworkLog); Method mCrashReportException = MockReflected.class.getDeclaredMethod("crashReportException", JSONObject.class, boolean.class); diff --git a/android/src/test/java/com/instabug/flutter/util/MockReflected.java b/android/src/test/java/com/instabug/flutter/util/MockReflected.java index 255664165..42c85664b 100644 --- a/android/src/test/java/com/instabug/flutter/util/MockReflected.java +++ b/android/src/test/java/com/instabug/flutter/util/MockReflected.java @@ -3,6 +3,7 @@ import android.graphics.Bitmap; import androidx.annotation.Nullable; +import com.instabug.apm.networkinterception.cp.APMCPNetworkLog; import com.instabug.crash.models.IBGNonFatalException; import org.json.JSONObject; @@ -33,7 +34,7 @@ public static void setCurrentPlatform(int platform) {} /** * APMNetworkLogger.log */ - public static void apmNetworkLog(long requestStartTime, long requestDuration, String requestHeaders, String requestBody, long requestBodySize, String requestMethod, String requestUrl, String responseHeaders, String responseBody, String responseBodySize, long statusCode, int responseContentType, String errorMessage, String var18, @Nullable String gqlQueryName, @Nullable String serverErrorMessage) {} + public static void apmNetworkLog(long requestStartTime, long requestDuration, String requestHeaders, String requestBody, long requestBodySize, String requestMethod, String requestUrl, String responseHeaders, String responseBody, String responseBodySize, long statusCode, int responseContentType, String errorMessage, String var18, @Nullable String gqlQueryName, @Nullable String serverErrorMessage, @Nullable APMCPNetworkLog.W3CExternalTraceAttributes w3CExternalTraceAttributes) {} /** * CrashReporting.reportException