@truewatchtech/react-native-mobile 0.3.15-alpha.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/FTMobileReactNativeSDK.podspec +22 -0
- package/LICENSE +201 -0
- package/README.md +37 -0
- package/android/.project +17 -0
- package/android/.settings/org.eclipse.buildship.core.prefs +13 -0
- package/android/build.gradle +183 -0
- package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/android/gradle/wrapper/gradle-wrapper.properties +5 -0
- package/android/gradle.properties +5 -0
- package/android/gradlew +185 -0
- package/android/gradlew.bat +89 -0
- package/android/local.properties +8 -0
- package/android/src/main/AndroidManifest.xml +4 -0
- package/android/src/main/AndroidManifestNew.xml +4 -0
- package/android/src/main/java/com/ft/sdk/InnerClassProxy.java +8 -0
- package/android/src/main/java/com/ft/sdk/reactnative/FTLogImpl.java +133 -0
- package/android/src/main/java/com/ft/sdk/reactnative/FTMobileImpl.java +198 -0
- package/android/src/main/java/com/ft/sdk/reactnative/FTRUMImpl.java +267 -0
- package/android/src/main/java/com/ft/sdk/reactnative/FTTraceImpl.java +89 -0
- package/android/src/main/java/com/ft/sdk/reactnative/utils/ReactNativeUtils.java +59 -0
- package/android/src/newarch/java/com/ft/sdk/reactnative/FTLogModule.java +39 -0
- package/android/src/newarch/java/com/ft/sdk/reactnative/FTMobileModule.java +69 -0
- package/android/src/newarch/java/com/ft/sdk/reactnative/FTRUMModule.java +84 -0
- package/android/src/newarch/java/com/ft/sdk/reactnative/FTTraceModule.java +34 -0
- package/android/src/oldarch/java/com/ft/sdk/reactnative/FTLogModule.java +36 -0
- package/android/src/oldarch/java/com/ft/sdk/reactnative/FTMobileModule.java +69 -0
- package/android/src/oldarch/java/com/ft/sdk/reactnative/FTRUMModule.java +70 -0
- package/android/src/oldarch/java/com/ft/sdk/reactnative/FTTraceModule.java +30 -0
- package/android/src/rnpost74/java/com/ft/sdk/reactnative/FTMobilePackage.java +71 -0
- package/android/src/rnpre74/java/com/ft/sdk/reactnative/FTMobilePackage.java +33 -0
- package/ios/.idea/.name +1 -0
- package/ios/.idea/ios.iml +2 -0
- package/ios/.idea/modules.xml +8 -0
- package/ios/.idea/vcs.xml +6 -0
- package/ios/.idea/xcode.xml +4 -0
- package/ios/FTMobileReactNative.h +18 -0
- package/ios/FTMobileReactNative.m +183 -0
- package/ios/FTReactNativeLog.h +18 -0
- package/ios/FTReactNativeLog.m +60 -0
- package/ios/FTReactNativeRUM.h +19 -0
- package/ios/FTReactNativeRUM.m +173 -0
- package/ios/FTReactNativeTrace.h +20 -0
- package/ios/FTReactNativeTrace.m +58 -0
- package/ios/FTReactNativeUtils.h +16 -0
- package/ios/FTReactNativeUtils.m +32 -0
- package/ios/FtMobileAgent.xcodeproj/project.pbxproj +293 -0
- package/ios/FtMobileAgent.xcodeproj/project.xcworkspace/contents.xcworkspacedata +4 -0
- package/ios/FtMobileAgent.xcodeproj/project.xcworkspace/xcuserdata/Brandon.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/ios/FtMobileAgent.xcodeproj/project.xcworkspace/xcuserdata/Brandon.xcuserdatad/xcschemes/xcschememanagement.plist +5 -0
- package/ios/FtMobileAgent.xcodeproj/xcuserdata/Brandon.xcuserdatad/xcschemes/FtMobileAgent.xcscheme +56 -0
- package/ios/FtMobileAgent.xcodeproj/xcuserdata/Brandon.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
- package/ios/RCTVersion.h +8 -0
- package/lib/commonjs/ft_logger.js +70 -0
- package/lib/commonjs/ft_logger.js.map +1 -0
- package/lib/commonjs/ft_mobile_agent.js +93 -0
- package/lib/commonjs/ft_mobile_agent.js.map +1 -0
- package/lib/commonjs/ft_rum.js +143 -0
- package/lib/commonjs/ft_rum.js.map +1 -0
- package/lib/commonjs/ft_tracing.js +61 -0
- package/lib/commonjs/ft_tracing.js.map +1 -0
- package/lib/commonjs/index.js +138 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/rum/FTRumActionTracking.js +214 -0
- package/lib/commonjs/rum/FTRumActionTracking.js.map +1 -0
- package/lib/commonjs/rum/FTRumErrorTracking.js +99 -0
- package/lib/commonjs/rum/FTRumErrorTracking.js.map +1 -0
- package/lib/commonjs/version.js +9 -0
- package/lib/commonjs/version.js.map +1 -0
- package/lib/module/ft_logger.js +64 -0
- package/lib/module/ft_logger.js.map +1 -0
- package/lib/module/ft_mobile_agent.js +88 -0
- package/lib/module/ft_mobile_agent.js.map +1 -0
- package/lib/module/ft_rum.js +138 -0
- package/lib/module/ft_rum.js.map +1 -0
- package/lib/module/ft_tracing.js +56 -0
- package/lib/module/ft_tracing.js.map +1 -0
- package/lib/module/index.js +8 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/rum/FTRumActionTracking.js +206 -0
- package/lib/module/rum/FTRumActionTracking.js.map +1 -0
- package/lib/module/rum/FTRumErrorTracking.js +92 -0
- package/lib/module/rum/FTRumErrorTracking.js.map +1 -0
- package/lib/module/version.js +3 -0
- package/lib/module/version.js.map +1 -0
- package/lib/typescript/ft_logger.d.ts +52 -0
- package/lib/typescript/ft_mobile_agent.d.ts +123 -0
- package/lib/typescript/ft_rum.d.ts +200 -0
- package/lib/typescript/ft_tracing.d.ts +47 -0
- package/lib/typescript/index.d.ts +7 -0
- package/lib/typescript/rum/FTRumActionTracking.d.ts +15 -0
- package/lib/typescript/rum/FTRumErrorTracking.d.ts +11 -0
- package/lib/typescript/version.d.ts +1 -0
- package/package.json +167 -0
- package/scripts/replace-react-require.js +52 -0
- package/src/ft_logger.tsx +77 -0
- package/src/ft_mobile_agent.tsx +162 -0
- package/src/ft_rum.tsx +247 -0
- package/src/ft_tracing.tsx +79 -0
- package/src/index.tsx +17 -0
- package/src/rum/FTRumActionTracking.tsx +232 -0
- package/src/rum/FTRumErrorTracking.tsx +110 -0
- package/src/version.ts +2 -0
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
package com.ft.sdk.reactnative;
|
|
2
|
+
|
|
3
|
+
import com.ft.sdk.reactnative.BuildConfig;
|
|
4
|
+
import com.facebook.react.bridge.Promise;
|
|
5
|
+
import com.facebook.react.bridge.ReactMethod;
|
|
6
|
+
import com.facebook.react.bridge.ReadableMap;
|
|
7
|
+
import com.ft.sdk.DetectFrequency;
|
|
8
|
+
import com.ft.sdk.FTInTakeUrlHandler;
|
|
9
|
+
import com.ft.sdk.FTRUMConfig;
|
|
10
|
+
import com.ft.sdk.FTRUMGlobalManager;
|
|
11
|
+
import com.ft.sdk.FTSdk;
|
|
12
|
+
import com.ft.sdk.RUMCacheDiscard;
|
|
13
|
+
import com.ft.sdk.garble.bean.AppState;
|
|
14
|
+
import com.ft.sdk.garble.bean.NetStatusBean;
|
|
15
|
+
import com.ft.sdk.garble.bean.ResourceParams;
|
|
16
|
+
import com.ft.sdk.reactnative.utils.ReactNativeUtils;
|
|
17
|
+
|
|
18
|
+
import java.util.HashMap;
|
|
19
|
+
import java.util.Map;
|
|
20
|
+
|
|
21
|
+
public class FTRUMImpl {
|
|
22
|
+
|
|
23
|
+
private static final String DEFAULT_ERROR_TYPE = "reactnative_crash";
|
|
24
|
+
public static final String NAME = "FTReactNativeRUM";
|
|
25
|
+
|
|
26
|
+
@ReactMethod
|
|
27
|
+
public void setConfig(ReadableMap context, Promise promise) {
|
|
28
|
+
Map<String, Object> map = context.toHashMap();
|
|
29
|
+
String rumAppId = (String) map.get("androidAppId");
|
|
30
|
+
Double sampleRate = (Double) map.get("sampleRate");
|
|
31
|
+
Double sessionOnErrorSampleRate = (Double) map.get("sessionOnErrorSampleRate");
|
|
32
|
+
|
|
33
|
+
Boolean enableNativeUserAction = (Boolean) map.get("enableNativeUserAction");
|
|
34
|
+
Boolean enableNativeUserView = (Boolean) map.get("enableNativeUserView");
|
|
35
|
+
Boolean enableNativeUserResource = (Boolean) map.get("enableNativeUserResource");
|
|
36
|
+
Boolean enableResourceHostIP = (Boolean) map.get("enableResourceHostIP");
|
|
37
|
+
Boolean enableTrackNativeCrash = (Boolean) map.get("enableTrackNativeCrash");
|
|
38
|
+
Boolean enableTrackNativeAppANR = (Boolean) map.get("enableTrackNativeAppANR");
|
|
39
|
+
Boolean enableTrackNativeFreeze = (Boolean) map.get("enableTrackNativeFreeze");
|
|
40
|
+
Double nativeFreezeDurationMs = (Double) map.get("nativeFreezeDurationMs");
|
|
41
|
+
Integer monitorType = ReactNativeUtils.convertToNativeInt(map.get("errorMonitorType"));
|
|
42
|
+
Integer deviceMonitorType = ReactNativeUtils.convertToNativeInt(map.get("deviceMonitorType"));
|
|
43
|
+
Integer detectFrequency = ReactNativeUtils.convertToNativeInt(map.get("detectFrequency"));
|
|
44
|
+
Map<String, Object> globalContext = (Map<String, Object>) map.get("globalContext");
|
|
45
|
+
Integer rumCacheLimitCount = ReactNativeUtils.convertToNativeInt(map.get("rumCacheLimitCount"));
|
|
46
|
+
Integer rumDiscardStrategy = ReactNativeUtils.convertToNativeInt(map.get("rumDiscardStrategy"));
|
|
47
|
+
|
|
48
|
+
FTRUMConfig rumConfig = new FTRUMConfig().setRumAppId(rumAppId);
|
|
49
|
+
if (sampleRate != null) {
|
|
50
|
+
rumConfig.setSamplingRate(sampleRate.floatValue());
|
|
51
|
+
}
|
|
52
|
+
if (sessionOnErrorSampleRate != null) {
|
|
53
|
+
rumConfig.setSessionErrorSampleRate(sessionOnErrorSampleRate.floatValue());
|
|
54
|
+
}
|
|
55
|
+
if (enableNativeUserAction != null) {
|
|
56
|
+
rumConfig.setEnableTraceUserAction(enableNativeUserAction);
|
|
57
|
+
}
|
|
58
|
+
if (enableNativeUserView != null) {
|
|
59
|
+
rumConfig.setEnableTraceUserView(enableNativeUserView);
|
|
60
|
+
}
|
|
61
|
+
if (enableNativeUserResource != null) {
|
|
62
|
+
rumConfig.setEnableTraceUserResource(enableNativeUserResource);
|
|
63
|
+
}
|
|
64
|
+
if (enableResourceHostIP != null) {
|
|
65
|
+
rumConfig.setEnableResourceHostIP(enableResourceHostIP);
|
|
66
|
+
}
|
|
67
|
+
if (enableTrackNativeCrash != null) {
|
|
68
|
+
rumConfig.setEnableTrackAppCrash(enableTrackNativeCrash);
|
|
69
|
+
}
|
|
70
|
+
if (enableTrackNativeFreeze != null) {
|
|
71
|
+
if (nativeFreezeDurationMs != null) {
|
|
72
|
+
rumConfig.setEnableTrackAppUIBlock(enableTrackNativeFreeze, nativeFreezeDurationMs.longValue());
|
|
73
|
+
} else {
|
|
74
|
+
rumConfig.setEnableTrackAppUIBlock(enableTrackNativeFreeze);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if (enableTrackNativeAppANR != null) {
|
|
78
|
+
rumConfig.setEnableTrackAppANR(enableTrackNativeAppANR);
|
|
79
|
+
}
|
|
80
|
+
if (monitorType != null) {
|
|
81
|
+
rumConfig.setExtraMonitorTypeWithError(monitorType);
|
|
82
|
+
}
|
|
83
|
+
if (deviceMonitorType != null) {
|
|
84
|
+
if (detectFrequency != null) {
|
|
85
|
+
DetectFrequency deviceMetricsDetectFrequency;
|
|
86
|
+
switch (detectFrequency) {
|
|
87
|
+
case 1:
|
|
88
|
+
deviceMetricsDetectFrequency = DetectFrequency.FREQUENT;
|
|
89
|
+
break;
|
|
90
|
+
case 2:
|
|
91
|
+
deviceMetricsDetectFrequency = DetectFrequency.RARE;
|
|
92
|
+
break;
|
|
93
|
+
default:
|
|
94
|
+
deviceMetricsDetectFrequency = DetectFrequency.DEFAULT;
|
|
95
|
+
break;
|
|
96
|
+
}
|
|
97
|
+
rumConfig.setDeviceMetricsMonitorType(deviceMonitorType, deviceMetricsDetectFrequency);
|
|
98
|
+
} else {
|
|
99
|
+
rumConfig.setDeviceMetricsMonitorType(deviceMonitorType);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
if (globalContext != null) {
|
|
103
|
+
for (Map.Entry<String, Object> entry : globalContext.entrySet()) {
|
|
104
|
+
rumConfig.addGlobalContext(entry.getKey(), entry.getValue().toString());
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
if (BuildConfig.DEBUG) {
|
|
108
|
+
rumConfig.setResourceUrlHandler(new FTInTakeUrlHandler() {
|
|
109
|
+
@Override
|
|
110
|
+
public boolean isInTakeUrl(String url) {
|
|
111
|
+
return ReactNativeUtils.isReactNativeDevUrl(url);
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
if (rumCacheLimitCount != null) {
|
|
116
|
+
rumConfig.setRumCacheLimitCount(rumCacheLimitCount);
|
|
117
|
+
}
|
|
118
|
+
if (rumDiscardStrategy != null) {
|
|
119
|
+
RUMCacheDiscard rumCacheDiscard = RUMCacheDiscard.DISCARD;
|
|
120
|
+
if (rumDiscardStrategy == 1) {
|
|
121
|
+
rumCacheDiscard = RUMCacheDiscard.DISCARD_OLDEST;
|
|
122
|
+
}
|
|
123
|
+
rumConfig.setRumCacheDiscardStrategy(rumCacheDiscard);
|
|
124
|
+
}
|
|
125
|
+
FTSdk.initRUMWithConfig(rumConfig);
|
|
126
|
+
//LogUtils.d("configCheck","rumConfig:"+new Gson().toJson(rumConfig));
|
|
127
|
+
promise.resolve(null);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
@ReactMethod
|
|
131
|
+
public void startAction(String actionName, String actionType, ReadableMap map, Promise promise) {
|
|
132
|
+
if (map != null) {
|
|
133
|
+
FTRUMGlobalManager.get().startAction(actionName, actionType, map.toHashMap());
|
|
134
|
+
} else {
|
|
135
|
+
FTRUMGlobalManager.get().startAction(actionName, actionType);
|
|
136
|
+
}
|
|
137
|
+
promise.resolve(null);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
@ReactMethod
|
|
141
|
+
public void addAction(String actionName, String actionType, ReadableMap map, Promise promise) {
|
|
142
|
+
if (map != null) {
|
|
143
|
+
FTRUMGlobalManager.get().addAction(actionName, actionType, map.toHashMap());
|
|
144
|
+
} else {
|
|
145
|
+
FTRUMGlobalManager.get().addAction(actionName, actionType);
|
|
146
|
+
}
|
|
147
|
+
promise.resolve(null);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
@ReactMethod
|
|
151
|
+
public void onCreateView(String viewName, Double duration, Promise promise) {
|
|
152
|
+
FTRUMGlobalManager.get().onCreateView(viewName, duration.longValue());
|
|
153
|
+
promise.resolve(null);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
@ReactMethod
|
|
157
|
+
public void startView(String viewName, ReadableMap map, Promise promise) {
|
|
158
|
+
if (map != null) {
|
|
159
|
+
FTRUMGlobalManager.get().startView(viewName, map.toHashMap());
|
|
160
|
+
} else {
|
|
161
|
+
FTRUMGlobalManager.get().startView(viewName);
|
|
162
|
+
}
|
|
163
|
+
promise.resolve(null);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
@ReactMethod
|
|
167
|
+
public void stopView(ReadableMap map, Promise promise) {
|
|
168
|
+
if (map != null) {
|
|
169
|
+
FTRUMGlobalManager.get().stopView(map.toHashMap());
|
|
170
|
+
} else {
|
|
171
|
+
FTRUMGlobalManager.get().stopView();
|
|
172
|
+
}
|
|
173
|
+
promise.resolve(null);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
@ReactMethod
|
|
177
|
+
public void addError(String stack, String message, ReadableMap map, Promise promise) {
|
|
178
|
+
if (map != null) {
|
|
179
|
+
FTRUMGlobalManager.get().addError(stack, message, DEFAULT_ERROR_TYPE, AppState.RUN, map.toHashMap());
|
|
180
|
+
} else {
|
|
181
|
+
FTRUMGlobalManager.get().addError(stack, message, DEFAULT_ERROR_TYPE, AppState.RUN);
|
|
182
|
+
}
|
|
183
|
+
promise.resolve(null);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
@ReactMethod
|
|
187
|
+
public void addErrorWithType(String errorType, String stack, String message, ReadableMap map, Promise promise) {
|
|
188
|
+
if (map != null) {
|
|
189
|
+
FTRUMGlobalManager.get().addError(stack, message, errorType, AppState.RUN, map.toHashMap());
|
|
190
|
+
} else {
|
|
191
|
+
FTRUMGlobalManager.get().addError(stack, message, errorType, AppState.RUN);
|
|
192
|
+
}
|
|
193
|
+
promise.resolve(null);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
@ReactMethod
|
|
197
|
+
public void startResource(String key, ReadableMap map, Promise promise) {
|
|
198
|
+
if (map != null) {
|
|
199
|
+
FTRUMGlobalManager.get().startResource(key, map.toHashMap());
|
|
200
|
+
} else {
|
|
201
|
+
FTRUMGlobalManager.get().startResource(key);
|
|
202
|
+
}
|
|
203
|
+
promise.resolve(null);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
@ReactMethod
|
|
207
|
+
public void stopResource(String key, ReadableMap map, Promise promise) {
|
|
208
|
+
if (map != null) {
|
|
209
|
+
FTRUMGlobalManager.get().stopResource(key, map.toHashMap());
|
|
210
|
+
} else {
|
|
211
|
+
FTRUMGlobalManager.get().stopResource(key);
|
|
212
|
+
}
|
|
213
|
+
promise.resolve(null);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
@ReactMethod
|
|
217
|
+
public void addResource(String key, ReadableMap resourceContext, ReadableMap metricsContext, Promise promise) {
|
|
218
|
+
HashMap<String, Object> resourceMap = resourceContext.toHashMap();
|
|
219
|
+
String url = (String) resourceMap.get("url");
|
|
220
|
+
HashMap<String, String> responseHeader = (HashMap<String, String>) resourceMap.get("responseHeader");
|
|
221
|
+
HashMap<String, String> requestHeader = (HashMap<String, String>) resourceMap.get("requestHeader");
|
|
222
|
+
String method = (String) resourceMap.get("httpMethod");
|
|
223
|
+
Integer resourceStatus = ReactNativeUtils.convertToNativeInt(resourceMap.get("resourceStatus"));
|
|
224
|
+
String responseBody = (String) resourceMap.get("responseBody");
|
|
225
|
+
// String responseConnection = (String) resourceMap.get("responseConnection");
|
|
226
|
+
// String responseContentType = (String) resourceMap.get("responseContentType");
|
|
227
|
+
// String responseContentEncoding = (String) resourceMap.get("responseContentEncoding");
|
|
228
|
+
|
|
229
|
+
// HashMap<String, Object> metricsMap = metricsContext.toHashMap();
|
|
230
|
+
// Long fetchStartTime = ReactNativeUtils.convertToNativeLong(metricsMap.get("fetchStartTime"));
|
|
231
|
+
// Long tcpStartTime = ReactNativeUtils.convertToNativeLong(metricsMap.get("tcpStartTime"));
|
|
232
|
+
// Long tcpEndTime = ReactNativeUtils.convertToNativeLong(metricsMap.get("tcpEndTime"));
|
|
233
|
+
// Long dnsStartTime = ReactNativeUtils.convertToNativeLong(metricsMap.get("dnsStartTime"));
|
|
234
|
+
// Long dnsEndTime = ReactNativeUtils.convertToNativeLong(metricsMap.get("dnsEndTime"));
|
|
235
|
+
// Long responseStartTime = ReactNativeUtils.convertToNativeLong(metricsMap.get("responseStartTime"));
|
|
236
|
+
// Long responseEndTime = ReactNativeUtils.convertToNativeLong(metricsMap.get("responseEndTime"));
|
|
237
|
+
// Long sslStartTime = ReactNativeUtils.convertToNativeLong(metricsMap.get("sslStartTime"));
|
|
238
|
+
// Long sslEndTime = ReactNativeUtils.convertToNativeLong(metricsMap.get("sslEndTime"));
|
|
239
|
+
|
|
240
|
+
ResourceParams params = new ResourceParams();
|
|
241
|
+
params.url = url != null ? url : "";
|
|
242
|
+
params.responseHeader = responseHeader != null ? responseHeader.toString() : "";
|
|
243
|
+
params.resourceMethod = method;
|
|
244
|
+
params.requestHeader = requestHeader != null ? requestHeader.toString() : "";
|
|
245
|
+
params.resourceStatus = resourceStatus != null ? resourceStatus : 0;
|
|
246
|
+
params.responseBody = responseBody != null ? responseBody : "";
|
|
247
|
+
// params.responseConnection = responseConnection != null ? responseConnection : "";
|
|
248
|
+
// params.responseContentType = responseContentType != null ? responseContentType : "";
|
|
249
|
+
// params.responseContentEncoding = responseContentEncoding != null ? responseContentEncoding : "";
|
|
250
|
+
|
|
251
|
+
//not implement
|
|
252
|
+
NetStatusBean netStatusBean = new NetStatusBean();
|
|
253
|
+
// netStatusBean.fetchStartTime = (fetchStartTime != null ? fetchStartTime : -1L);
|
|
254
|
+
// netStatusBean.tcpStartTime = (tcpStartTime != null ? tcpStartTime : -1L);
|
|
255
|
+
// netStatusBean.tcpEndTime = (tcpEndTime != null ? tcpEndTime : -1L);
|
|
256
|
+
// netStatusBean.dnsStartTime = (dnsStartTime != null ? dnsStartTime : -1L);
|
|
257
|
+
// netStatusBean.dnsEndTime = (dnsEndTime != null ? dnsEndTime : -1L);
|
|
258
|
+
// netStatusBean.responseStartTime = (responseStartTime != null ? responseStartTime : -1L);
|
|
259
|
+
// netStatusBean.responseEndTime = (responseEndTime != null ? responseEndTime : -1L);
|
|
260
|
+
// netStatusBean.sslStartTime = (sslStartTime != null ? sslStartTime : -1L);
|
|
261
|
+
// netStatusBean.sslEndTime = (sslEndTime != null ? sslEndTime : -1L);
|
|
262
|
+
|
|
263
|
+
FTRUMGlobalManager.get().addResource(key, params, netStatusBean);
|
|
264
|
+
promise.resolve(null);
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
package com.ft.sdk.reactnative;
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.bridge.Promise;
|
|
4
|
+
import com.facebook.react.bridge.ReactMethod;
|
|
5
|
+
import com.facebook.react.bridge.ReadableMap;
|
|
6
|
+
import com.facebook.react.bridge.WritableNativeMap;
|
|
7
|
+
import com.ft.sdk.FTSdk;
|
|
8
|
+
import com.ft.sdk.FTTraceConfig;
|
|
9
|
+
import com.ft.sdk.FTTraceManager;
|
|
10
|
+
import com.ft.sdk.TraceType;
|
|
11
|
+
import com.ft.sdk.reactnative.utils.ReactNativeUtils;
|
|
12
|
+
|
|
13
|
+
import java.util.HashMap;
|
|
14
|
+
import java.util.Map;
|
|
15
|
+
|
|
16
|
+
public class FTTraceImpl {
|
|
17
|
+
public static final String NAME = "FTReactNativeTrace";
|
|
18
|
+
private static final String TAG = "FTTraceModule";
|
|
19
|
+
|
|
20
|
+
@ReactMethod
|
|
21
|
+
public void setConfig(ReadableMap context, Promise promise) {
|
|
22
|
+
Map<String, Object> map = context.toHashMap();
|
|
23
|
+
Double sampleRate = (Double) map.get("sampleRate");
|
|
24
|
+
Integer traceType = ReactNativeUtils.convertToNativeInt(map.get("traceType"));
|
|
25
|
+
Boolean enableLinkRUMData = (Boolean) map.get("enableLinkRUMData");
|
|
26
|
+
Boolean enableNativeAutoTrace = (Boolean) map.get("enableNativeAutoTrace");
|
|
27
|
+
|
|
28
|
+
FTTraceConfig traceConfig = new FTTraceConfig();
|
|
29
|
+
if (sampleRate != null) {
|
|
30
|
+
traceConfig.setSamplingRate(sampleRate.floatValue());
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
if (traceType != null) {
|
|
34
|
+
switch (traceType) {
|
|
35
|
+
case 0:
|
|
36
|
+
traceConfig.setTraceType(TraceType.DDTRACE);
|
|
37
|
+
break;
|
|
38
|
+
case 1:
|
|
39
|
+
traceConfig.setTraceType(TraceType.ZIPKIN_MULTI_HEADER);
|
|
40
|
+
break;
|
|
41
|
+
case 2:
|
|
42
|
+
traceConfig.setTraceType(TraceType.ZIPKIN_SINGLE_HEADER);
|
|
43
|
+
break;
|
|
44
|
+
case 3:
|
|
45
|
+
traceConfig.setTraceType(TraceType.TRACEPARENT);
|
|
46
|
+
break;
|
|
47
|
+
case 4:
|
|
48
|
+
traceConfig.setTraceType(TraceType.SKYWALKING);
|
|
49
|
+
break;
|
|
50
|
+
case 5:
|
|
51
|
+
traceConfig.setTraceType(TraceType.JAEGER);
|
|
52
|
+
break;
|
|
53
|
+
default:
|
|
54
|
+
traceConfig.setTraceType(TraceType.JAEGER);
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (enableLinkRUMData != null) {
|
|
60
|
+
traceConfig.setEnableLinkRUMData(enableLinkRUMData);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
if (enableNativeAutoTrace != null) {
|
|
64
|
+
traceConfig.setEnableAutoTrace(enableNativeAutoTrace);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
FTSdk.initTraceWithConfig(traceConfig);
|
|
68
|
+
//LogUtils.d("configCheck","traceConfig:"+new Gson().toJson(traceConfig));
|
|
69
|
+
promise.resolve(null);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
@ReactMethod
|
|
73
|
+
public void getTraceHeaderFields(String url, String key, Promise promise) {
|
|
74
|
+
HashMap<String, String> hashMap = null;
|
|
75
|
+
if (key == null) {
|
|
76
|
+
hashMap = FTTraceManager.get().getTraceHeader(url);
|
|
77
|
+
} else {
|
|
78
|
+
hashMap = FTTraceManager.get().getTraceHeader(key, url);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
WritableNativeMap map = new WritableNativeMap();
|
|
82
|
+
if (hashMap != null) {
|
|
83
|
+
for (Map.Entry<String, String> entry : hashMap.entrySet()) {
|
|
84
|
+
map.putString(entry.getKey(), entry.getValue());
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
promise.resolve(map);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
package com.ft.sdk.reactnative.utils;
|
|
2
|
+
|
|
3
|
+
import java.util.regex.Pattern;
|
|
4
|
+
import java.util.regex.Matcher;
|
|
5
|
+
|
|
6
|
+
public class ReactNativeUtils {
|
|
7
|
+
|
|
8
|
+
private static final Pattern[] RN_DEV_INNER_URL_REGEX = {
|
|
9
|
+
Pattern.compile("^http://((10|172|192).[0-9]+.[0-9]+.[0-9]+|localhost|127.0.0.1):808[0-9]/logs$"), // expo
|
|
10
|
+
Pattern.compile("^http://localhost:808[0-9]/(hot|symbolicate|message|inspector).*$") // rn
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
private ReactNativeUtils() {
|
|
14
|
+
// Private constructor to prevent instantiation
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Convert React Native number to int
|
|
19
|
+
*/
|
|
20
|
+
public static Integer convertToNativeInt(Object value) {
|
|
21
|
+
if (value == null) {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
try {
|
|
25
|
+
return (int) Double.parseDouble(value.toString());
|
|
26
|
+
} catch (NumberFormatException e) {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Convert React Native number to long
|
|
33
|
+
*/
|
|
34
|
+
public static Long convertToNativeLong(Object value) {
|
|
35
|
+
if (value == null) {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
try {
|
|
39
|
+
return (long) Double.parseDouble(value.toString());
|
|
40
|
+
} catch (NumberFormatException e) {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Check if it's a React Native debug stage generated URL request
|
|
47
|
+
* @param url
|
|
48
|
+
* @return
|
|
49
|
+
*/
|
|
50
|
+
public static boolean isReactNativeDevUrl(String url) {
|
|
51
|
+
for (Pattern pattern : RN_DEV_INNER_URL_REGEX) {
|
|
52
|
+
Matcher matcher = pattern.matcher(url);
|
|
53
|
+
if (matcher.matches()) {
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
package com.ft.sdk.reactnative;
|
|
2
|
+
|
|
3
|
+
import androidx.annotation.NonNull;
|
|
4
|
+
|
|
5
|
+
import com.facebook.react.turbomodule.core.interfaces.TurboModule;
|
|
6
|
+
import com.facebook.react.bridge.ReactApplicationContext;
|
|
7
|
+
import com.facebook.react.module.annotations.ReactModule;
|
|
8
|
+
import com.facebook.react.bridge.ReactMethod;
|
|
9
|
+
import com.facebook.react.bridge.Promise;
|
|
10
|
+
import com.facebook.react.bridge.ReadableMap;
|
|
11
|
+
|
|
12
|
+
@ReactModule(name = FTLogModule.NAME)
|
|
13
|
+
public class FTLogModule extends NativeFTLogSpec {
|
|
14
|
+
private final FTLogInterface logImpl = new FTLogImpl();
|
|
15
|
+
|
|
16
|
+
public FTLogModule(ReactApplicationContext reactContext) {
|
|
17
|
+
super(reactContext);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
@Override
|
|
21
|
+
public String getName() {
|
|
22
|
+
return NAME;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
@ReactMethod
|
|
26
|
+
public void logConfig(ReadableMap context, Promise promise) {
|
|
27
|
+
logImpl.logConfig(context, promise);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
@ReactMethod
|
|
31
|
+
public void logging(String content, int logStatus, ReadableMap map, Promise promise) {
|
|
32
|
+
logImpl.logging(content, logStatus, map, promise);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
@ReactMethod
|
|
36
|
+
public void logWithStatusString(String content, String logStatus, ReadableMap map, Promise promise) {
|
|
37
|
+
logImpl.logWithStatusString(content, logStatus, map, promise);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
package com.ft.sdk.reactnative;
|
|
2
|
+
|
|
3
|
+
import androidx.annotation.NonNull;
|
|
4
|
+
import com.facebook.react.turbomodule.core.interfaces.TurboModule;
|
|
5
|
+
import com.facebook.react.bridge.ReactApplicationContext;
|
|
6
|
+
import com.facebook.react.module.annotations.ReactModule;
|
|
7
|
+
import com.facebook.react.bridge.ReactMethod;
|
|
8
|
+
import com.facebook.react.bridge.Promise;
|
|
9
|
+
import com.facebook.react.bridge.ReadableMap;
|
|
10
|
+
|
|
11
|
+
@ReactModule(name = FTMobileModule.NAME)
|
|
12
|
+
public class FTMobileModule extends NativeFTMobileSpec {
|
|
13
|
+
public static final String NAME = FTMobileImpl.NAME;
|
|
14
|
+
private final FTMobileImpl impl = new FTMobileImpl();
|
|
15
|
+
|
|
16
|
+
public FTMobileModule(ReactApplicationContext reactContext) {
|
|
17
|
+
super(reactContext);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
@Override
|
|
21
|
+
public String getName() {
|
|
22
|
+
return NAME;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
@ReactMethod
|
|
26
|
+
public void sdkConfig(ReadableMap context, Promise promise) {
|
|
27
|
+
impl.sdkConfig(context, promise);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
@ReactMethod
|
|
31
|
+
public void bindRUMUserData(String userId, String userName, String userEmail, ReadableMap extra, Promise promise) {
|
|
32
|
+
impl.bindRUMUserData(userId, userName, userEmail, extra, promise);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
@ReactMethod
|
|
36
|
+
public void unbindRUMUserData(Promise promise) {
|
|
37
|
+
impl.unbindRUMUserData(promise);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
@ReactMethod
|
|
41
|
+
public void flushSyncData(Promise promise) {
|
|
42
|
+
impl.flushSyncData(promise);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
@ReactMethod
|
|
46
|
+
public void appendGlobalContext(ReadableMap extra, Promise promise) {
|
|
47
|
+
impl.appendGlobalContext(extra, promise);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
@ReactMethod
|
|
51
|
+
public void appendLogGlobalContext(ReadableMap extra, Promise promise) {
|
|
52
|
+
impl.appendLogGlobalContext(extra, promise);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
@ReactMethod
|
|
56
|
+
public void appendRUMGlobalContext(ReadableMap extra, Promise promise) {
|
|
57
|
+
impl.appendRUMGlobalContext(extra, promise);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
@ReactMethod
|
|
61
|
+
public void shutDown(Promise promise) {
|
|
62
|
+
impl.shutDown(promise);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
@ReactMethod
|
|
66
|
+
public void clearAllData(Promise promise) {
|
|
67
|
+
impl.clearAllData(promise);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
package com.ft.sdk.reactnative;
|
|
2
|
+
|
|
3
|
+
import androidx.annotation.NonNull;
|
|
4
|
+
import com.facebook.react.turbomodule.core.interfaces.TurboModule;
|
|
5
|
+
import com.facebook.react.bridge.ReactApplicationContext;
|
|
6
|
+
import com.facebook.react.module.annotations.ReactModule;
|
|
7
|
+
import com.facebook.react.bridge.ReactMethod;
|
|
8
|
+
import com.facebook.react.bridge.Promise;
|
|
9
|
+
import com.facebook.react.bridge.ReadableMap;
|
|
10
|
+
|
|
11
|
+
@ReactModule(name = FTRUMModule.NAME)
|
|
12
|
+
public class FTRUMModule extends NativeFTRUMSpec {
|
|
13
|
+
public static final String NAME = FTRUMImpl.NAME;
|
|
14
|
+
private final FTRUMImpl impl = new FTRUMImpl();
|
|
15
|
+
|
|
16
|
+
public FTRUMModule(ReactApplicationContext reactContext) {
|
|
17
|
+
super(reactContext);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
@Override
|
|
21
|
+
public String getName() {
|
|
22
|
+
return NAME;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
@Override
|
|
26
|
+
@ReactMethod
|
|
27
|
+
public void setConfig(ReadableMap context, Promise promise) {
|
|
28
|
+
impl.setConfig(context, promise);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
@Override
|
|
32
|
+
@ReactMethod
|
|
33
|
+
public void startAction(String actionName, String actionType, ReadableMap map, Promise promise) {
|
|
34
|
+
impl.startAction(actionName, actionType, map, promise);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
@Override
|
|
38
|
+
@ReactMethod
|
|
39
|
+
public void addAction(String actionName, String actionType, ReadableMap map, Promise promise) {
|
|
40
|
+
impl.addAction(actionName, actionType, map, promise);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
@Override
|
|
44
|
+
@ReactMethod
|
|
45
|
+
public void onCreateView(String viewName, Double duration, Promise promise) {
|
|
46
|
+
impl.onCreateView(viewName, duration, promise);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
@Override
|
|
50
|
+
@ReactMethod
|
|
51
|
+
public void startView(String viewName, ReadableMap map, Promise promise) {
|
|
52
|
+
impl.startView(viewName, map, promise);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
@Override
|
|
56
|
+
@ReactMethod
|
|
57
|
+
public void stopView(ReadableMap map, Promise promise) {
|
|
58
|
+
impl.stopView(map, promise);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
@Override
|
|
62
|
+
@ReactMethod
|
|
63
|
+
public void addError(String stack, String message, ReadableMap map, Promise promise) {
|
|
64
|
+
impl.addError(stack, message, map, promise);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
@Override
|
|
68
|
+
@ReactMethod
|
|
69
|
+
public void addErrorWithType(String errorType, String stack, String message, ReadableMap map, Promise promise) {
|
|
70
|
+
impl.addErrorWithType(errorType, stack, message, map, promise);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
@Override
|
|
74
|
+
@ReactMethod
|
|
75
|
+
public void startResource(String key, ReadableMap map, Promise promise) {
|
|
76
|
+
impl.startResource(key, map, promise);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
@Override
|
|
80
|
+
@ReactMethod
|
|
81
|
+
public void stopResource(String key, ReadableMap map, Promise promise) {
|
|
82
|
+
impl.stopResource(key, map, promise);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
package com.ft.sdk.reactnative;
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.bridge.Promise;
|
|
4
|
+
import com.facebook.react.bridge.ReactApplicationContext;
|
|
5
|
+
import com.facebook.react.bridge.ReactContextBaseJavaModule;
|
|
6
|
+
import com.facebook.react.bridge.ReactMethod;
|
|
7
|
+
import com.facebook.react.bridge.ReadableMap;
|
|
8
|
+
|
|
9
|
+
@ReactModule(name = FTTraceModule.NAME)
|
|
10
|
+
public class FTTraceModule extends NativeFTTraceSpec{
|
|
11
|
+
public static final String NAME = FTTraceImpl.NAME;
|
|
12
|
+
private final FTTraceImpl impl = new FTTraceImpl();
|
|
13
|
+
|
|
14
|
+
public FTTraceModule(ReactApplicationContext reactContext) {
|
|
15
|
+
super(reactContext);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
@Override
|
|
19
|
+
public String getName() {
|
|
20
|
+
return NAME;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
@Override
|
|
24
|
+
@ReactMethod
|
|
25
|
+
public void setConfig(ReadableMap context, Promise promise) {
|
|
26
|
+
impl.setConfig(context, promise);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
@Override
|
|
30
|
+
@ReactMethod
|
|
31
|
+
public void getTraceHeaderFields(String url, String key, Promise promise) {
|
|
32
|
+
impl.getTraceHeaderFields(url, key, promise);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
package com.ft.sdk.reactnative;
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.bridge.Promise;
|
|
4
|
+
import com.facebook.react.bridge.ReactApplicationContext;
|
|
5
|
+
import com.facebook.react.bridge.ReactContextBaseJavaModule;
|
|
6
|
+
import com.facebook.react.bridge.ReactMethod;
|
|
7
|
+
import com.facebook.react.bridge.ReadableMap;
|
|
8
|
+
|
|
9
|
+
public class FTLogModule extends ReactContextBaseJavaModule {
|
|
10
|
+
private final FTLogImpl logImpl = new FTLogImpl();
|
|
11
|
+
|
|
12
|
+
public FTLogModule(ReactApplicationContext reactContext) {
|
|
13
|
+
super(reactContext);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
@Override
|
|
17
|
+
public String getName() {
|
|
18
|
+
return FTLogImpl.NAME;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
@ReactMethod
|
|
22
|
+
public void logConfig(ReadableMap context, Promise promise) {
|
|
23
|
+
logImpl.logConfig(context, promise);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
@ReactMethod
|
|
27
|
+
public void logging(String content, int logStatus, ReadableMap map, Promise promise) {
|
|
28
|
+
logImpl.logging(content, logStatus, map, promise);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
@ReactMethod
|
|
32
|
+
public void logWithStatusString(String content, String logStatus, ReadableMap map, Promise promise) {
|
|
33
|
+
logImpl.logWithStatusString(content, logStatus, map, promise);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
}
|