-
Notifications
You must be signed in to change notification settings - Fork 477
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #231 from qiniu/v8
use autozone
- Loading branch information
Showing
45 changed files
with
1,365 additions
and
801 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
package com.qiniu.cdn; | ||
|
||
import com.qiniu.common.Constants; | ||
import com.qiniu.common.QiniuException; | ||
import com.qiniu.http.Client; | ||
import com.qiniu.http.Response; | ||
import com.qiniu.util.Auth; | ||
import com.qiniu.util.Json; | ||
import com.qiniu.util.StringMap; | ||
|
||
import java.util.HashMap; | ||
|
||
/** | ||
* Created by bailong on 16/9/21. | ||
*/ | ||
public final class CdnManager { | ||
private final Auth auth; | ||
private final String server; | ||
private final Client client; | ||
|
||
public CdnManager(Auth auth) { | ||
this(auth, "http://fusion.qiniuapi.com"); | ||
} | ||
|
||
private CdnManager(Auth auth, String server) { | ||
this.auth = auth; | ||
this.server = server; | ||
this.client = new Client(null, false, null, | ||
Constants.CONNECT_TIMEOUT, Constants.RESPONSE_TIMEOUT, Constants.WRITE_TIMEOUT); | ||
} | ||
|
||
public Response refreshUrls(String[] urls) throws QiniuException { | ||
return refreshUrlsAndDirs(urls, null); | ||
} | ||
|
||
public Response refreshDirs(String[] dirs) throws QiniuException { | ||
return refreshUrlsAndDirs(null, dirs); | ||
} | ||
|
||
public Response refreshUrlsAndDirs(String[] urls, String[] dirs) throws QiniuException { | ||
HashMap<String, String[]> req = new HashMap<>(); | ||
if (urls != null) { | ||
req.put("urls", urls); | ||
} | ||
if (dirs != null) { | ||
req.put("dirs", dirs); | ||
} | ||
byte[] body = Json.encode(req).getBytes(Constants.UTF_8); | ||
String url = server + "/v2/tune/refresh"; | ||
StringMap headers = auth.authorizationV2(url, "POST", body, Client.JsonMime); | ||
return client.post(url, body, headers, Client.JsonMime); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,154 @@ | ||
package com.qiniu.common; | ||
|
||
import com.qiniu.http.Client; | ||
import com.qiniu.http.Response; | ||
import com.qiniu.util.Json; | ||
import com.qiniu.util.UrlSafeBase64; | ||
|
||
import java.util.List; | ||
import java.util.Map; | ||
import java.util.concurrent.ConcurrentHashMap; | ||
|
||
/** | ||
* Created by bailong on 16/9/15. | ||
*/ | ||
final class AutoZone extends Zone { | ||
static AutoZone instance = new AutoZone(); | ||
private final String ucServer; | ||
private Map<ZoneIndex, ZoneInfo> zones = new ConcurrentHashMap<>(); | ||
private Client client; | ||
|
||
AutoZone() { | ||
this("https://uc.qbox.me"); | ||
} | ||
|
||
AutoZone(String ucServer) { | ||
this.ucServer = ucServer; | ||
client = new Client(); | ||
} | ||
|
||
private UCRet getZoneJson(ZoneIndex index) throws QiniuException { | ||
String address = ucServer + "/v1/query?ak=" + index.accessKey + "&bucket=" + index.bucket; | ||
|
||
Response r = client.get(address); | ||
return r.jsonToObject(UCRet.class); | ||
} | ||
|
||
// only for test public | ||
ZoneInfo zoneInfo(String ak, String bucket) throws QiniuException { | ||
ZoneIndex index = new ZoneIndex(ak, bucket); | ||
ZoneInfo info = zones.get(index); | ||
if (info == null) { | ||
UCRet ret = getZoneJson(index); | ||
try { | ||
info = ZoneInfo.buildFromUcRet(ret); | ||
} catch (Exception e) { | ||
e.printStackTrace(); | ||
} | ||
|
||
if (info != null) { | ||
zones.put(index, info); | ||
} | ||
} | ||
return info; | ||
} | ||
|
||
// only for test public | ||
ZoneInfo queryByToken(String token) { | ||
try { | ||
// http://developer.qiniu.com/article/developer/security/upload-token.html | ||
// http://developer.qiniu.com/article/developer/security/put-policy.html | ||
String[] strings = token.split(":"); | ||
String ak = strings[0]; | ||
String policy = new String(UrlSafeBase64.decode(strings[2]), Constants.UTF_8); | ||
String bkt = Json.decode(policy).get("scope").toString().split(":")[0]; | ||
return zoneInfo(ak, bkt); | ||
} catch (Exception e) { | ||
e.printStackTrace(); | ||
} | ||
return null; | ||
} | ||
|
||
public String upHost(String token) { | ||
ZoneInfo info = queryByToken(token); | ||
if (info == null) { | ||
return ""; | ||
} | ||
return info.upHost; | ||
} | ||
|
||
public String upHostBackup(String token) { | ||
ZoneInfo info = queryByToken(token); | ||
if (info == null) { | ||
return ""; | ||
} | ||
return info.upBackup; | ||
} | ||
|
||
public String upIpBackup(String token) { | ||
ZoneInfo info = queryByToken(token); | ||
if (info == null) { | ||
return ""; | ||
} | ||
return info.upIp; | ||
} | ||
|
||
public String upHostHttps(String token) { | ||
ZoneInfo info = queryByToken(token); | ||
if (info == null) { | ||
return ""; | ||
} | ||
return info.upHttps; | ||
} | ||
|
||
static class ZoneInfo { | ||
final String ioHost; | ||
final String upHost; | ||
final String upIp; | ||
final String upBackup; | ||
final String upHttps; | ||
|
||
private ZoneInfo(String ioHost, String upHost, String upIp, String upBackup, String upHttps) { | ||
this.ioHost = ioHost; | ||
this.upHost = upHost; | ||
this.upIp = upIp; | ||
this.upBackup = upBackup; | ||
this.upHttps = upHttps; | ||
} | ||
|
||
static ZoneInfo buildFromUcRet(UCRet ret) { | ||
String ioHost = ret.http.get("io").get(0); | ||
List<String> up = ret.http.get("up"); | ||
String upHost = up.get(0); | ||
String upBackup = up.get(1); | ||
String upIp = up.get(2).split(" ")[2].split("//")[1]; | ||
String upHttps = ret.https.get("up").get(0); | ||
|
||
return new ZoneInfo(ioHost, upHost, upIp, upBackup, upHttps); | ||
} | ||
} | ||
|
||
private static class ZoneIndex { | ||
private final String accessKey; | ||
private final String bucket; | ||
|
||
ZoneIndex(String accessKey, String bucket) { | ||
this.accessKey = accessKey; | ||
this.bucket = bucket; | ||
} | ||
|
||
public int hashCode() { | ||
return accessKey.hashCode() * 37 + bucket.hashCode(); | ||
} | ||
|
||
public boolean equals(Object obj) { | ||
return obj == this || !(obj == null || !(obj instanceof ZoneIndex)) | ||
&& ((ZoneIndex) obj).accessKey.equals(accessKey) && ((ZoneIndex) obj).bucket.equals(bucket); | ||
} | ||
} | ||
|
||
private class UCRet { | ||
Map<String, List<String>> http; | ||
Map<String, List<String>> https; | ||
} | ||
} |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
package com.qiniu.common; | ||
|
||
import java.nio.charset.Charset; | ||
|
||
/** | ||
* Created by bailong on 16/9/14. | ||
*/ | ||
public final class Constants { | ||
/** | ||
* 版本号 | ||
*/ | ||
public static final String VERSION = "8.0.0"; | ||
/** | ||
* 块大小,不能改变 | ||
*/ | ||
public static final int BLOCK_SIZE = 4 * 1024 * 1024; | ||
/** | ||
* 所有都是UTF-8编码 | ||
*/ | ||
public static final Charset UTF_8 = Charset.forName("UTF-8"); | ||
/** | ||
* 连接超时时间 单位秒(默认10s) | ||
*/ | ||
public static final int CONNECT_TIMEOUT = 10; | ||
/** | ||
* 写超时时间 单位秒(默认 0 , 不超时) | ||
*/ | ||
public static final int WRITE_TIMEOUT = 0; | ||
/** | ||
* 回复超时时间 单位秒(默认30s) | ||
*/ | ||
public static final int RESPONSE_TIMEOUT = 30; | ||
|
||
private Constants() { | ||
} | ||
} | ||
|
Oops, something went wrong.