|
4 | 4 | import android.os.Handler; |
5 | 5 | import android.os.Looper; |
6 | 6 | import android.os.SystemClock; |
| 7 | +import android.util.Log; |
7 | 8 |
|
8 | 9 | import com.facebook.react.bridge.Callback; |
9 | 10 | import com.facebook.react.bridge.ReactApplicationContext; |
10 | 11 | import com.facebook.react.bridge.ReactContextBaseJavaModule; |
11 | 12 | import com.facebook.react.bridge.ReactMethod; |
12 | 13 | import com.instabug.apm.APM; |
13 | 14 | import com.instabug.apm.model.ExecutionTrace; |
| 15 | +import com.instabug.apm.networking.APMNetworkLogger; |
14 | 16 | import com.instabug.bug.BugReporting; |
15 | 17 | import com.instabug.chat.Chats; |
16 | 18 | import com.instabug.library.Feature; |
17 | 19 | import com.instabug.reactlibrary.utils.InstabugUtil; |
18 | 20 | import com.instabug.reactlibrary.utils.MainThreadHandler; |
19 | 21 |
|
| 22 | +import org.json.JSONException; |
| 23 | +import org.json.JSONObject; |
| 24 | + |
| 25 | +import java.io.File; |
| 26 | +import java.lang.reflect.InvocationTargetException; |
| 27 | +import java.lang.reflect.Method; |
| 28 | + |
| 29 | +import java.io.File; |
| 30 | +import java.lang.reflect.InvocationTargetException; |
| 31 | +import java.lang.reflect.Method; |
| 32 | +import java.util.ArrayList; |
20 | 33 | import java.util.HashMap; |
| 34 | +import java.util.Iterator; |
| 35 | +import java.util.LinkedHashMap; |
| 36 | +import java.util.List; |
| 37 | +import java.util.Locale; |
| 38 | +import java.util.Map; |
| 39 | +import com.instabug.library.Platform; |
21 | 40 |
|
22 | 41 | import javax.annotation.Nonnull; |
23 | 42 |
|
| 43 | +import static com.instabug.reactlibrary.utils.InstabugUtil.getMethod; |
| 44 | + |
24 | 45 | public class RNInstabugAPMModule extends ReactContextBaseJavaModule { |
25 | 46 |
|
26 | 47 | public RNInstabugAPMModule(ReactApplicationContext reactApplicationContext) { |
@@ -238,4 +259,62 @@ public void run() { |
238 | 259 | } |
239 | 260 | }); |
240 | 261 | } |
| 262 | + |
| 263 | + /** |
| 264 | + * Send Apm network log by Reflection |
| 265 | + */ |
| 266 | + @ReactMethod |
| 267 | + public void networkLog(String networkData) throws JSONException { |
| 268 | + try{ |
| 269 | + APMNetworkLogger apmNetworkLogger = new APMNetworkLogger(); |
| 270 | + JSONObject jsonObject = new JSONObject(networkData); |
| 271 | + final String requestUrl = (String) jsonObject.get("url"); |
| 272 | + final String requestBody = (String) jsonObject.get("requestBody"); |
| 273 | + final String responseBody = (String) jsonObject.get("responseBody"); |
| 274 | + final String requestMethod = (String) jsonObject.get("method"); |
| 275 | + //-------------------------------------------- |
| 276 | + final String requestContentType = (String) jsonObject.get("requestContentType"); |
| 277 | + final String responseContentType = (String) jsonObject.get("contentType"); |
| 278 | + //-------------------------------------------- |
| 279 | + final long requestBodySize = ((Number) jsonObject.get("requestBodySize")).longValue(); |
| 280 | + final long responseBodySize = ((Number) jsonObject.get("responseBodySize")).longValue(); |
| 281 | + //-------------------------------------------- |
| 282 | + final String errorDomain = (String) jsonObject.get("errorDomain"); |
| 283 | + final Integer statusCode = (Integer) jsonObject.get("responseCode"); |
| 284 | + final long requestDuration = ((Number) jsonObject.get("duration")).longValue(); |
| 285 | + final long requestStartTime = ((Number) jsonObject.get("startTime")).longValue() * 1000; |
| 286 | + final String requestHeaders = (String) jsonObject.get("requestHeaders").toString(); |
| 287 | + final String responseHeaders = (String) jsonObject.get("responseHeaders").toString(); |
| 288 | + final String errorMessage; |
| 289 | + if(errorDomain.equals("")) { |
| 290 | + errorMessage = null; |
| 291 | + } else { |
| 292 | + errorMessage = errorDomain; |
| 293 | + } |
| 294 | + //-------------------------------------------- |
| 295 | + String gqlQueryName = null; |
| 296 | + if(jsonObject.has("gqlQueryName")){ |
| 297 | + gqlQueryName = (String) jsonObject.get("gqlQueryName"); |
| 298 | + } |
| 299 | + final String serverErrorMessage = (String) jsonObject.get("serverErrorMessage"); |
| 300 | + |
| 301 | + try { |
| 302 | + 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); |
| 303 | + if (method != null) { |
| 304 | + method.invoke(apmNetworkLogger, requestStartTime, requestDuration, requestHeaders, requestBody, requestBodySize, requestMethod, requestUrl, requestContentType, responseHeaders, responseBody, responseBodySize, statusCode, responseContentType, errorMessage, gqlQueryName, serverErrorMessage); |
| 305 | + } else { |
| 306 | + Log.e("IB-CP-Bridge", "apmNetworkLogByReflection was not found by reflection"); |
| 307 | + } |
| 308 | + } catch (ClassNotFoundException e) { |
| 309 | + e.printStackTrace(); |
| 310 | + } catch (IllegalAccessException e) { |
| 311 | + e.printStackTrace(); |
| 312 | + } catch (InvocationTargetException e) { |
| 313 | + e.printStackTrace(); |
| 314 | + } |
| 315 | + } |
| 316 | + catch(Exception e) { |
| 317 | + e.printStackTrace(); |
| 318 | + } |
| 319 | + } |
241 | 320 | } |
0 commit comments