Skip to content

Commit 84f9504

Browse files
Support APM JS network calls
1 parent 8b14d9d commit 84f9504

File tree

2 files changed

+41
-14
lines changed

2 files changed

+41
-14
lines changed

ios/RNInstabug/InstabugReactBridge.m

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -351,7 +351,12 @@ - (dispatch_queue_t)methodQueue {
351351
NSString* url = networkData[@"url"];
352352
NSString* method = networkData[@"method"];
353353
NSString* requestBody = networkData[@"requestBody"];
354-
NSString* responseBody = networkData[@"responseBody"];
354+
int64_t requestBodySize = [networkData[@"requestBodySize"] integerValue];
355+
NSString* responseBody = nil;
356+
if (networkData[@"responseBody"] != [NSNull null]) {
357+
responseBody = networkData[@"responseBody"];
358+
}
359+
int64_t responseBodySize = [networkData[@"responseBodySize"] integerValue];
355360
int32_t responseCode = [networkData[@"responseCode"] integerValue];
356361
NSDictionary* requestHeaders = @{};
357362
if([networkData[@"requestHeaders"] isKindOfClass:[NSDictionary class]]){
@@ -362,9 +367,12 @@ - (dispatch_queue_t)methodQueue {
362367
responseHeaders = networkData[@"responseHeaders"];
363368
}
364369
NSString* contentType = networkData[@"contentType"];
365-
double duration = [networkData[@"duration"] doubleValue];
370+
NSString* errorDomain = networkData[@"errorDomain"];
371+
int32_t errorCode = [networkData[@"errorCode"] integerValue];
372+
int64_t startTime = [networkData[@"startTime"] integerValue] * 1000;
373+
int64_t duration = [networkData[@"duration"] doubleValue] * 1000;
366374

367-
SEL networkLogSEL = NSSelectorFromString(@"addNetworkLogWithUrl:method:requestBody:responseBody:responseCode:requestHeaders:responseHeaders:contentType:duration:");
375+
SEL networkLogSEL = NSSelectorFromString(@"addNetworkLogWithUrl:method:requestBody:requestBodySize:responseBody:responseBodySize:responseCode:requestHeaders:responseHeaders:contentType:errorDomain:errorCode:startTime:duration:");
368376

369377
if([[IBGNetworkLogger class] respondsToSelector:networkLogSEL]) {
370378
NSInvocation *inv = [NSInvocation invocationWithMethodSignature:[[IBGNetworkLogger class] methodSignatureForSelector:networkLogSEL]];
@@ -374,12 +382,17 @@ - (dispatch_queue_t)methodQueue {
374382
[inv setArgument:&(url) atIndex:2];
375383
[inv setArgument:&(method) atIndex:3];
376384
[inv setArgument:&(requestBody) atIndex:4];
377-
[inv setArgument:&(responseBody) atIndex:5];
378-
[inv setArgument:&(responseCode) atIndex:6];
379-
[inv setArgument:&(requestHeaders) atIndex:7];
380-
[inv setArgument:&(responseHeaders) atIndex:8];
381-
[inv setArgument:&(contentType) atIndex:9];
382-
[inv setArgument:&(duration) atIndex:10];
385+
[inv setArgument:&(requestBodySize) atIndex:5];
386+
[inv setArgument:&(responseBody) atIndex:6];
387+
[inv setArgument:&(responseBodySize) atIndex:7];
388+
[inv setArgument:&(responseCode) atIndex:8];
389+
[inv setArgument:&(requestHeaders) atIndex:9];
390+
[inv setArgument:&(responseHeaders) atIndex:10];
391+
[inv setArgument:&(contentType) atIndex:11];
392+
[inv setArgument:&(errorDomain) atIndex:12];
393+
[inv setArgument:&(errorCode) atIndex:13];
394+
[inv setArgument:&(startTime) atIndex:14];
395+
[inv setArgument:&(duration) atIndex:15];
383396

384397
[inv invoke];
385398
}

utils/XhrNetworkInterceptor.js

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,19 @@ var network;
1313
const _reset = () => {
1414
network = {
1515
url: '',
16-
requestBody: '',
17-
requestHeaders: {},
1816
method: '',
17+
requestBody: '',
18+
requestBodySize: 0,
1919
responseBody: '',
20+
responseBodySize: 0,
2021
responseCode: 0,
22+
requestHeaders: {},
2123
responseHeaders: {},
2224
contentType: '',
25+
errorDomain: '',
26+
errorCode: 0,
27+
startTime: 0,
2328
duration: 0,
24-
start: 0
2529
};
2630
}
2731

@@ -64,6 +68,12 @@ const XHRInterceptor = {
6468
if (contentTypeString) {
6569
cloneNetwork.contentType = contentTypeString.split(';')[0];
6670
}
71+
const responseBodySizeString = this.getResponseHeader('Content-Length');
72+
if (responseBodySizeString) {
73+
const responseBodySizeNumber = Number(responseBodySizeString);
74+
75+
if (!isNaN(responseBodySizeNumber)) cloneNetwork.responseBodySize = responseBodySizeNumber;
76+
}
6777

6878
if (this.getAllResponseHeaders()) {
6979
const responseHeaders = this.getAllResponseHeaders().split('\r\n');
@@ -77,7 +87,7 @@ const XHRInterceptor = {
7787
}
7888
}
7989
if (this.readyState === this.DONE) {
80-
cloneNetwork.duration = (Date.now() - cloneNetwork.start);
90+
cloneNetwork.duration = (Date.now() - cloneNetwork.startTime);
8191
if (this.status == null) {
8292
cloneNetwork.responseCode = 0;
8393
} else {
@@ -94,7 +104,11 @@ const XHRInterceptor = {
94104
}
95105

96106
if (this._hasError) {
107+
cloneNetwork.errorCode = 0;
108+
cloneNetwork.errorDomain = 'ClientError';
109+
97110
cloneNetwork.requestBody = this._response;
111+
cloneNetwork.responseBody = null;
98112
}
99113
if (onDoneCallback) {
100114
onDoneCallback(cloneNetwork);
@@ -119,7 +133,7 @@ const XHRInterceptor = {
119133
this.upload.addEventListener('progress', downloadUploadProgressCallback);
120134
}
121135

122-
cloneNetwork.start = Date.now();
136+
cloneNetwork.startTime = Date.now();
123137
originalXHRSend.apply(this, arguments);
124138
};
125139
isInterceptorEnabled = true;

0 commit comments

Comments
 (0)