Refactor RestClient to return KubernetesResponses.
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/54e84083 Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/54e84083 Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/54e84083 Branch: refs/heads/container-autoscaling Commit: 54e84083812619e413793b6de35b26bf7c9b34e5 Parents: 4dae7f2 Author: Nirmal Fernando <[email protected]> Authored: Wed Oct 8 18:52:43 2014 +0530 Committer: Nirmal Fernando <[email protected]> Committed: Wed Oct 8 22:21:29 2014 +0530 ---------------------------------------------------------------------- .../kubernetes/client/KubernetesApiClient.java | 137 ++++++++----------- .../kubernetes/client/rest/RestClient.java | 24 ++-- 2 files changed, 69 insertions(+), 92 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/54e84083/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java index b20dc9b..99485c6 100644 --- a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java +++ b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java @@ -40,6 +40,7 @@ import org.apache.stratos.kubernetes.client.model.ReplicationController; import org.apache.stratos.kubernetes.client.model.ReplicationControllerList; import org.apache.stratos.kubernetes.client.model.Service; import org.apache.stratos.kubernetes.client.model.ServiceList; +import org.apache.stratos.kubernetes.client.rest.KubernetesResponse; import org.apache.stratos.kubernetes.client.rest.RestClient; import com.google.gson.Gson; @@ -60,17 +61,17 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface { public Pod getPod(String podId) throws KubernetesClientException{ try { URI uri = new URIBuilder(baseURL+"pods/"+podId).build(); - HttpResponse res = restClient.doGet(uri); + KubernetesResponse res = restClient.doGet(uri); handleNullResponse("Pod ["+podId+"] retrieval failed.", res); - if (res.getStatusLine().getStatusCode() == HttpStatus.SC_NOT_FOUND) { + if (res.getStatusCode() == HttpStatus.SC_NOT_FOUND) { String msg = "Pod ["+podId+"] doesn't exist."; log.error(msg); throw new KubernetesClientException(msg); } - String content = getHttpResponseString(res); + String content = res.getContent(); GsonBuilder gsonBuilder = new GsonBuilder(); Gson gson = gsonBuilder.create(); @@ -91,15 +92,15 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface { try { URI uri = new URIBuilder(baseURL+"pods").build(); - HttpResponse res = restClient.doGet(uri); + KubernetesResponse res = restClient.doGet(uri); handleNullResponse("Pod retrieval failed.", res); - if (res.getStatusLine().getStatusCode() == HttpStatus.SC_NOT_FOUND) { + if (res.getStatusCode() == HttpStatus.SC_NOT_FOUND) { return new Pod[0]; } - String content = getHttpResponseString(res); + String content = res.getContent(); GsonBuilder gsonBuilder = new GsonBuilder(); Gson gson = gsonBuilder.create(); @@ -124,19 +125,19 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface { log.debug("CreatePod Request Body : "+content); } URI uri = new URIBuilder(baseURL+"pods").build(); - HttpResponse res = restClient.doPost(uri, content); + KubernetesResponse res = restClient.doPost(uri, content); handleNullResponse("Pod "+pod+" creation failed.", res); - if (res.getStatusLine().getStatusCode() == HttpStatus.SC_CONFLICT) { + if (res.getStatusCode() == HttpStatus.SC_CONFLICT) { log.warn("Pod already created. "+pod); return; } - if (res.getStatusLine().getStatusCode() != HttpStatus.SC_ACCEPTED && - res.getStatusLine().getStatusCode() != HttpStatus.SC_OK) { + if (res.getStatusCode() != HttpStatus.SC_ACCEPTED && + res.getStatusCode() != HttpStatus.SC_OK) { String msg = "Pod ["+pod+"] creation failed. Error: "+ - res.getStatusLine().getReasonPhrase(); + res.getReason(); log.error(msg); throw new KubernetesClientException(msg); } @@ -154,20 +155,20 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface { try { URI uri = new URIBuilder(baseURL+"pods/"+podId).build(); - HttpResponse res = restClient.doDelete(uri); + KubernetesResponse res = restClient.doDelete(uri); handleNullResponse("Pod ["+podId+"] deletion failed.", res); - if (res.getStatusLine().getStatusCode() == HttpStatus.SC_NOT_FOUND) { + if (res.getStatusCode() == HttpStatus.SC_NOT_FOUND) { String msg = "Pod ["+podId+"] doesn't exist."; log.error(msg); throw new KubernetesClientException(msg); } - if (res.getStatusLine().getStatusCode() != HttpStatus.SC_ACCEPTED && - res.getStatusLine().getStatusCode() != HttpStatus.SC_OK) { + if (res.getStatusCode() != HttpStatus.SC_ACCEPTED && + res.getStatusCode() != HttpStatus.SC_OK) { String msg = "Pod ["+podId+"] deletion failed. Error: "+ - res.getStatusLine().getReasonPhrase(); + res.getReason(); log.error(msg); throw new KubernetesClientException(msg); } @@ -186,17 +187,17 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface { try { URI uri = new URIBuilder(baseURL+"replicationControllers/"+controllerId).build(); - HttpResponse res = restClient.doGet(uri); + KubernetesResponse res = restClient.doGet(uri); handleNullResponse("Replication Controller ["+controllerId+"] retrieval failed.", res); - if (res.getStatusLine().getStatusCode() == HttpStatus.SC_NOT_FOUND) { + if (res.getStatusCode() == HttpStatus.SC_NOT_FOUND) { String msg = "Replication Controller ["+controllerId+"] doesn't exist."; log.error(msg); throw new KubernetesClientException(msg); } - String content = getHttpResponseString(res); + String content = res.getContent(); GsonBuilder gsonBuilder = new GsonBuilder(); Gson gson = gsonBuilder.create(); @@ -217,15 +218,15 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface { try { URI uri = new URIBuilder(baseURL+"replicationControllers").build(); - HttpResponse res = restClient.doGet(uri); + KubernetesResponse res = restClient.doGet(uri); handleNullResponse("Replication Controller retrieval failed.", res); - if (res.getStatusLine().getStatusCode() == HttpStatus.SC_NOT_FOUND) { + if (res.getStatusCode() == HttpStatus.SC_NOT_FOUND) { return new ReplicationController[0]; } - String content = getHttpResponseString(res); + String content = res.getContent(); GsonBuilder gsonBuilder = new GsonBuilder(); Gson gson = gsonBuilder.create(); @@ -253,15 +254,15 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface { } URI uri = new URIBuilder(baseURL+"replicationControllers").build(); - HttpResponse res = restClient.doPost(uri, content); + KubernetesResponse res = restClient.doPost(uri, content); handleNullResponse("Replication Controller "+controller+" creation failed.", res); - if (res.getStatusLine().getStatusCode() != HttpStatus.SC_ACCEPTED && - res.getStatusLine().getStatusCode() != HttpStatus.SC_OK) { + if (res.getStatusCode() != HttpStatus.SC_ACCEPTED && + res.getStatusCode() != HttpStatus.SC_OK) { String msg = "Replication Controller [" + controller + "] creation failed. Error: " - + res.getStatusLine().getReasonPhrase(); + + res.getReason(); log.error(msg); throw new KubernetesClientException(msg); } @@ -299,15 +300,15 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface { } URI uri = new URIBuilder(baseURL+"replicationControllers/"+controllerId).build(); - HttpResponse res = restClient.doPut(uri, content); + KubernetesResponse res = restClient.doPut(uri, content); handleNullResponse("Replication Controller ["+controllerId+"] update failed.", res); - if (res.getStatusLine().getStatusCode() != HttpStatus.SC_ACCEPTED - && res.getStatusLine().getStatusCode() != HttpStatus.SC_OK) { + if (res.getStatusCode() != HttpStatus.SC_ACCEPTED + && res.getStatusCode() != HttpStatus.SC_OK) { String msg = "Replication Controller [" + controller + "] update failed. Error: " - + res.getStatusLine().getReasonPhrase(); + + res.getReason(); log.error(msg); throw new KubernetesClientException(msg); } @@ -329,20 +330,20 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface { try { URI uri = new URIBuilder(baseURL+"replicationControllers/"+controllerId).build(); - HttpResponse res = restClient.doDelete(uri); + KubernetesResponse res = restClient.doDelete(uri); handleNullResponse("Replication Controller ["+controllerId+"] deletion failed.", res); - if (res.getStatusLine().getStatusCode() == HttpStatus.SC_NOT_FOUND) { + if (res.getStatusCode() == HttpStatus.SC_NOT_FOUND) { String msg = "Replication Controller ["+controllerId+"] doesn't exist."; log.error(msg); throw new KubernetesClientException(msg); } - if (res.getStatusLine().getStatusCode() != HttpStatus.SC_ACCEPTED && - res.getStatusLine().getStatusCode() != HttpStatus.SC_OK) { + if (res.getStatusCode() != HttpStatus.SC_ACCEPTED && + res.getStatusCode() != HttpStatus.SC_OK) { String msg = "Replication Controller ["+controllerId+"] deletion failed. Error: "+ - res.getStatusLine().getReasonPhrase(); + res.getReason(); log.error(msg); throw new KubernetesClientException(msg); } @@ -360,17 +361,17 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface { throws KubernetesClientException { try { URI uri = new URIBuilder(baseURL+"services/"+serviceId).build(); - HttpResponse res = restClient.doGet(uri); + KubernetesResponse res = restClient.doGet(uri); handleNullResponse("Service ["+serviceId+"] retrieval failed.", res); - if (res.getStatusLine().getStatusCode() == HttpStatus.SC_NOT_FOUND) { + if (res.getStatusCode() == HttpStatus.SC_NOT_FOUND) { String msg = "Service ["+serviceId+"] doesn't exist."; log.error(msg); throw new KubernetesClientException(msg); } - String content = getHttpResponseString(res); + String content = res.getContent(); GsonBuilder gsonBuilder = new GsonBuilder(); Gson gson = gsonBuilder.create(); @@ -389,15 +390,15 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface { try { URI uri = new URIBuilder(baseURL+"services").build(); - HttpResponse res = restClient.doGet(uri); + KubernetesResponse res = restClient.doGet(uri); handleNullResponse("Service retrieval failed.", res); - if (res.getStatusLine().getStatusCode() == HttpStatus.SC_NOT_FOUND) { + if (res.getStatusCode() == HttpStatus.SC_NOT_FOUND) { return new Service[0]; } - String content = getHttpResponseString(res); + String content = res.getContent(); GsonBuilder gsonBuilder = new GsonBuilder(); Gson gson = gsonBuilder.create(); @@ -422,14 +423,14 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface { } URI uri = new URIBuilder(baseURL+"services").build(); - HttpResponse res = restClient.doPost(uri, content); + KubernetesResponse res = restClient.doPost(uri, content); handleNullResponse("Service "+service+" creation failed.", res); - if (res.getStatusLine().getStatusCode() != HttpStatus.SC_ACCEPTED && - res.getStatusLine().getStatusCode() != HttpStatus.SC_OK) { + if (res.getStatusCode() != HttpStatus.SC_ACCEPTED && + res.getStatusCode() != HttpStatus.SC_OK) { String msg = "Service ["+service+"] creation failed. Error: "+ - res.getStatusLine().getReasonPhrase(); + res.getReason(); log.error(msg); throw new KubernetesClientException(msg); } @@ -449,20 +450,20 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface { try { URI uri = new URIBuilder(baseURL+"services/"+serviceId).build(); - HttpResponse res = restClient.doDelete(uri); + KubernetesResponse res = restClient.doDelete(uri); handleNullResponse("Service ["+serviceId+"] deletion failed.", res); - if (res.getStatusLine().getStatusCode() == HttpStatus.SC_NOT_FOUND) { + if (res.getStatusCode() == HttpStatus.SC_NOT_FOUND) { String msg = "Service ["+serviceId+"] doesn't exist."; log.error(msg); throw new KubernetesClientException(msg); } - if (res.getStatusLine().getStatusCode() != HttpStatus.SC_ACCEPTED && - res.getStatusLine().getStatusCode() != HttpStatus.SC_OK) { + if (res.getStatusCode() != HttpStatus.SC_ACCEPTED && + res.getStatusCode() != HttpStatus.SC_OK) { String msg = "Service ["+serviceId+"] deletion failed. Error: "+ - res.getStatusLine().getReasonPhrase(); + res.getReason(); log.error(msg); throw new KubernetesClientException(msg); } @@ -482,15 +483,15 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface { try { String labelQuery = getLabelQuery(label); URI uri = new URIBuilder(baseURL + "pods").addParameter("labels", labelQuery).build(); - HttpResponse res = restClient.doGet(uri); + KubernetesResponse res = restClient.doGet(uri); handleNullResponse("Pod retrieval failed.", res); - if (res.getStatusLine().getStatusCode() == HttpStatus.SC_NOT_FOUND) { + if (res.getStatusCode() == HttpStatus.SC_NOT_FOUND) { return new Pod[0]; } - String content = getHttpResponseString(res); + String content = res.getContent(); GsonBuilder gsonBuilder = new GsonBuilder(); Gson gson = gsonBuilder.create(); @@ -512,10 +513,10 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface { for (Label l : label) { query = query.concat("name="+l.getName()+","); } - return query.endsWith(",") ? query.substring(0, query.length()) : query; + return query.endsWith(",") ? query.substring(0, query.length()-1) : query; } - private void handleNullResponse(String message, HttpResponse res) + private void handleNullResponse(String message, KubernetesResponse res) throws KubernetesClientException { if (res == null) { log.error(message+ " Null response receieved."); @@ -523,32 +524,6 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface { } } - // This method gives the HTTP response string - private String getHttpResponseString(HttpResponse response) { - try { - BufferedReader reader = new BufferedReader(new InputStreamReader( - (response.getEntity().getContent()))); - - String output; - String result = ""; - - while ((output = reader.readLine()) != null) { - result += output; - } - - return result; - } catch (SocketException e) { - log.error("Connection problem"); - return null; - } catch (NullPointerException e) { - log.error("Null value return from server"); - return null; - } catch (IOException e) { - log.error("IO error"); - return null; - } - } - public String getBaseURL() { return baseURL; } http://git-wip-us.apache.org/repos/asf/stratos/blob/54e84083/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/rest/RestClient.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/rest/RestClient.java b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/rest/RestClient.java index 272d04b..061c6d6 100644 --- a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/rest/RestClient.java +++ b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/rest/RestClient.java @@ -18,6 +18,10 @@ */ package org.apache.stratos.kubernetes.client.rest; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.SocketException; import java.net.URI; import org.apache.http.HttpResponse; @@ -49,7 +53,7 @@ public class RestClient { * @throws Exception * if any errors occur when executing the request */ - public HttpResponse doPost(URI resourcePath, String jsonParamString) throws Exception{ + public KubernetesResponse doPost(URI resourcePath, String jsonParamString) throws Exception{ try { httpClient = new DefaultHttpClient(); HttpPost postRequest = new HttpPost(resourcePath); @@ -58,7 +62,7 @@ public class RestClient { input.setContentType("application/json"); postRequest.setEntity(input); - HttpResponse response = httpClient.execute(postRequest); + KubernetesResponse response = httpClient.execute(postRequest, new KubernetesResponseHandler()); return response; } finally { @@ -81,28 +85,26 @@ public class RestClient { * @throws org.apache.http.client.ClientProtocolException and IOException * if any errors occur when executing the request */ - public HttpResponse doGet(URI resourcePath) throws Exception{ + public KubernetesResponse doGet(URI resourcePath) throws Exception{ try { httpClient = new DefaultHttpClient(); HttpGet getRequest = new HttpGet(resourcePath); - System.out.println(getRequest.getRequestLine().getUri()); getRequest.addHeader("Content-Type", "application/json"); - HttpResponse response = httpClient.execute(getRequest); - + KubernetesResponse response = httpClient.execute(getRequest, new KubernetesResponseHandler()); return response; } finally { httpClient.getConnectionManager().shutdown(); } } - - public HttpResponse doDelete(URI resourcePath) throws Exception { + + public KubernetesResponse doDelete(URI resourcePath) throws Exception { try { httpClient = new DefaultHttpClient(); HttpDelete httpDelete = new HttpDelete(resourcePath); httpDelete.addHeader("Content-Type", "application/json"); - HttpResponse response = httpClient.execute(httpDelete); + KubernetesResponse response = httpClient.execute(httpDelete, new KubernetesResponseHandler()); return response; @@ -111,7 +113,7 @@ public class RestClient { } } - public HttpResponse doPut(URI resourcePath, String jsonParamString) throws Exception { + public KubernetesResponse doPut(URI resourcePath, String jsonParamString) throws Exception { try { httpClient = new DefaultHttpClient(); @@ -121,7 +123,7 @@ public class RestClient { input.setContentType("application/json"); putRequest.setEntity(input); - HttpResponse response = httpClient.execute(putRequest); + KubernetesResponse response = httpClient.execute(putRequest, new KubernetesResponseHandler()); return response;
