123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257 |
- //
- // QNReportItem.m
- // QiniuSDK
- //
- // Created by yangsen on 2020/5/12.
- // Copyright © 2020 Qiniu. All rights reserved.
- //
- #import "QNReportItem.h"
- #import "QNAsyncRun.h"
- #import "QNLogUtil.h"
- @interface QNReportItem()
- @property(nonatomic, strong)NSMutableDictionary *keyValues;
- @end
- @implementation QNReportItem
- + (instancetype)item{
- QNReportItem *item = [[QNReportItem alloc] init];
- return item;
- }
- - (instancetype)init{
- if (self = [super init]) {
- [self initData];
- }
- return self;
- }
- - (void)initData{
- _keyValues = [NSMutableDictionary dictionary];
- }
- - (void)setReportValue:(id _Nullable)value forKey:(NSString * _Nullable)key{
- if (!value || !key || ![key isKindOfClass:[NSString class]]) {
- return;
- }
- if ([value isKindOfClass:[NSString class]] && [(NSString *)value length] > 1024) {
- value = [(NSString *)value substringToIndex:1024];
- }
- [self.keyValues setValue:value forKey:key];
- }
- - (void)removeReportValueForKey:(NSString * _Nullable)key{
- if (!key) {
- return;
- }
- [self.keyValues removeObjectForKey:key];
- }
- - (NSString *)toJson{
-
- NSString *jsonString = @"{}";
- if (!self.keyValues || self.keyValues.count == 0) {
- return jsonString;
- }
-
- NSData *jsonData = [NSJSONSerialization dataWithJSONObject:self.keyValues
- options:NSJSONWritingFragmentsAllowed
- error:nil];
- if (!jsonData) {
- return jsonString;
- }
-
- jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
- return jsonString;
- }
- @end
- @implementation QNUploadInfoReporter(ReportItem)
- - (void)reportItem:(QNReportItem *)item token:(NSString *)token{
- NSString *itemJsonString = [item toJson];
- QNLogInfo(@"up log:%@", itemJsonString);
- if (itemJsonString && ![itemJsonString isEqualToString:@"{}"]) {
- [kQNReporter report:itemJsonString token:token];
- }
- }
- @end
- @implementation QNResponseInfo(Report)
- - (NSNumber *)requestReportStatusCode{
- return @(self.statusCode);
- }
- - (NSString *)requestReportErrorType{
- NSString *errorType = nil;
- if (self.statusCode == -1){
- errorType = @"network_error";
- } else if (self.statusCode == kQNLocalIOError){
- errorType = @"local_io_error";
- } else if (self.statusCode == 100){
- errorType = @"protocol_error";
- } else if (self.statusCode > 199 && self.statusCode < 300) {
- // NSURLErrorFailingURLErrorKey
- } else if (self.statusCode > 299){
- errorType = @"response_error";
- } else if (self.statusCode == -1003){
- errorType = @"unknown_host";
- } else if (self.statusCode == -1009){
- errorType = @"network_slow";
- } else if (self.statusCode == -1001){
- errorType = @"timeout";
- } else if (self.statusCode == -1004){
- errorType = @"cannot_connect_to_host";
- } else if (self.statusCode == -1005 || self.statusCode == -1021){
- errorType = @"transmission_error";
- } else if ((self.statusCode <= -1200 && self.statusCode >= -1206) || self.statusCode == -2000 || self.statusCode == -9807){
- errorType = @"ssl_error";
- } else if (self.statusCode == -1015 || self.statusCode == -1016 || self.statusCode == -1017){
- errorType = @"parse_error";
- } else if (self.statusCode == -1007 || self.statusCode == -1010 || self.statusCode == kQNMaliciousResponseError){
- errorType = @"malicious_response";
- } else if (self.statusCode == kQNUnexpectedSysCallError
- || (self.statusCode > -1130 && self.statusCode <= -1010)){
- errorType = @"unexpected_syscall_error";
- } else if (self.statusCode == kQNRequestCancelled
- || self.statusCode == NSURLErrorCancelled){
- errorType = @"user_canceled";
- } else {
- errorType = @"unknown_error";
- }
- return errorType;
- }
- - (NSString *)qualityResult{
-
- NSString *result = nil;
-
- if (self.statusCode > 199 && self.statusCode < 300) {
- result = @"ok";
- } else if (self.statusCode > 399 &&
- (self.statusCode < 500 || self.statusCode == 573 || self.statusCode == 579 ||
- self.statusCode == 608 || self.statusCode == 612 || self.statusCode == 614 || self.statusCode == 630 || self.statusCode == 631 ||
- self.statusCode == 701)) {
- result = @"bad_request";
- } else if (self.statusCode == kQNZeroDataSize){
- result = @"zero_size_file";
- } else if (self.statusCode == kQNFileError){
- result = @"invalid_file";
- } else if (self.statusCode == kQNInvalidToken
- || self.statusCode == kQNInvalidArgument){
- result = @"invalid_args";
- }
-
- if (result == nil) {
- result = [self requestReportErrorType];
- }
-
- return result;
- }
- @end
- //MARK:-- 日志类型
- NSString * const QNReportLogTypeRequest = @"request";
- NSString * const QNReportLogTypeBlock = @"block";
- NSString * const QNReportLogTypeQuality = @"quality";
- //MARK:-- 请求信息打点⽇志
- NSString * const QNReportRequestKeyLogType = @"log_type";
- NSString * const QNReportRequestKeyUpTime = @"up_time";
- NSString * const QNReportRequestKeyStatusCode = @"status_code";
- NSString * const QNReportRequestKeyRequestId = @"req_id";
- NSString * const QNReportRequestKeyHost = @"host";
- NSString * const QNReportRequestKeyHttpVersion = @"http_version";
- NSString * const QNReportRequestKeyRemoteIp = @"remote_ip";
- NSString * const QNReportRequestKeyPort = @"port";
- NSString * const QNReportRequestKeyTargetBucket = @"target_bucket";
- NSString * const QNReportRequestKeyTargetKey = @"target_key";
- NSString * const QNReportRequestKeyTotalElapsedTime = @"total_elapsed_time";
- NSString * const QNReportRequestKeyDnsElapsedTime = @"dns_elapsed_time";
- NSString * const QNReportRequestKeyConnectElapsedTime = @"connect_elapsed_time";
- NSString * const QNReportRequestKeyTLSConnectElapsedTime = @"tls_connect_elapsed_time";
- NSString * const QNReportRequestKeyRequestElapsedTime = @"request_elapsed_time";
- NSString * const QNReportRequestKeyWaitElapsedTime = @"wait_elapsed_time";
- NSString * const QNReportRequestKeyResponseElapsedTime = @"response_elapsed_time";
- NSString * const QNReportRequestKeyFileOffset = @"file_offset";
- NSString * const QNReportRequestKeyBytesSent = @"bytes_sent";
- NSString * const QNReportRequestKeyBytesTotal = @"bytes_total";
- NSString * const QNReportRequestKeyPid = @"pid";
- NSString * const QNReportRequestKeyTid = @"tid";
- NSString * const QNReportRequestKeyTargetRegionId = @"target_region_id";
- NSString * const QNReportRequestKeyCurrentRegionId = @"current_region_id";
- NSString * const QNReportRequestKeyErrorType = @"error_type";
- NSString * const QNReportRequestKeyErrorDescription = @"error_description";
- NSString * const QNReportRequestKeyUpType = @"up_type";
- NSString * const QNReportRequestKeyOsName = @"os_name";
- NSString * const QNReportRequestKeyOsVersion = @"os_version";
- NSString * const QNReportRequestKeySDKName = @"sdk_name";
- NSString * const QNReportRequestKeySDKVersion = @"sdk_version";
- NSString * const QNReportRequestKeyClientTime = @"client_time";
- NSString * const QNReportRequestKeyHttpClient = @"http_client";
- NSString * const QNReportRequestKeyNetworkType = @"network_type";
- NSString * const QNReportRequestKeySignalStrength = @"signal_strength";
- NSString * const QNReportRequestKeyPrefetchedDnsSource = @"prefetched_dns_source";
- NSString * const QNReportRequestKeyDnsSource = @"dns_source";
- NSString * const QNReportRequestKeyDnsErrorMessage = @"dns_error_message";
- NSString * const QNReportRequestKeyPrefetchedBefore = @"prefetched_before";
- NSString * const QNReportRequestKeyPrefetchedErrorMessage = @"prefetched_error_message";
- NSString * const QNReportRequestKeyNetworkMeasuring = @"network_measuring";
- NSString * const QNReportRequestKeyPerceptiveSpeed = @"perceptive_speed";
- NSString * const QNReportRequestKeyHijacking = @"hijacking";
- //MARK:-- 分块上传统计⽇志
- NSString * const QNReportBlockKeyLogType = @"log_type";
- NSString * const QNReportBlockKeyUpTime = @"up_time";
- NSString * const QNReportBlockKeyTargetBucket = @"target_bucket";
- NSString * const QNReportBlockKeyTargetKey = @"target_key";
- NSString * const QNReportBlockKeyTargetRegionId = @"target_region_id";
- NSString * const QNReportBlockKeyCurrentRegionId = @"current_region_id";
- NSString * const QNReportBlockKeyTotalElapsedTime = @"total_elapsed_time";
- NSString * const QNReportBlockKeyBytesSent = @"bytes_sent";
- NSString * const QNReportBlockKeyRecoveredFrom = @"recovered_from";
- NSString * const QNReportBlockKeyFileSize = @"file_size";
- NSString * const QNReportBlockKeyPid = @"pid";
- NSString * const QNReportBlockKeyTid = @"tid";
- NSString * const QNReportBlockKeyUpApiVersion = @"up_api_version";
- NSString * const QNReportBlockKeyClientTime = @"client_time";
- NSString * const QNReportBlockKeyOsName = @"os_name";
- NSString * const QNReportBlockKeyOsVersion = @"os_version";
- NSString * const QNReportBlockKeySDKName = @"sdk_name";
- NSString * const QNReportBlockKeySDKVersion = @"sdk_version";
- NSString * const QNReportBlockKeyPerceptiveSpeed = @"perceptive_speed";
- NSString * const QNReportBlockKeyHijacking = @"hijacking";
- //MARK:-- 上传质量统计
- NSString * const QNReportQualityKeyLogType = @"log_type";
- NSString * const QNReportQualityKeyUpType = @"up_type";
- NSString * const QNReportQualityKeyUpTime = @"up_time";
- NSString * const QNReportQualityKeyResult = @"result";
- NSString * const QNReportQualityKeyTargetBucket = @"target_bucket";
- NSString * const QNReportQualityKeyTargetKey = @"target_key";
- NSString * const QNReportQualityKeyTotalElapsedTime = @"total_elapsed_time";
- NSString * const QNReportQualityKeyUcQueryElapsedTime = @"uc_query_elapsed_time";
- NSString * const QNReportQualityKeyRequestsCount = @"requests_count";
- NSString * const QNReportQualityKeyRegionsCount = @"regions_count";
- NSString * const QNReportQualityKeyBytesSent = @"bytes_sent";
- NSString * const QNReportQualityKeyFileSize = @"file_size";
- NSString * const QNReportQualityKeyCloudType = @"cloud_type";
- NSString * const QNReportQualityKeyErrorType = @"error_type";
- NSString * const QNReportQualityKeyErrorDescription = @"error_description";
- NSString * const QNReportQualityKeyOsName = @"os_name";
- NSString * const QNReportQualityKeyOsVersion = @"os_version";
- NSString * const QNReportQualityKeySDKName = @"sdk_name";
- NSString * const QNReportQualityKeySDKVersion = @"sdk_version";
- NSString * const QNReportQualityKeyPerceptiveSpeed = @"perceptive_speed";
- NSString * const QNReportQualityKeyHijacking = @"hijacking";
|