#if PRINT_MATRICS_SUPPORT
[self enableMetricsSupport];
#endif
#if PRINT_MATRICS_SUPPORT
- (void)enableMetricsSupport {
NSDateFormatter *_dateFormatter = [[NSDateFormatter alloc] init];
[_dateFormatter setFormatterBehavior:NSDateFormatterBehavior10_4]; // 10.4+ style
[_dateFormatter setDateFormat:@"yyyy/MM/dd HH:mm:ss:SSS"];
[self.client setTaskDidFinishCollectingMetricsBlock:^(NSURLSession * _Nonnull session, NSURLSessionTask * _Nonnull task, NSURLSessionTaskMetrics * _Nullable metrics) {
PRINT(@"【NETWORK】task origin url:%@, current url:%@\n metrics.redirectCount:%lu\n task开始时间:%@,结束时间:%@,消耗时间:%fms\n",task.originalRequest.URL.absoluteString, task.currentRequest.URL.absoluteString, (unsigned long)metrics.redirectCount, [_dateFormatter stringFromDate:metrics.taskInterval.startDate],[_dateFormatter stringFromDate:metrics.taskInterval.endDate],metrics.taskInterval.duration * 1000);
PRINT(@"【NETWORK】metric statistics begin ------------>\n");
for (NSURLSessionTaskTransactionMetrics *metric in metrics.transactionMetrics) {
if (metric) {
if (@available(iOS 13.0, *)) {
PRINT(@"metric.localAddress:%@",metric.localAddress);
PRINT(@"metric.remoteAddress:%@",metric.remoteAddress);
} else {
// Fallback on earlier versions
}
//请求开始时间
NSString *sreq = [NSString stringWithFormat:@"%@", [_dateFormatter stringFromDate:metric.fetchStartDate]];
//域名解析时间
NSString *dnst = [NSString stringWithFormat:@"%@,%@,%fms",[_dateFormatter stringFromDate:metric.domainLookupStartDate],[_dateFormatter stringFromDate:metric.domainLookupEndDate],[metric.domainLookupEndDate timeIntervalSinceDate:metric.domainLookupStartDate] * 1000];
//连接建立时间
NSString *cnnt = [NSString stringWithFormat:@"%@,%@,%fms",[_dateFormatter stringFromDate:metric.connectStartDate],[_dateFormatter stringFromDate:metric.connectEndDate],[metric.connectEndDate timeIntervalSinceDate:metric.connectStartDate] * 1000];
//ssl验证时间
NSString *sslt = [NSString stringWithFormat:@"%@,%@,%fms",[_dateFormatter stringFromDate:metric.secureConnectionStartDate],[_dateFormatter stringFromDate:metric.secureConnectionEndDate], [metric.secureConnectionEndDate timeIntervalSinceDate:metric.secureConnectionStartDate] * 1000];
//从客户端发送HTTP请求到服务器所耗费的时间
NSString *sdt = [NSString stringWithFormat:@"%@,%@,%fms",[NSString stringWithFormat:@"%@", [_dateFormatter stringFromDate:metric.requestStartDate]],[NSString stringWithFormat:@"%@", [_dateFormatter stringFromDate:metric.requestEndDate]],[metric.requestEndDate timeIntervalSinceDate:metric.requestStartDate] * 1000];
//客户端从开始接收数据到接收完所有数据的时间
NSString *rcvt = [NSString stringWithFormat:@"%fms", [metric.responseEndDate timeIntervalSinceDate:metric.responseStartDate] * 1000];
//响应报文首字节到达时间
NSString *wtt = [NSString stringWithFormat:@"%fms", [metric.responseStartDate timeIntervalSinceDate:metric.requestEndDate] * 1000];
//请求结束时间
NSString *eres = [NSString stringWithFormat:@"%@", [_dateFormatter stringFromDate:metric.responseEndDate]];
//网络请求总时间
NSString *ttt = [NSString stringWithFormat:@"%fms", [metrics.taskInterval duration] * 1000];
PRINT(@"【NETWORK】metric url:%@, \n请求开始时间:%@, \n域名解析时间:%@, \n连接建立时间:%@, \nssl验证时间:%@, \n从客户端发送请求到服务器耗费的时间:%@, \n响应报文首字节到达时间:%@, \n客户端从开始接收数据到接收完所有数据的时间:%@, \n请求结束时间:%@, \n网络请求总时间:%@ \n ",metric.request.URL.absoluteString,sreq,dnst,cnnt,sslt,sdt,rcvt,wtt,eres,ttt);
}
}
PRINT(@"【NETWORK】<------------ metric statistics end\n");
}];
}
#endif