Skip to content

Commit

Permalink
NR-334116: allow http header tracking when using noticeNetworkRequest…
Browse files Browse the repository at this point in the history
… manually. Update NRMAAnalyticsTest (#328)
  • Loading branch information
cdillard-NewRelic authored Nov 26, 2024
1 parent 991c772 commit 54fa0f3
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 3 deletions.
4 changes: 4 additions & 0 deletions Agent/Analytics/NRMAAnalytics.mm
Original file line number Diff line number Diff line change
Expand Up @@ -278,6 +278,7 @@ - (BOOL) addInteractionEvent:(NSString*)name
}
}

// New Event System
- (BOOL) addNetworkRequestEvent:(NRMANetworkRequestData *)requestData
withResponse:(NRMANetworkResponseData *)responseData
withNRMAPayload:(NRMAPayload *)payload {
Expand Down Expand Up @@ -517,6 +518,7 @@ - (BOOL) addHTTPErrorEvent:(NRMANetworkRequestData *)requestData
}
}

// Old Event System
- (BOOL)addNetworkRequestEvent:(NRMANetworkRequestData *)requestData
withResponse:(NRMANetworkResponseData *)responseData
withPayload:(std::unique_ptr<const Connectivity::Payload>)payload {
Expand All @@ -528,6 +530,7 @@ - (BOOL)addNetworkRequestEvent:(NRMANetworkRequestData *)requestData
return NO;
}

// Old Event System
- (BOOL)addNetworkErrorEvent:(NRMANetworkRequestData *)requestData
withResponse:(NRMANetworkResponseData *)responseData
withPayload:(std::unique_ptr<const NewRelic::Connectivity::Payload>)payload {
Expand All @@ -541,6 +544,7 @@ - (BOOL)addNetworkErrorEvent:(NRMANetworkRequestData *)requestData
return NO;
}

// Old Event System
- (BOOL)addHTTPErrorEvent:(NRMANetworkRequestData *)requestData
withResponse:(NRMANetworkResponseData *)responseData
withPayload:(std::unique_ptr<const NewRelic::Connectivity::Payload>)payload {
Expand Down
17 changes: 14 additions & 3 deletions Agent/Network/NRMANetworkFacade.mm
Original file line number Diff line number Diff line change
Expand Up @@ -128,8 +128,18 @@ + (void) noticeNetworkRequest:(NSURLRequest*)request
connectionType:connectionType
contentType:[NRMANetworkFacade contentType:response]
bytesSent:bytesSent];
[NRMAHTTPUtilities addTrackedHeaders:request.allHTTPHeaderFields to:networkRequestData];

if (params) {
[NRMAHTTPUtilities addHTTPHeaderTrackingFor:params.allKeys];

NSMutableDictionary *paramsAndHeaders = [NSMutableDictionary dictionaryWithDictionary:params];
[paramsAndHeaders addEntriesFromDictionary:request.allHTTPHeaderFields];
[NRMAHTTPUtilities addTrackedHeaders:paramsAndHeaders to:networkRequestData];

}
else {
[NRMAHTTPUtilities addTrackedHeaders:request.allHTTPHeaderFields to:networkRequestData];
}

NSUInteger modifiedBytesReceived = bytesReceived;
if([response isKindOfClass:[NSHTTPURLResponse class]]) {
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*) response;
Expand All @@ -138,7 +148,7 @@ + (void) noticeNetworkRequest:(NSURLRequest*)request
modifiedBytesReceived = [[NRMAHarvesterConnection gzipData:responseData] length];
}
}

