@@ -47,21 +47,22 @@ @implementation QNHttpManager
4747
4848- (instancetype )initWithTimeout : (UInt32)timeout
4949 urlConverter : (QNUrlConvert)converter
50+ upStatsDropRate : (float )dropRate
5051 dns : (QNDnsManager *)dns {
5152 if (self = [super init ]) {
5253 _httpManager = [[AFHTTPRequestOperationManager alloc ] init ];
5354 _httpManager.responseSerializer = [AFJSONResponseSerializer serializer ];
5455 _timeout = timeout;
5556 _converter = converter;
5657 _dns = dns;
57- _statsManager = [[QNStats alloc ] init ];
58+ _statsManager = [[QNStats alloc ] initWithPushInterval: 0 dropRate: dropRate statsHost: nil dns: dns ];
5859 }
5960
6061 return self;
6162}
6263
6364- (instancetype )init {
64- return [self initWithTimeout: 60 urlConverter: nil dns: nil ];
65+ return [self initWithTimeout: 60 urlConverter: nil upStatsDropRate: - 1 dns: nil ];
6566}
6667
6768+ (QNResponseInfo *)buildResponseInfo : (AFHTTPRequestOperation *)operation
@@ -89,6 +90,41 @@ + (QNResponseInfo *)buildResponseInfo:(AFHTTPRequestOperation *)operation
8990 return info;
9091}
9192
93+ - (void ) recordRst : (NSMutableDictionary *)stats
94+ response : (NSHTTPURLResponse *)response
95+ error : (NSError *)error
96+ st : (NSDate *)st {
97+
98+ if (!stats) {
99+ return ;
100+ }
101+ if (response) {
102+ setStat (stats, @" rt" , [NSNumber numberWithLongLong: (long long )([[NSDate date ] timeIntervalSinceDate: st])*1000 ]);
103+ setStat (stats, @" rst" , @" Success" );
104+ setStat (stats, @" code" , [NSNumber numberWithInteger: response.statusCode]);
105+ } else {
106+ setStat (stats, @" rst" , errorFromDesc ([error localizedDescription ]));
107+ }
108+ if (!error || ![[error localizedDescription ] isEqualToString: @" cancelled" ]) {
109+ [_statsManager addStatics: stats];
110+ }
111+ }
112+
113+ - (void ) recordBaseStats : (NSMutableDictionary *)stats
114+ request : (NSMutableURLRequest *)request
115+ st : (NSDate *)st {
116+
117+ if (stats) {
118+ setStat (stats, @" path" , request.URL .path );
119+ setStat (stats, @" net" , [_statsManager getNetType ]);
120+ setStat (stats, @" sip" , [_statsManager getSIP ]);
121+ setStat (stats, @" st" ,[NSNumber numberWithLongLong: (long long )([st timeIntervalSince1970 ]*1000000000 )]);
122+ if (request.HTTPBody != nil ) {
123+ setStat (stats, @" fs" , [NSNumber numberWithInteger: [request.HTTPBody length ]]);
124+ }
125+ }
126+ }
127+
92128- (void ) sendRequest2 : (NSMutableURLRequest *)request
93129 withStats : (NSMutableDictionary *)stats
94130 withCompleteBlock : (QNCompleteBlock)completeBlock
@@ -116,12 +152,7 @@ - (void) sendRequest2:(NSMutableURLRequest *)request
116152 }
117153
118154 NSDate *st = [NSDate date ];
119- if (stats) {
120- setStat (stats, @" path" , request.URL .path );
121- setStat (stats, @" net" , [_statsManager getNetType ]);
122- setStat (stats, @" sip" , [_statsManager getSIP ]);
123- setStat (stats, @" st" ,[NSNumber numberWithLongLong: (long long )([st timeIntervalSince1970 ]*1000000000 )]);
124- }
155+ [self recordBaseStats: stats request: request st: st];
125156
126157 request.URL = url;
127158
@@ -140,28 +171,10 @@ - (void) sendRequest2:(NSMutableURLRequest *)request
140171 if (info.isOK ) {
141172 resp = responseObject;
142173 }
143- if (stats && operation.response ) {
144- setStat (stats, @" rt" , [NSNumber numberWithLongLong: (long long )([[NSDate date ] timeIntervalSinceDate: st])*1000 ]);
145- setStat (stats, @" rst" , @" Success" );
146- setStat (stats, @" code" , [NSNumber numberWithInteger: operation.response.statusCode]);
147- [_statsManager addStatics: stats];
148- }
174+ [self recordRst: stats response: operation.response error: nil st: st];
149175 completeBlock (info, resp);
150176 } failure: ^(AFHTTPRequestOperation *operation, NSError *error) {
151-
152- if (stats) {
153- if (operation.response ) {
154- setStat (stats, @" rt" , [NSNumber numberWithLongLong: (long long )([[NSDate date ] timeIntervalSinceDate: st])*1000 ]);
155- setStat (stats, @" rst" , @" Success" );
156- setStat (stats, @" code" , [NSNumber numberWithInteger: operation.response.statusCode]);
157- } else if (error) {
158- // 只处理第一次的情况
159- setStat (stats, @" rst" , errorFromDesc ([error localizedDescription ]));
160- }
161- if (!error || ![[error localizedDescription ] isEqualToString: @" cancelled" ]) {
162- [_statsManager addStatics: stats];
163- }
164- }
177+ [self recordRst: stats response: operation.response error: error st: st];
165178 if (_converter != nil && (index+1 < ips.count || times>0 ) && needRetry (operation, error)) {
166179
167180 NSLog (@" idx: %d , count: %lu " , index, (unsigned long )ips.count );
@@ -179,9 +192,6 @@ - (void) sendRequest2:(NSMutableURLRequest *)request
179192 }
180193 ];
181194
182- if (stats && request.HTTPBody != nil ) {
183- setStat (stats, @" fs" , [NSNumber numberWithInteger: [request.HTTPBody length ]]);
184- }
185195 __block AFHTTPRequestOperation *op = nil ;
186196 if (cancelBlock) {
187197 op = operation;
@@ -227,7 +237,7 @@ - (void) sendRequest:(NSMutableURLRequest *)request
227237 url = [[NSURL alloc ] initWithString: _converter (u)];
228238 request.URL = url;
229239 domain = url.host ;
230- }else if (_dns != nil && [url.scheme isEqual: @" http" ]){
240+ }else if (_dns != nil && [url.scheme isEqual: @" http" ]) {
231241 ips = [_dns queryWithDomain: [[QNDomain alloc ] init: domain hostsFirst: NO hasCname: YES maxTtl: 1000 ]];
232242 double duration = [[NSDate date ] timeIntervalSinceDate: startTime];
233243 setStat (stats, @" dt" , [NSNumber numberWithInt: (int )(duration*1000 )]);
0 commit comments