|
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) {
|
@@ -221,4 +242,62 @@ public void run() {
|
221 | 242 | }
|
222 | 243 | });
|
223 | 244 | }
|
| 245 | + |
| 246 | + /** |
| 247 | + * Send Apm network log by Reflection |
| 248 | + */ |
| 249 | + @ReactMethod |
| 250 | + public void networkLog(String networkData) throws JSONException { |
| 251 | + try{ |
| 252 | + APMNetworkLogger apmNetworkLogger = new APMNetworkLogger(); |
| 253 | + JSONObject jsonObject = new JSONObject(networkData); |
| 254 | + final String requestUrl = (String) jsonObject.get("url"); |
| 255 | + final String requestBody = (String) jsonObject.get("requestBody"); |
| 256 | + final String responseBody = (String) jsonObject.get("responseBody"); |
| 257 | + final String requestMethod = (String) jsonObject.get("method"); |
| 258 | + //-------------------------------------------- |
| 259 | + final String requestContentType = (String) jsonObject.get("requestContentType"); |
| 260 | + final String responseContentType = (String) jsonObject.get("contentType"); |
| 261 | + //-------------------------------------------- |
| 262 | + final long requestBodySize = ((Number) jsonObject.get("requestBodySize")).longValue(); |
| 263 | + final long responseBodySize = ((Number) jsonObject.get("responseBodySize")).longValue(); |
| 264 | + //-------------------------------------------- |
| 265 | + final String errorDomain = (String) jsonObject.get("errorDomain"); |
| 266 | + final Integer statusCode = (Integer) jsonObject.get("responseCode"); |
| 267 | + final long requestDuration = ((Number) jsonObject.get("duration")).longValue(); |
| 268 | + final long requestStartTime = ((Number) jsonObject.get("startTime")).longValue() * 1000; |
| 269 | + final String requestHeaders = (String) jsonObject.get("requestHeaders").toString(); |
| 270 | + final String responseHeaders = (String) jsonObject.get("responseHeaders").toString(); |
| 271 | + final String errorMessage; |
| 272 | + if(errorDomain.equals("")) { |
| 273 | + errorMessage = null; |
| 274 | + } else { |
| 275 | + errorMessage = errorDomain; |
| 276 | + } |
| 277 | + //-------------------------------------------- |
| 278 | + String gqlQueryName = null; |
| 279 | + if(jsonObject.has("gqlQueryName")){ |
| 280 | + gqlQueryName = (String) jsonObject.get("gqlQueryName"); |
| 281 | + } |
| 282 | + final String serverErrorMessage = (String) jsonObject.get("serverErrorMessage"); |
| 283 | + |
| 284 | + try { |
| 285 | + 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); |
| 286 | + if (method != null) { |
| 287 | + method.invoke(apmNetworkLogger, requestStartTime, requestDuration, requestHeaders, requestBody, requestBodySize, requestMethod, requestUrl, requestContentType, responseHeaders, responseBody, responseBodySize, statusCode, responseContentType, errorMessage, gqlQueryName, serverErrorMessage); |
| 288 | + } else { |
| 289 | + Log.e("IB-CP-Bridge", "apmNetworkLogByReflection was not found by reflection"); |
| 290 | + } |
| 291 | + } catch (ClassNotFoundException e) { |
| 292 | + e.printStackTrace(); |
| 293 | + } catch (IllegalAccessException e) { |
| 294 | + e.printStackTrace(); |
| 295 | + } catch (InvocationTargetException e) { |
| 296 | + e.printStackTrace(); |
| 297 | + } |
| 298 | + } |
| 299 | + catch(Exception e) { |
| 300 | + e.printStackTrace(); |
| 301 | + } |
| 302 | + } |
224 | 303 | }
|
0 commit comments