Skip to content

Commit 1b5770a

Browse files
committed
.
1 parent 09fd0ce commit 1b5770a

File tree

17 files changed

+173
-119
lines changed

17 files changed

+173
-119
lines changed

QiniuSDK.xcodeproj/project.pbxproj

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@
1010
22019FE04FB937FAB13FDFFD /* libPods-QiniuSDK iOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 389DF9365782A14F70933C3E /* libPods-QiniuSDK iOS.a */; };
1111
5F0FFE6A946BAEFF741BC23E /* libPods-QiniuSDK Mac.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8924D07F6E137C6379C173D4 /* libPods-QiniuSDK Mac.a */; };
1212
7277FD17389341BDCAD29727 /* libPods-QiniuSDK iOSTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D41D651AEAB89853C760E3A /* libPods-QiniuSDK iOSTests.a */; };
13-
BA0FAD4C1BE25EE500DD5C51 /* Reachability.m in Sources */ = {isa = PBXBuildFile; fileRef = BA0FAD4B1BE25EE500DD5C51 /* Reachability.m */; settings = {ASSET_TAGS = (); }; };
13+
93CEF47E1BDE11FF00750FE8 /* QNPHAssetFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 93CEF47C1BDE11FF00750FE8 /* QNPHAssetFile.h */; settings = {ASSET_TAGS = (); }; };
14+
93CEF47F1BDE11FF00750FE8 /* QNPHAssetFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 93CEF47D1BDE11FF00750FE8 /* QNPHAssetFile.m */; settings = {ASSET_TAGS = (); }; };
15+
93CEF4801BDE11FF00750FE8 /* QNPHAssetFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 93CEF47D1BDE11FF00750FE8 /* QNPHAssetFile.m */; settings = {ASSET_TAGS = (); }; };
1416
BA1659301BDBD6FB00C7304A /* QNStats.h in Headers */ = {isa = PBXBuildFile; fileRef = BA16592E1BDBD6FB00C7304A /* QNStats.h */; settings = {ASSET_TAGS = (); }; };
1517
BA1659311BDBD6FB00C7304A /* QNStats.m in Sources */ = {isa = PBXBuildFile; fileRef = BA16592F1BDBD6FB00C7304A /* QNStats.m */; settings = {ASSET_TAGS = (); }; };
1618
BA1659321BDBD6FB00C7304A /* QNStats.m in Sources */ = {isa = PBXBuildFile; fileRef = BA16592F1BDBD6FB00C7304A /* QNStats.m */; settings = {ASSET_TAGS = (); }; };
19+
BA1A40F61BE497E5009A5E00 /* Reachability.m in Sources */ = {isa = PBXBuildFile; fileRef = BA1A40F51BE497E5009A5E00 /* Reachability.m */; settings = {ASSET_TAGS = (); }; };
1720
BA8408531BE250C80093B013 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BA8408521BE250C80093B013 /* SystemConfiguration.framework */; };
1821
BA8408541BE251010093B013 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BA8408521BE250C80093B013 /* SystemConfiguration.framework */; };
19-
93CEF47E1BDE11FF00750FE8 /* QNPHAssetFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 93CEF47C1BDE11FF00750FE8 /* QNPHAssetFile.h */; settings = {ASSET_TAGS = (); }; };
20-
93CEF47F1BDE11FF00750FE8 /* QNPHAssetFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 93CEF47D1BDE11FF00750FE8 /* QNPHAssetFile.m */; settings = {ASSET_TAGS = (); }; };
21-
93CEF4801BDE11FF00750FE8 /* QNPHAssetFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 93CEF47D1BDE11FF00750FE8 /* QNPHAssetFile.m */; settings = {ASSET_TAGS = (); }; };
2222
DF0A03231B3BABEC00E3778C /* libQiniuSDK Mac.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = DF2CDDFF19DAC05500CE01FB /* libQiniuSDK Mac.dylib */; };
2323
DF0A03241B3BAC3900E3778C /* QNFormUploadTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DF3C504619DD7BA6000F548F /* QNFormUploadTest.m */; };
2424
DF0A03251B3BAC5700E3778C /* libQiniuSDK iOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DF2CDE1A19DAC08400CE01FB /* libQiniuSDK iOS.a */; };
@@ -139,10 +139,10 @@
139139
93CEF47D1BDE11FF00750FE8 /* QNPHAssetFile.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QNPHAssetFile.m; sourceTree = "<group>"; };
140140
948F5D59B2BD6CACC644FA14 /* Pods-QiniuSDK MacTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-QiniuSDK MacTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-QiniuSDK MacTests/Pods-QiniuSDK MacTests.debug.xcconfig"; sourceTree = "<group>"; };
141141
9A0CE9E3B1F13E790C38CB75 /* Pods-QiniuSDK iOSTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-QiniuSDK iOSTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-QiniuSDK iOSTests/Pods-QiniuSDK iOSTests.release.xcconfig"; sourceTree = "<group>"; };
142-
BA0FAD4A1BE25EE500DD5C51 /* Reachability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Reachability.h; sourceTree = "<group>"; };
143-
BA0FAD4B1BE25EE500DD5C51 /* Reachability.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Reachability.m; sourceTree = "<group>"; };
144142
BA16592E1BDBD6FB00C7304A /* QNStats.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QNStats.h; sourceTree = "<group>"; };
145143
BA16592F1BDBD6FB00C7304A /* QNStats.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QNStats.m; sourceTree = "<group>"; };
144+
BA1A40F41BE497E5009A5E00 /* Reachability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Reachability.h; path = Reachability/Reachability.h; sourceTree = "<group>"; };
145+
BA1A40F51BE497E5009A5E00 /* Reachability.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Reachability.m; path = Reachability/Reachability.m; sourceTree = "<group>"; };
146146
BA8408521BE250C80093B013 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; };
147147
C24CE1990894CD3CA9A17042 /* Pods-QiniuSDK iOSTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-QiniuSDK iOSTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-QiniuSDK iOSTests/Pods-QiniuSDK iOSTests.debug.xcconfig"; sourceTree = "<group>"; };
148148
DB8C25D8ADEC1AAEAFE9BB8A /* Pods-QiniuSDK iOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-QiniuSDK iOS.debug.xcconfig"; path = "Pods/Target Support Files/Pods-QiniuSDK iOS/Pods-QiniuSDK iOS.debug.xcconfig"; sourceTree = "<group>"; };
@@ -291,8 +291,8 @@
291291
BA0FAD491BE25EB300DD5C51 /* Reachiability */ = {
292292
isa = PBXGroup;
293293
children = (
294-
BA0FAD4A1BE25EE500DD5C51 /* Reachability.h */,
295-
BA0FAD4B1BE25EE500DD5C51 /* Reachability.m */,
294+
BA1A40F41BE497E5009A5E00 /* Reachability.h */,
295+
BA1A40F51BE497E5009A5E00 /* Reachability.m */,
296296
);
297297
name = Reachiability;
298298
sourceTree = "<group>";
@@ -794,9 +794,9 @@
794794
DFA9B65A19E0B53700A15FD1 /* QNFileRecorder.m in Sources */,
795795
DF2CDE6219DAC6A400CE01FB /* QNCrc32.m in Sources */,
796796
DF293CA719DC05B800799011 /* QNHttpManager.m in Sources */,
797-
BA0FAD4C1BE25EE500DD5C51 /* Reachability.m in Sources */,
798797
DF293CAC19DC0E5300799011 /* QNResumeUpload.m in Sources */,
799798
DF437CDC1B2429E10099587B /* QNUpToken.m in Sources */,
799+
BA1A40F61BE497E5009A5E00 /* Reachability.m in Sources */,
800800
DFF525341A6235D100D02BA1 /* QNSessionManager.m in Sources */,
801801
DFA39AA719F1272800A1A158 /* QNAsyncRun.m in Sources */,
802802
DFA9B64B19E0018800A15FD1 /* QNUploadOption.m in Sources */,

QiniuSDK/Http/QNHttpManager.h

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

1616
- (instancetype)initWithTimeout:(UInt32)timeout
1717
urlConverter:(QNUrlConvert)converter
18+
upStatsDropRate:(float)dropRate
1819
dns:(QNDnsManager *)dns;
1920

2021
- (void) multipartPost:(NSString *)url

QiniuSDK/Http/QNHttpManager.m

Lines changed: 42 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -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)]);

