1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-02-04 00:18:01 +01:00

Implemented a simple fethcer to replace httpclient

This commit is contained in:
Ivar Conradi Østhus 2014-10-24 12:08:35 +02:00
parent 39f55e25c1
commit d86f5f905b
8 changed files with 134 additions and 55 deletions

View File

@ -67,8 +67,8 @@
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>

View File

@ -0,0 +1,64 @@
package no.finn.unleash.repository;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.Collection;
import no.finn.unleash.Toggle;
public final class HttpToggleFetcher implements ToggleFetcher {
public static final int CONNECT_TIMEOUT = 10000;
private String etag = null;
private final URL toggleUrl;
public HttpToggleFetcher(URI repo) {
try {
toggleUrl = repo.toURL();
} catch (MalformedURLException ex) {
throw new IllegalArgumentException("Invalid repo uri", ex);
}
}
@Override
public ToggleResponse fetchToggles() throws ToggleException {
HttpURLConnection connection = null;
try {
connection = (HttpURLConnection) toggleUrl.openConnection();
connection.setConnectTimeout(CONNECT_TIMEOUT);
connection.setReadTimeout(CONNECT_TIMEOUT);
connection.setRequestProperty("If-None-Match", etag);
connection.connect();
int responseCode = connection.getResponseCode();
if(responseCode < 300) {
return getToggleResponse(connection);
} else {
return new ToggleResponse(ToggleResponse.Status.NOT_CHANGED);
}
} catch (IOException e) {
throw new ToggleException("Could not fetch toggles", e);
} finally {
if(connection != null) {
connection.disconnect();
}
}
}
private ToggleResponse getToggleResponse(HttpURLConnection request) throws IOException {
etag = request.getHeaderField("ETag");
try(BufferedReader reader = new BufferedReader(
new InputStreamReader((InputStream) request.getContent(), StandardCharsets.UTF_8))) {
Collection<Toggle> toggles = JsonToggleParser.fromJson(reader);
return new ToggleResponse(ToggleResponse.Status.CHANGED, toggles);
}
}
}

View File

@ -1,5 +1,6 @@
package no.finn.unleash.repository;
import java.io.Reader;
import java.util.Collection;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
@ -22,4 +23,9 @@ public final class JsonToggleParser {
Gson gson = new GsonBuilder().create();
return gson.fromJson(jsonString,ToggleCollection.class).getFeatures();
}
public static Collection<Toggle> fromJson(Reader reader) {
Gson gson = new GsonBuilder().create();
return gson.fromJson(reader,ToggleCollection.class).getFeatures();
}
}

View File

@ -4,4 +4,8 @@ public class ToggleException extends RuntimeException {
public ToggleException(String message) {
super(message);
}
public ToggleException(String message, Throwable cause) {
super(message, cause);
}
}

View File

@ -0,0 +1,5 @@
package no.finn.unleash.repository;
public interface ToggleFetcher {
ToggleResponse fetchToggles() throws ToggleException;
}

View File

@ -0,0 +1,30 @@
package no.finn.unleash.repository;
import java.util.Collection;
import java.util.Collections;
import no.finn.unleash.Toggle;
public final class ToggleResponse {
enum Status {NOT_CHANGED, CHANGED}
private final Status status;
private final Collection<Toggle> getToggles;
public ToggleResponse(Status status, Collection<Toggle> getToggles) {
this.status = status;
this.getToggles = getToggles;
}
public ToggleResponse(Status status) {
this.status = status;
this.getToggles = Collections.emptyList();
}
public Status getStatus() {
return status;
}
public Collection<Toggle> getGetToggles() {
return getToggles;
}
}

View File

@ -0,0 +1,23 @@
package no.finn.unleash.repository;
import java.net.URI;
import org.junit.Ignore;
import org.junit.Test;
import static org.junit.Assert.*;
public class HttpToggleFetcherTest {
@Test
@Ignore
public void explore() {
HttpToggleFetcher httpToggleFetcher = new HttpToggleFetcher(URI.create("http://localhost:4242/features"));
ToggleResponse toggleResponse = httpToggleFetcher.fetchToggles();
toggleResponse = httpToggleFetcher.fetchToggles();
System.out.println("toggleResponse = " + toggleResponse);
}
}

View File

@ -1,53 +0,0 @@
module.exports = [
{
"id": 1,
"created": "2014-08-01 12:22:00",
"type": "feature-create",
"user": "John, Doe",
"comment": "Optional comment",
"data": {
"name": "com.example.feature",
"status": "off",
"strategy": "default",
"description": "Feature description"
}
},
{
"id": 2,
"created": "2014-09-02 15:23:11",
"type": "feature-update",
"user": "User name",
"comment": "Optional comment",
"data": {
"name": "com.example.feature",
"status": "on"
}
},
{
"id": 3,
"created": "1970-01-01 00:00:00",
"type": "strategy-create",
"user": "User name",
"comment": "Optional comment",
"data": {
"name": "strategyA",
"parameters_template": {
"users": "example values",
"target_age": "number"
}
}
},
{
"id": 4,
"created": "1970-01-01 00:00:00",
"type": "strategy-update",
"user": "localhost.localdomain",
"comment": "commit message goes here",
"data": {
"name": "strategyA",
"parameters_template": {
"users": "new default example values"
}
}
}
];