Skip to content

Commit 4ae9b7a

Browse files
authored
feat: Add request start date to network breadcrumb (#4008)
request start date to network breadcrumb
1 parent ed49f0c commit 4ae9b7a

File tree

4 files changed

+11
-0
lines changed

4 files changed

+11
-0
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
### Features
66

7+
- Add start time to network request breadcrumbs (#4008)
78
- Add C++ exception support for `__cxa_rethrow` (#3996)
89

910
### Improvements

Sources/Sentry/SentryNetworkTracker.m

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,10 @@ - (void)urlSessionTaskResume:(NSURLSessionTask *)sessionTask
220220
@"SentryNetworkTracker automatically started HTTP span for sessionTask: %@",
221221
netSpan.description);
222222

223+
// Register request start date in the sessionTask to use for breadcrumb
224+
objc_setAssociatedObject(sessionTask, &SENTRY_NETWORK_REQUEST_START_DATE, [NSDate date],
225+
OBJC_ASSOCIATION_RETAIN_NONATOMIC);
226+
223227
objc_setAssociatedObject(sessionTask, &SENTRY_NETWORK_REQUEST_TRACKER_SPAN, netSpan,
224228
OBJC_ASSOCIATION_RETAIN_NONATOMIC);
225229
}
@@ -484,6 +488,8 @@ - (void)addBreadcrumbForSessionTask:(NSURLSessionTask *)sessionTask
484488
[hasBreadcrumb boolValue]) {
485489
return;
486490
}
491+
NSDate *requestStart
492+
= objc_getAssociatedObject(sessionTask, &SENTRY_NETWORK_REQUEST_START_DATE);
487493

488494
SentryLevel breadcrumbLevel = sessionTask.error != nil ? kSentryLevelError : kSentryLevelInfo;
489495
SentryBreadcrumb *breadcrumb = [[SentryBreadcrumb alloc] initWithLevel:breadcrumbLevel
@@ -495,6 +501,7 @@ - (void)addBreadcrumbForSessionTask:(NSURLSessionTask *)sessionTask
495501
NSMutableDictionary<NSString *, id> *breadcrumbData = [NSMutableDictionary new];
496502
breadcrumbData[@"url"] = urlComponents.sanitizedUrl;
497503
breadcrumbData[@"method"] = sessionTask.currentRequest.HTTPMethod;
504+
breadcrumbData[@"request_start"] = requestStart;
498505
breadcrumbData[@"request_body_size"] =
499506
[NSNumber numberWithLongLong:sessionTask.countOfBytesSent];
500507
breadcrumbData[@"response_body_size"] =

Sources/Sentry/include/SentryNetworkTracker.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ NS_ASSUME_NONNULL_BEGIN
66

77
static NSString *const SENTRY_NETWORK_REQUEST_OPERATION = @"http.client";
88
static NSString *const SENTRY_NETWORK_REQUEST_TRACKER_SPAN = @"SENTRY_NETWORK_REQUEST_TRACKER_SPAN";
9+
static NSString *const SENTRY_NETWORK_REQUEST_START_DATE = @"SENTRY_NETWORK_REQUEST_START_DATE";
910
static NSString *const SENTRY_NETWORK_REQUEST_TRACKER_BREADCRUMB
1011
= @"SENTRY_NETWORK_REQUEST_TRACKER_BREADCRUMB";
1112

Tests/SentryTests/Integrations/Performance/Network/SentryNetworkTrackerTests.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,8 @@ class SentryNetworkTrackerTests: XCTestCase {
338338
XCTAssertEqual(breadcrumb!.data!["response_body_size"] as! Int64, DATA_BYTES_RECEIVED)
339339
XCTAssertEqual(breadcrumb!.data!["http.query"] as? String, "query=value&query2=value2")
340340
XCTAssertEqual(breadcrumb!.data!["http.fragment"] as? String, "fragment")
341+
XCTAssertNotNil(breadcrumb!.data!["request_start"])
342+
XCTAssertTrue(breadcrumb!.data!["request_start"] is Date)
341343
XCTAssertNil(breadcrumb!.data!["graphql_operation_name"])
342344
}
343345

0 commit comments

Comments
 (0)