QiniuSDK/Http/QNSessionManager.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
- (instancetype)initWithProxy:(NSDictionary *)proxyDict
1111
timeout:(UInt32)timeout
1212
urlConverter:(QNUrlConvert)converter
13+
upStatsDropRate:(float)dropRate
1314
dns:(QNDnsManager*)dns;
1415

1516
- (void) multipartPost:(NSString *)url

QiniuSDK/Http/QNSessionManager.m

Lines changed: 42 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ @implementation QNSessionManager
9191
- (instancetype)initWithProxy:(NSDictionary *)proxyDict
9292
timeout:(UInt32)timeout
9393
urlConverter:(QNUrlConvert)converter
94+
upStatsDropRate:(float)dropRate
9495
dns:(QNDnsManager*)dns {
9596
if (self = [super init]) {
9697
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
@@ -106,14 +107,14 @@ - (instancetype)initWithProxy:(NSDictionary *)proxyDict
106107
_timeout = timeout;
107108
_converter = converter;
108109
_dns = dns;
109-
_statsManager = [[QNStats alloc]init];
110+
_statsManager = [[QNStats alloc]initWithPushInterval:0 dropRate:dropRate statsHost:nil dns:dns];
110111
}
111112

112113
return self;
113114
}
114115

115116
- (instancetype)init {
116-
return [self initWithProxy:nil timeout:60 urlConverter:nil dns:nil];
117+
return [self initWithProxy:nil timeout:60 urlConverter:nil upStatsDropRate:-1 dns:nil];
117118
}
118119

