Skip to content

Commit ca3278f

Browse files
authored
Merge pull request #453 from YangSen-qn/network_status_check
Network status check & optimize up log
2 parents 8eaa808 + 7b54106 commit ca3278f

28 files changed

+752
-320
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
11
#Changelog
2+
## 8.2.0(2021-02-20)
3+
## 增加
4+
* 增加网络监控功能,选择最优 Host 进行上传
5+
* 优化日志统计
6+
27
## 8.1.2(2021-01-18)
38
* 区域查询采用SingleFlight模式
49
* 增加网络链接状态检测

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ https://github.com/qiniudemo/qiniu-lab-android
1515

1616
| Qiniu SDK 版本 | 最低 Android版本 | 依赖库版本 |
1717
|------------ |-----------------|------------------------|
18+
| 8.2.x | Android 5.0+ | okhttp 4+ |
1819
| 8.1.x | Android 5.0+ | okhttp 4+ |
1920
| 8.0.x | Android 5.0+ | okhttp 4+ |
2021
| 7.7.x | Android 5.0+ | okhttp 4+ |
@@ -28,7 +29,7 @@ https://github.com/qiniudemo/qiniu-lab-android
2829
| 7.0.7 | Android 2.2+ | android-async-http 1.4.8 |
2930

3031
### 注意
31-
* 推荐使用最新版:8.1.2
32+
* 推荐使用最新版:8.2.0
3233
* AndroidNetwork.getMobileDbm()可以获取手机信号强度,需要如下权限(API>=18时生效)
3334
```
3435
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

library/src/androidTest/java/com/qiniu/android/ConnectCheckTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public void testCheck() {
1010
int maxCount = 100;
1111
int successCount = 0;
1212
for (int i = 0; i < maxCount; i++) {
13-
if (ConnectChecker.check()) {
13+
if (ConnectChecker.isConnected(ConnectChecker.check())) {
1414
successCount += 1;
1515
}
1616
}
@@ -23,7 +23,7 @@ public void testCustomCheckHosts() {
2323
int maxCount = 100;
2424
int successCount = 0;
2525
for (int i = 0; i < maxCount; i++) {
26-
if (ConnectChecker.check()) {
26+
if (ConnectChecker.isConnected(ConnectChecker.check())) {
2727
successCount += 1;
2828
}
2929
}
@@ -36,7 +36,7 @@ public void testNotConnected() {
3636
int maxCount = 100;
3737
int successCount = 0;
3838
for (int i = 0; i < maxCount; i++) {
39-
if (ConnectChecker.check()) {
39+
if (ConnectChecker.isConnected(ConnectChecker.check())) {
4040
successCount += 1;
4141
}
4242
}

library/src/androidTest/java/com/qiniu/android/DnsTransactionTest.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,12 @@ public void test_CheckAndPrefetch(){
6161
public void run() {
6262

6363
boolean isSuccess = DnsPrefetchTransaction.addDnsCheckAndPrefetchTransaction(zone, UpToken.parse(TestConfig.token_z0));
64-
if (isSuccess){
65-
successCount += 1;
64+
synchronized (this) {
65+
if (isSuccess) {
66+
successCount += 1;
67+
}
68+
completeCount += 1;
6669
}
67-
completeCount += 1;
6870
}
6971
}).start();
7072
}
@@ -80,7 +82,7 @@ public boolean shouldWait() {
8082
}
8183
}, 60);
8284

83-
assertTrue("successCount:" + successCount, successCount < 2);
85+
assertTrue("successCount:" + successCount, successCount < 3);
8486
}
8587

8688

library/src/androidTest/java/com/qiniu/android/TestConfig.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,20 @@ public final class TestConfig {
1010
// TODO: 2020-05-09 bad token for testPutBytesWithFixedZoneUseBackupDomains
1111
// 华东上传凭证
1212
public static final String bucket_z0 = "kodo-phone-zone0-space";
13-
public static final String token_z0 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:Tq8MZRIC2hc1hxWxH3RqLcdFuQw=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZTAtc3BhY2UiLCJkZWFkbGluZSI6MTYxMzE4NDg0OCwgInJldHVybkJvZHkiOiJ7XCJjYWxsYmFja1VybFwiOlwiaHR0cDpcL1wvY2FsbGJhY2suZGV2LnFpbml1LmlvXCIsIFwiZm9vXCI6JCh4OmZvbyksIFwiYmFyXCI6JCh4OmJhciksIFwibWltZVR5cGVcIjokKG1pbWVUeXBlKSwgXCJoYXNoXCI6JChldGFnKSwgXCJrZXlcIjokKGtleSksIFwiZm5hbWVcIjokKGZuYW1lKX0ifQ==";
13+
public static final String token_z0 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:m1kHxpdaFH3NK120iAkHlSwBpio=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZTAtc3BhY2UiLCJkZWFkbGluZSI6MTYxODgxNDM5MCwgInJldHVybkJvZHkiOiJ7XCJjYWxsYmFja1VybFwiOlwiaHR0cDpcL1wvY2FsbGJhY2suZGV2LnFpbml1LmlvXCIsIFwiZm9vXCI6JCh4OmZvbyksIFwiYmFyXCI6JCh4OmJhciksIFwibWltZVR5cGVcIjokKG1pbWVUeXBlKSwgXCJoYXNoXCI6JChldGFnKSwgXCJrZXlcIjokKGtleSksIFwiZm5hbWVcIjokKGZuYW1lKX0ifQ==";
1414
// 华北上传凭证
1515
public static final String bucket_z1 = "kodo-phone-zone1-space";
16-
public static final String token_z1 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:FZiNMb3SKDFpdat2q9wpG6zbn_w=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZTEtc3BhY2UiLCJkZWFkbGluZSI6MTYxMzE4NDg0OCwgInJldHVybkJvZHkiOiJ7XCJjYWxsYmFja1VybFwiOlwiaHR0cDpcL1wvY2FsbGJhY2suZGV2LnFpbml1LmlvXCIsIFwiZm9vXCI6JCh4OmZvbyksIFwiYmFyXCI6JCh4OmJhciksIFwibWltZVR5cGVcIjokKG1pbWVUeXBlKSwgXCJoYXNoXCI6JChldGFnKSwgXCJrZXlcIjokKGtleSksIFwiZm5hbWVcIjokKGZuYW1lKX0ifQ==";
16+
public static final String token_z1 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:1vkQkb72ANFiAftABJAF2dhbXd0=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZTEtc3BhY2UiLCJkZWFkbGluZSI6MTYxODgxNDM5MCwgInJldHVybkJvZHkiOiJ7XCJjYWxsYmFja1VybFwiOlwiaHR0cDpcL1wvY2FsbGJhY2suZGV2LnFpbml1LmlvXCIsIFwiZm9vXCI6JCh4OmZvbyksIFwiYmFyXCI6JCh4OmJhciksIFwibWltZVR5cGVcIjokKG1pbWVUeXBlKSwgXCJoYXNoXCI6JChldGFnKSwgXCJrZXlcIjokKGtleSksIFwiZm5hbWVcIjokKGZuYW1lKX0ifQ==";
1717
// 华南上传凭证
1818
public static final String bucket_z2 = "kodo-phone-zone2-space";
19-
public static final String token_z2 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:cP9NhEWUWhPrxlfAxaemVj6uIKI=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZTItc3BhY2UiLCJkZWFkbGluZSI6MTYxMzE4NDg0OCwgInJldHVybkJvZHkiOiJ7XCJjYWxsYmFja1VybFwiOlwiaHR0cDpcL1wvY2FsbGJhY2suZGV2LnFpbml1LmlvXCIsIFwiZm9vXCI6JCh4OmZvbyksIFwiYmFyXCI6JCh4OmJhciksIFwibWltZVR5cGVcIjokKG1pbWVUeXBlKSwgXCJoYXNoXCI6JChldGFnKSwgXCJrZXlcIjokKGtleSksIFwiZm5hbWVcIjokKGZuYW1lKX0ifQ==";
19+
public static final String token_z2 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:ZTqDdbvHJuP3hJFckpadCyW08Cs=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZTItc3BhY2UiLCJkZWFkbGluZSI6MTYxODgxNDM5MCwgInJldHVybkJvZHkiOiJ7XCJjYWxsYmFja1VybFwiOlwiaHR0cDpcL1wvY2FsbGJhY2suZGV2LnFpbml1LmlvXCIsIFwiZm9vXCI6JCh4OmZvbyksIFwiYmFyXCI6JCh4OmJhciksIFwibWltZVR5cGVcIjokKG1pbWVUeXBlKSwgXCJoYXNoXCI6JChldGFnKSwgXCJrZXlcIjokKGtleSksIFwiZm5hbWVcIjokKGZuYW1lKX0ifQ==";
2020
// 北美上传凭证
2121
public static final String bucket_na0 = "kodo-phone-zone-na0-space";
22-
public static final String token_na0 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:V9zBCBaNWrKZvqLu4b5Dem0hOrQ=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZS1uYTAtc3BhY2UiLCJkZWFkbGluZSI6MTYxMzE4NDg0OCwgInJldHVybkJvZHkiOiJ7XCJjYWxsYmFja1VybFwiOlwiaHR0cDpcL1wvY2FsbGJhY2suZGV2LnFpbml1LmlvXCIsIFwiZm9vXCI6JCh4OmZvbyksIFwiYmFyXCI6JCh4OmJhciksIFwibWltZVR5cGVcIjokKG1pbWVUeXBlKSwgXCJoYXNoXCI6JChldGFnKSwgXCJrZXlcIjokKGtleSksIFwiZm5hbWVcIjokKGZuYW1lKX0ifQ==";
22+
public static final String token_na0 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:I8Q0E32hEelHH4xWBH2p17SxhdA=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZS1uYTAtc3BhY2UiLCJkZWFkbGluZSI6MTYxODgxNDM5MCwgInJldHVybkJvZHkiOiJ7XCJjYWxsYmFja1VybFwiOlwiaHR0cDpcL1wvY2FsbGJhY2suZGV2LnFpbml1LmlvXCIsIFwiZm9vXCI6JCh4OmZvbyksIFwiYmFyXCI6JCh4OmJhciksIFwibWltZVR5cGVcIjokKG1pbWVUeXBlKSwgXCJoYXNoXCI6JChldGFnKSwgXCJrZXlcIjokKGtleSksIFwiZm5hbWVcIjokKGZuYW1lKX0ifQ==";
2323
// 东南亚上传凭证
2424
public static final String bucket_as0 = "kodo-phone-zone-as0-space";
25-
public static final String token_as0 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:PaaKXdrwQgI4J7Fw5nhtbwQ_bu8=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZS1hczAtc3BhY2UiLCJkZWFkbGluZSI6MTYxMzE4NDg0OCwgInJldHVybkJvZHkiOiJ7XCJjYWxsYmFja1VybFwiOlwiaHR0cDpcL1wvY2FsbGJhY2suZGV2LnFpbml1LmlvXCIsIFwiZm9vXCI6JCh4OmZvbyksIFwiYmFyXCI6JCh4OmJhciksIFwibWltZVR5cGVcIjokKG1pbWVUeXBlKSwgXCJoYXNoXCI6JChldGFnKSwgXCJrZXlcIjokKGtleSksIFwiZm5hbWVcIjokKGZuYW1lKX0ifQ==";
26-
public static final String invalidBucketToken = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:k9olgJ5rgs-SvzirMtdU_ASmArY=:eyJzY29wZSI6InpvbmVfaW52YWxpZCIsImRlYWRsaW5lIjoxNjEzMTg0ODQ4LCAicmV0dXJuQm9keSI6IntcImNhbGxiYWNrVXJsXCI6XCJodHRwOlwvXC9jYWxsYmFjay5kZXYucWluaXUuaW9cIiwgXCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9";
25+
public static final String token_as0 = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:DDXIo7KzUj3ceh5LveRXyNfsiZU=:eyJzY29wZSI6ImtvZG8tcGhvbmUtem9uZS1hczAtc3BhY2UiLCJkZWFkbGluZSI6MTYxODgxNDM5MCwgInJldHVybkJvZHkiOiJ7XCJjYWxsYmFja1VybFwiOlwiaHR0cDpcL1wvY2FsbGJhY2suZGV2LnFpbml1LmlvXCIsIFwiZm9vXCI6JCh4OmZvbyksIFwiYmFyXCI6JCh4OmJhciksIFwibWltZVR5cGVcIjokKG1pbWVUeXBlKSwgXCJoYXNoXCI6JChldGFnKSwgXCJrZXlcIjokKGtleSksIFwiZm5hbWVcIjokKGZuYW1lKX0ifQ==";
26+
public static final String invalidBucketToken = "dxVQk8gyk3WswArbNhdKIwmwibJ9nFsQhMNUmtIM:Kpi_0B6gZSf7nF5UgdZtvHx0h8M=:eyJzY29wZSI6InpvbmVfaW52YWxpZCIsImRlYWRsaW5lIjoxNjE4ODE0MzkwLCAicmV0dXJuQm9keSI6IntcImNhbGxiYWNrVXJsXCI6XCJodHRwOlwvXC9jYWxsYmFjay5kZXYucWluaXUuaW9cIiwgXCJmb29cIjokKHg6Zm9vKSwgXCJiYXJcIjokKHg6YmFyKSwgXCJtaW1lVHlwZVwiOiQobWltZVR5cGUpLCBcImhhc2hcIjokKGV0YWcpLCBcImtleVwiOiQoa2V5KSwgXCJmbmFtZVwiOiQoZm5hbWUpfSJ9";
2727

2828
// -----------
2929
public static final String ak = "bjtWBQXrcxgo7HWwlC_bgHg81j352_GhgBGZPeOW";

library/src/androidTest/java/com/qiniu/android/UploadDomainRegionTest.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.qiniu.android.common.FixedZone;
44
import com.qiniu.android.http.request.IUploadServer;
5+
import com.qiniu.android.http.request.UploadRequestState;
56
import com.qiniu.android.http.serverRegion.UploadDomainRegion;
67
import com.qiniu.android.http.serverRegion.UploadServerFreezeManager;
78
import com.qiniu.android.utils.Utils;
@@ -18,9 +19,11 @@ public void testGetOneServer(){
1819
UploadDomainRegion region = new UploadDomainRegion();
1920
region.setupRegionData(zone.getZonesInfo(null).zonesInfo.get(0));
2021

21-
UploadServerFreezeManager.getInstance().freezeHost(host, type, 100);
22+
UploadServerFreezeManager.getInstance().freezeType(type, 100);
2223

23-
IUploadServer server = region.getNextServer(false, null, null);
24+
UploadRequestState state = new UploadRequestState();
25+
state.setUseOldServer(false);
26+
IUploadServer server = region.getNextServer(state, null, null);
2427

2528
assertNotNull(server);
2629
}

library/src/androidTest/java/com/qiniu/android/UploadServerFreezeManagerTest.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,23 @@ public void testFreeze() {
88

99
String host = "baidu.com";
1010
String type = host;
11-
UploadServerFreezeManager.getInstance().freezeHost(host, type, 10);
11+
UploadServerFreezeManager.getInstance().freezeType(type, 10);
1212

13-
boolean isFrozen = UploadServerFreezeManager.getInstance().isFreezeHost(host, type);
13+
boolean isFrozen = UploadServerFreezeManager.getInstance().isTypeFrozen(type);
1414
assertTrue(isFrozen);
1515
}
1616

1717
public void testUnfreeze() {
1818

1919
String host = "baidu.com";
2020
String type = host;
21-
UploadServerFreezeManager.getInstance().freezeHost(host, type, 10);
21+
UploadServerFreezeManager.getInstance().freezeType(type, 10);
2222

23-
boolean isFrozen = UploadServerFreezeManager.getInstance().isFreezeHost(host, type);
23+
boolean isFrozen = UploadServerFreezeManager.getInstance().isTypeFrozen(type);
2424
assertTrue(isFrozen);
2525

26-
UploadServerFreezeManager.getInstance().unfreezeHost(host, type);
27-
isFrozen = UploadServerFreezeManager.getInstance().isFreezeHost(host, type);
26+
UploadServerFreezeManager.getInstance().unfreezeType(type);
27+
isFrozen = UploadServerFreezeManager.getInstance().isTypeFrozen(type);
2828
assertTrue(isFrozen == false);
2929

3030
}

library/src/main/java/com/qiniu/android/collect/ReportItem.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ public String toJson(){
4747
public static final String RequestKeyStatusCode = "status_code";
4848
public static final String RequestKeyRequestId = "req_id";
4949
public static final String RequestKeyHost = "host";
50+
public static final String RequestKeyHttpVersion = "http_version";
5051
public static final String RequestKeyRemoteIp = "remote_ip";
5152
public static final String RequestKeyPort = "port";
5253
public static final String RequestKeyTargetBucket = "target_bucket";
@@ -80,6 +81,7 @@ public String toJson(){
8081
public static final String RequestKeyPrefetchedDnsSource = "prefetched_dns_source";
8182
public static final String RequestKeyPrefetchedBefore = "prefetched_before";
8283
public static final String RequestKeyPrefetchedErrorMessage = "prefetched_error_message";
84+
public static final String RequestKeyNetworkMeasuring = "network_measuring";
8385

8486
// 分块上传统计⽇志
8587
public static final String BlockKeyLogType = "log_type";

library/src/main/java/com/qiniu/android/common/AutoZone.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ public void complete(Object value) {
123123

124124
} catch (Exception e) {
125125
/// 此处永远不会执行,回调只为占位
126-
completeHandler.complete(ResponseInfo.NetworkError, ResponseInfo.localIOError("uc query"), null);
126+
completeHandler.complete(ResponseInfo.NetworkError, ResponseInfo.localIOError(e.toString()), null);
127127
}
128128
}
129129

library/src/main/java/com/qiniu/android/common/Constants.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33

44
public final class Constants {
5-
public static final String VERSION = "8.1.2";
5+
public static final String VERSION = "8.2.0";
66

77
public static final String UTF_8 = "utf-8";
88
}

library/src/main/java/com/qiniu/android/common/ZoneInfo.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ public class ZoneInfo {
2424
private static int DOMAIN_FROZEN_SECONDS = 10 * 60;
2525

2626
public final int ttl;
27+
public final boolean http3Enabled;
2728
public final List<String> domains;
2829
public final List<String> old_domains;
2930

@@ -70,10 +71,12 @@ public static ZoneInfo buildInfo(List<String> mainHosts,
7071
}
7172

7273
private ZoneInfo(int ttl,
74+
boolean http3Enabled,
7375
String regionId,
7476
List<String> domains,
7577
List<String> old_domains) {
7678
this.ttl = ttl;
79+
this.http3Enabled = http3Enabled;
7780
this.regionId = regionId;
7881
this.domains = domains;
7982
this.old_domains = old_domains;
@@ -91,6 +94,14 @@ public static ZoneInfo buildFromJson(JSONObject obj) throws JSONException {
9194
}
9295

9396
int ttl = obj.optInt("ttl");
97+
boolean http3Enabled = false;
98+
try {
99+
JSONObject features = obj.getJSONObject("features");
100+
JSONObject http3 = features.getJSONObject("http3");
101+
http3Enabled = http3.getBoolean("enabled");
102+
} catch (Exception ignored) {
103+
}
104+
94105
String regionId = obj.optString("region");
95106
if (regionId == null) {
96107
regionId = EmptyRegionId;
@@ -130,7 +141,7 @@ public static ZoneInfo buildFromJson(JSONObject obj) throws JSONException {
130141
return null;
131142
}
132143

133-
ZoneInfo zoneInfo = new ZoneInfo(ttl, regionId, domains, old_domains);
144+
ZoneInfo zoneInfo = new ZoneInfo(ttl, http3Enabled, regionId, domains, old_domains);
134145
zoneInfo.detailInfo = obj;
135146

136147
zoneInfo.allHosts = allHosts;

library/src/main/java/com/qiniu/android/http/connectCheck/ConnectChecker.java

Lines changed: 25 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -14,53 +14,57 @@
1414

1515
public class ConnectChecker {
1616

17-
private static SingleFlight<Boolean> singleFlight = new SingleFlight<>();
17+
private static SingleFlight<UploadSingleRequestMetrics> singleFlight = new SingleFlight<>();
1818

19-
public static boolean check() {
19+
public static boolean isConnected(UploadSingleRequestMetrics metrics) {
20+
return metrics != null && metrics.response != null && metrics.response.statusCode > 99;
21+
}
22+
23+
public static UploadSingleRequestMetrics check() {
2024

2125
final CheckResult result = new CheckResult();
2226

2327
final Wait wait = new Wait();
2428
check(new CheckCompleteHandler() {
2529
@Override
26-
public void complete(boolean isConnected) {
27-
result.isConnected = isConnected;
30+
public void complete(UploadSingleRequestMetrics metrics) {
31+
result.metrics = metrics;
2832
wait.stopWait();
2933
}
3034
});
3135
wait.startWait();
3236

33-
return result.isConnected;
37+
return result.metrics;
3438
}
3539

3640
private static void check(final CheckCompleteHandler completeHandler) {
3741

3842
try {
39-
singleFlight.perform("connect_check", new SingleFlight.ActionHandler<Boolean>() {
43+
singleFlight.perform("connect_check", new SingleFlight.ActionHandler<UploadSingleRequestMetrics>() {
4044
@Override
41-
public void action(final SingleFlight.CompleteHandler<Boolean> singleFlightComplete) throws Exception {
45+
public void action(final SingleFlight.CompleteHandler<UploadSingleRequestMetrics> singleFlightComplete) throws Exception {
4246
checkAllHosts(new CheckCompleteHandler() {
4347
@Override
44-
public void complete(boolean isConnected) {
45-
singleFlightComplete.complete(isConnected);
48+
public void complete(UploadSingleRequestMetrics metrics) {
49+
singleFlightComplete.complete(metrics);
4650
}
4751
});
4852
}
49-
}, new SingleFlight.CompleteHandler<Boolean>() {
53+
}, new SingleFlight.CompleteHandler<UploadSingleRequestMetrics>() {
5054
@Override
51-
public void complete(Boolean value) {
52-
completeHandler.complete(value);
55+
public void complete(UploadSingleRequestMetrics metrics) {
56+
completeHandler.complete(metrics);
5357
}
5458
});
5559
} catch (Exception e) {
56-
completeHandler.complete(true);
60+
completeHandler.complete(null);
5761
}
5862
}
5963

6064
private static void checkAllHosts(final CheckCompleteHandler completeHandler) {
6165
String[] allHosts = GlobalConfiguration.getInstance().connectCheckURLStrings;
6266
if (allHosts == null) {
63-
completeHandler.complete(true);
67+
completeHandler.complete(null);
6468
return;
6569
}
6670

@@ -72,8 +76,8 @@ private static void checkAllHosts(final CheckCompleteHandler completeHandler) {
7276
for (String host : allHosts) {
7377
checkHost(host, new CheckCompleteHandler() {
7478
@Override
75-
public void complete(boolean isHostConnected) {
76-
79+
public void complete(UploadSingleRequestMetrics metrics) {
80+
boolean isHostConnected = isConnected(metrics);
7781
synchronized (checkStatus) {
7882
checkStatus.completeCount += 1;
7983
}
@@ -90,7 +94,7 @@ public void complete(boolean isHostConnected) {
9094
checkStatus.isCompleted = true;
9195
}
9296
}
93-
completeHandler.complete(checkStatus.isConnected);
97+
completeHandler.complete(metrics);
9498
} else {
9599
LogUtil.i("== check all hosts not completed totalCount:" + checkStatus.totalCount + " completeCount:" + checkStatus.completeCount);
96100
}
@@ -109,20 +113,15 @@ private static void checkHost(final String host, final CheckCompleteHandler comp
109113
client.request(request, true, null, null, new IRequestClient.RequestClientCompleteHandler() {
110114
@Override
111115
public void complete(ResponseInfo responseInfo, UploadSingleRequestMetrics metrics, JSONObject response) {
112-
if (responseInfo.statusCode > 99) {
113-
LogUtil.i("== checkHost:" + host + " result: true");
114-
completeHandler.complete(true);
115-
} else {
116-
LogUtil.i("== checkHost:" + host + " result: false");
117-
completeHandler.complete(false);
118-
}
116+
LogUtil.i("== checkHost:" + host + " responseInfo:" + responseInfo);
117+
completeHandler.complete(metrics);
119118
}
120119
});
121120
}
122121

123122

124123
private interface CheckCompleteHandler {
125-
void complete(boolean isConnected);
124+
void complete(UploadSingleRequestMetrics metrics);
126125
}
127126

128127
private static class CheckStatus {
@@ -133,6 +132,6 @@ private static class CheckStatus {
133132
}
134133

135134
private static class CheckResult {
136-
private boolean isConnected = false;
135+
private UploadSingleRequestMetrics metrics;
137136
}
138137
}

library/src/main/java/com/qiniu/android/http/metrics/UploadSingleRequestMetrics.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,12 @@
99

1010
public class UploadSingleRequestMetrics {
1111

12+
// 请求的 httpVersion
13+
public String httpVersion;
14+
15+
// 只有进行网络检测才会有 connectCheckMetrics
16+
public UploadSingleRequestMetrics connectCheckMetrics;
17+
1218
public Request request;
1319
public ResponseInfo response;
1420

0 commit comments

Comments
 (0)