Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

### Features

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

### Improvements
Expand Down
7 changes: 7 additions & 0 deletions Sources/Sentry/SentryNetworkTracker.m
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down Expand Up @@ -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
Expand All @@ -495,6 +501,7 @@ - (void)addBreadcrumbForSessionTask:(NSURLSessionTask *)sessionTask
NSMutableDictionary<NSString *, id> *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"] =
Expand Down
1 change: 1 addition & 0 deletions Sources/Sentry/include/SentryNetworkTracker.h
Original file line number Diff line number Diff line change
Expand Up @@ -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";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -338,6 +338,8 @@ 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"])
XCTAssertTrue(breadcrumb!.data!["request_start"] is Date)
XCTAssertNil(breadcrumb!.data!["graphql_operation_name"])
}

Expand Down