Skip to content

Commit

Permalink
Merge pull request #231 from qiniu/v8
Browse files Browse the repository at this point in the history
use autozone
  • Loading branch information
longbai authored Oct 21, 2016
2 parents 0b37731 + d53f3f5 commit b6b93fd
Show file tree
Hide file tree
Showing 45 changed files with 1,365 additions and 801 deletions.
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ apply plugin: 'checkstyle'


def versionName() {
String config = 'src/main/java/com/qiniu/common/Config.java'
String config = 'src/main/java/com/qiniu/common/Constants.java'
String fileContents = new File(config).text
Matcher myMatcher = fileContents =~ /VERSION = "(.+)";/
String version = myMatcher[0][1]
Expand Down
53 changes: 53 additions & 0 deletions src/main/java/com/qiniu/cdn/CdnManager.java
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);
}
}
154 changes: 154 additions & 0 deletions src/main/java/com/qiniu/common/AutoZone.java
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;
}
}
88 changes: 0 additions & 88 deletions src/main/java/com/qiniu/common/Config.java

This file was deleted.

37 changes: 37 additions & 0 deletions src/main/java/com/qiniu/common/Constants.java
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() {
}
}

Loading

0 comments on commit b6b93fd

Please sign in to comment.