Skip to content

use autozone #231

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 10 commits into from
Oct 21, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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