119120
+ (QNResponseInfo *)buildResponseInfo:(NSHTTPURLResponse *)response
@@ -162,7 +163,7 @@ - (void) sendRequest:(NSMutableURLRequest *)request
162163
url = [[NSURL alloc] initWithString:_converter(u)];
163164
request.URL = url;
164165
domain = url.host;
165-
} else if (_noProxy && _dns != nil && [url.scheme isEqualToString:@"http"]){
166+
} else if (_noProxy && _dns != nil && [url.scheme isEqualToString:@"http"]) {
166167
ips = [_dns queryWithDomain:[[QNDomain alloc] init:domain hostsFirst:NO hasCname:YES maxTtl:1000]];
167168
double duration = [[NSDate date] timeIntervalSinceDate:startTime];
168169

@@ -183,6 +184,42 @@ - (void) sendRequest:(NSMutableURLRequest *)request
183184
[self sendRequest2:request withStats:stats withCompleteBlock:completeBlock withProgressBlock:progressBlock withCancelBlock:cancelBlock withIpArray:ips withIndex:0 withDomain:domain withRetryTimes:3 withStartTime:startTime];
184185
}
185186

187+
188+
- (void) recordRst:(NSMutableDictionary *)stats
189+
response:(NSHTTPURLResponse *)response
190+
error:(NSError *)error
191+
st:(NSDate *)st {
192+
193+
if (!stats) {
194+
return;
195+
}
196+
if (response) {
197+
setStat(stats, @"rt", [NSNumber numberWithLongLong:(long long)([[NSDate date] timeIntervalSinceDate:st])*1000]);
198+
setStat(stats, @"rst", @"Success");
199+
setStat(stats, @"code", [NSNumber numberWithInteger:response.statusCode]);
200+
} else {
201+
setStat(stats, @"rst", errorFromDesc([error localizedDescription]));
202+
}
203+
if (!error || ![[error localizedDescription] isEqualToString:@"cancelled"]) {
204+
[_statsManager addStatics:stats];
205+
}
206+
}
207+
208+
- (void) recordBaseStats:(NSMutableDictionary *)stats
209+
request:(NSMutableURLRequest *)request
210+
st:(NSDate *)st {
211+
212+
if (stats) {
213+
setStat(stats, @"path", request.URL.path);
214+
setStat(stats, @"net", [_statsManager getNetType]);
215+
setStat(stats, @"sip", [_statsManager getSIP]);
216+
setStat(stats, @"st",[NSNumber numberWithLongLong:(long long)([st timeIntervalSince1970]*1000000000)]);
217+
if (request.HTTPBody != nil) {
218+
setStat(stats, @"fs", [NSNumber numberWithInteger:[request.HTTPBody length]]);
219+
}
220+
}
221+
}
222+
186223
- (void) sendRequest2:(NSMutableURLRequest *)request
187224
withStats:(NSMutableDictionary *)stats
188225
withCompleteBlock:(QNCompleteBlock)completeBlock
@@ -209,16 +246,8 @@ - (void) sendRequest2:(NSMutableURLRequest *)request
209246
}
210247

211248
NSDate *st = [NSDate date];
212-
if (stats) {
213-
setStat(stats, @"path", request.URL.path);
214-
setStat(stats, @"net", [_statsManager getNetType]);
215-
setStat(stats, @"sip", [_statsManager getSIP]);
216-
setStat(stats, @"st",[NSNumber numberWithLongLong:(long long)([st timeIntervalSince1970]*1000000000)]);
217-
}
249+
[self recordBaseStats:stats request:request st:st];
218250

219-
if (stats && request.HTTPBody != nil) {
220-
setStat(stats, @"fs", [NSNumber numberWithInteger:[request.HTTPBody length]]);
221-
}
222251

223252
request.URL = url;
224253

@@ -272,16 +301,7 @@ - (void) sendRequest2:(NSMutableURLRequest *)request
272301
info = [QNSessionManager buildResponseInfo:httpResponse withError:error withDuration:duration withResponse:data withHost:domain withIp:ip];
273302
}
274303

275-
if (stats && httpResponse != nil) {
276-
setStat(stats, @"rt", [NSNumber numberWithLongLong:(long long)([[NSDate date] timeIntervalSinceDate:st])*1000]);
277-
setStat(stats, @"rst", @"Success");
278-
setStat(stats, @"code", [NSNumber numberWithInteger:httpResponse.statusCode]);
279-
} else if (stats && error) {
280-
setStat(stats, @"rst", errorFromDesc([error localizedDescription]));
281-
}
282-
if (!error || ![[error localizedDescription] isEqualToString:@"cancelled"]) {
283-
[_statsManager addStatics:stats];
284-
}
304+
[self recordRst:stats response:httpResponse error:error st:st];
285305

286306
completeBlock(info, resp);
287307
}];

0 commit comments

Comments
 (0)