// Failure case
if ([NRMANetworkFacade statusCode:response] >= NRMA_HTTP_STATUS_CODE_ERROR_THRESHOLD) {
if([NRMAFlags shouldEnableNewEventSystem]){
[[[NewRelicAgentInternal sharedInstance] analyticsController] addHTTPErrorEvent:networkRequestData
Expand All @@ -149,6 +159,7 @@ + (void) noticeNetworkRequest:(NSURLRequest*)request
withResponse:[[NRMANetworkResponseData alloc] initWithHttpError:[NRMANetworkFacade statusCode:response] bytesReceived:modifiedBytesReceived responseTime:[timer timeElapsedInSeconds] networkErrorMessage:nil encodedResponseBody:[NRMANetworkFacade responseBodyForEvents:responseData] appDataHeader:[NRMANetworkFacade getAppDataHeader:response]]
withPayload:[NRMAHTTPUtilities retrievePayload:request]];
}
// Success case
} else {
if([NRMAFlags shouldEnableNewEventSystem]){

Expand Down
33 changes: 33 additions & 0 deletions Test Harness/NRTestApp/NRTestApp/ViewModels/UtilViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,11 @@ class UtilViewModel {
options.append(UtilOption(title: "Notice Network Failure", handler: { [self] in noticeFailedNWRequest()}))

options.append(UtilOption(title: "Test System Logs", handler: { [self] in testSystemLogs()}))
options.append(UtilOption(title: "Notice Network Request w headers/params", handler: { [self] in
Task { await noticeNetworkRequestWithParams() }
}))


options.append(UtilOption(title: "Test Log Dict", handler: { [self] in testLogDict()}))
options.append(UtilOption(title: "Test Log Error", handler: { [self] in testLogError()}))
options.append(UtilOption(title: "Test Log Attributes", handler: { [self] in testLogAttributes()}))
Expand Down Expand Up @@ -151,6 +156,34 @@ class UtilViewModel {
with: NRTimer(), andFailureCode: NSURLErrorTimedOut)
}

func noticeNetworkRequestWithParams() async {
let url = URL(string: "https://www.apple.com")!

let request = URLRequest(url: url)
do {
let (data, response) = try await URLSession.shared.data(for: request)
print("Async-Await Data request made.")
NewRelic.noticeNetworkRequest(
for: url,
httpMethod: "GET",
with: NRTimer(),
responseHeaders: ["x-response-header":"12345"],
statusCode: 200,
bytesSent: 0,
bytesReceived: UInt(data.count),
responseData: data,
traceHeaders: [:],
andParams: ["x-foo-header-id": "foo", "x-bar-header-id": "bar"]
)
}
catch {
print("\(error): Error making async-await data request.")

}


}

func testLogDict() {
NewRelic.logAll([
"logLevel": "WARN",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
#import "NRMAHarvestController.h"
#import "NRMAAppToken.h"
#import "NRTestConstants.h"
#import "NRMAHTTPUtilities.h"

@interface NRMAAnalyticsTest : XCTestCase
{
Expand Down Expand Up @@ -95,6 +96,7 @@ - (void) testCustomEventOffline {

- (void) testRequestEvents {
[NRMAFlags enableFeatures:NRFeatureFlag_NetworkRequestEvents];

NRTimer* timer = [NRTimer new];

NRMAAnalytics* analytics = [[NRMAAnalytics alloc] initWithSessionStartTimeMS:0];
Expand All @@ -107,6 +109,8 @@ - (void) testRequestEvents {
connectionType:@"wifi"
contentType:@"application/json"
bytesSent:100];
[NRMAHTTPUtilities addHTTPHeaderTrackingFor:@[@"trackedHeaderName"]];
[NRMAHTTPUtilities addTrackedHeaders:@{@"trackedHeaderName": @"trackedHeaderValue"} to:requestData];

NRMANetworkResponseData* responseData = [[NRMANetworkResponseData alloc] initWithSuccessfulResponse:200
bytesReceived:200
Expand Down Expand Up @@ -136,6 +140,9 @@ - (void) testRequestEvents {
XCTAssertFalse([decode[0][@"requestUrl"] containsString:@"parameter"]);
XCTAssertFalse([json containsString:@"offline"]);

XCTAssertTrue([decode[0][@"trackedHeaderName"] isEqualToString:@"trackedHeaderValue"]);


[NRMAFlags disableFeatures:NRFeatureFlag_NetworkRequestEvents];
}

Expand Down Expand Up @@ -1541,4 +1548,5 @@ - (void) testSendSessionEvent {

}


@end

0 comments on commit 54fa0f3

Please sign in to comment.