From 4a8fdb81a8c8a2d200e569914e1e8481e216c97b Mon Sep 17 00:00:00 2001 From: Dhiogo Brustolin Date: Thu, 23 May 2024 09:42:18 +0200 Subject: [PATCH 1/3] feat: Add request start date to network breadcrumb --- Sources/Sentry/SentryNetworkTracker.m | 7 +++++++ Sources/Sentry/include/SentryNetworkTracker.h | 1 + .../Performance/Network/SentryNetworkTrackerTests.swift | 1 + 3 files changed, 9 insertions(+) diff --git a/Sources/Sentry/SentryNetworkTracker.m b/Sources/Sentry/SentryNetworkTracker.m index 71c577a3ee5..a2f933b59cc 100644 --- a/Sources/Sentry/SentryNetworkTracker.m +++ b/Sources/Sentry/SentryNetworkTracker.m @@ -220,6 +220,10 @@ - (void)urlSessionTaskResume:(NSURLSessionTask *)sessionTask @"SentryNetworkTracker automatically started HTTP span for sessionTask: %@", netSpan.description); + // Register request start date in the sessionTask to use for breadcrumb + objc_setAssociatedObject(sessionTask, &SENTRY_NETWORK_REQUEST_START_DATE, [NSDate date], + OBJC_ASSOCIATION_RETAIN_NONATOMIC); + objc_setAssociatedObject(sessionTask, &SENTRY_NETWORK_REQUEST_TRACKER_SPAN, netSpan, OBJC_ASSOCIATION_RETAIN_NONATOMIC); } @@ -484,6 +488,8 @@ - (void)addBreadcrumbForSessionTask:(NSURLSessionTask *)sessionTask [hasBreadcrumb boolValue]) { return; } + NSDate *requestStart + = objc_getAssociatedObject(sessionTask, &SENTRY_NETWORK_REQUEST_START_DATE); SentryLevel breadcrumbLevel = sessionTask.error != nil ? kSentryLevelError : kSentryLevelInfo; SentryBreadcrumb *breadcrumb = [[SentryBreadcrumb alloc] initWithLevel:breadcrumbLevel @@ -495,6 +501,7 @@ - (void)addBreadcrumbForSessionTask:(NSURLSessionTask *)sessionTask NSMutableDictionary *breadcrumbData = [NSMutableDictionary new]; breadcrumbData[@"url"] = urlComponents.sanitizedUrl; breadcrumbData[@"method"] = sessionTask.currentRequest.HTTPMethod; + breadcrumbData[@"request_start"] = requestStart; breadcrumbData[@"request_body_size"] = [NSNumber numberWithLongLong:sessionTask.countOfBytesSent]; breadcrumbData[@"response_body_size"] = diff --git a/Sources/Sentry/include/SentryNetworkTracker.h b/Sources/Sentry/include/SentryNetworkTracker.h index e0aa040da81..e24ef161cc7 100644 --- a/Sources/Sentry/include/SentryNetworkTracker.h +++ b/Sources/Sentry/include/SentryNetworkTracker.h @@ -6,6 +6,7 @@ NS_ASSUME_NONNULL_BEGIN static NSString *const SENTRY_NETWORK_REQUEST_OPERATION = @"http.client"; static NSString *const SENTRY_NETWORK_REQUEST_TRACKER_SPAN = @"SENTRY_NETWORK_REQUEST_TRACKER_SPAN"; +static NSString *const SENTRY_NETWORK_REQUEST_START_DATE = @"SENTRY_NETWORK_REQUEST_START_DATE"; static NSString *const SENTRY_NETWORK_REQUEST_TRACKER_BREADCRUMB = @"SENTRY_NETWORK_REQUEST_TRACKER_BREADCRUMB"; diff --git a/Tests/SentryTests/Integrations/Performance/Network/SentryNetworkTrackerTests.swift b/Tests/SentryTests/Integrations/Performance/Network/SentryNetworkTrackerTests.swift index 96cbc56aaa5..5207c81ca20 100644 --- a/Tests/SentryTests/Integrations/Performance/Network/SentryNetworkTrackerTests.swift +++ b/Tests/SentryTests/Integrations/Performance/Network/SentryNetworkTrackerTests.swift @@ -338,6 +338,7 @@ class SentryNetworkTrackerTests: XCTestCase { XCTAssertEqual(breadcrumb!.data!["response_body_size"] as! Int64, DATA_BYTES_RECEIVED) XCTAssertEqual(breadcrumb!.data!["http.query"] as? String, "query=value&query2=value2") XCTAssertEqual(breadcrumb!.data!["http.fragment"] as? String, "fragment") + XCTAssertNotNil(breadcrumb!.data!["request_start"]) XCTAssertNil(breadcrumb!.data!["graphql_operation_name"]) } From 5d0c901672a075c476e959e6dafd3dd778f9ae8f Mon Sep 17 00:00:00 2001 From: Dhiogo Brustolin Date: Thu, 23 May 2024 10:06:52 +0200 Subject: [PATCH 2/3] Update CHANGELOG.md --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b05176520b7..19b9b0c122d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +### Features + +- Add start time to network request breadcrumbs (#4008) + ### Improvements - Stop FramesTracker when app is in background (#3979) From db6e85a89b888be48c6dcba0ce2d421acd14d7e3 Mon Sep 17 00:00:00 2001 From: Dhiogo Brustolin Date: Fri, 24 May 2024 14:33:50 +0200 Subject: [PATCH 3/3] Update SentryNetworkTrackerTests.swift --- .../Performance/Network/SentryNetworkTrackerTests.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/Tests/SentryTests/Integrations/Performance/Network/SentryNetworkTrackerTests.swift b/Tests/SentryTests/Integrations/Performance/Network/SentryNetworkTrackerTests.swift index 5207c81ca20..fa3f43b2ac6 100644 --- a/Tests/SentryTests/Integrations/Performance/Network/SentryNetworkTrackerTests.swift +++ b/Tests/SentryTests/Integrations/Performance/Network/SentryNetworkTrackerTests.swift @@ -339,6 +339,7 @@ class SentryNetworkTrackerTests: XCTestCase { XCTAssertEqual(breadcrumb!.data!["http.query"] as? String, "query=value&query2=value2") XCTAssertEqual(breadcrumb!.data!["http.fragment"] as? String, "fragment") XCTAssertNotNil(breadcrumb!.data!["request_start"]) + XCTAssertTrue(breadcrumb!.data!["request_start"] is Date) XCTAssertNil(breadcrumb!.data!["graphql_operation_name"]) }