/*******************************************************************************
* ===========================================================
* Ankush : Big Data Cluster Management Solution
* ===========================================================
*
* (C) Copyright 2014, by Impetus Technologies
*
* This is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License (LGPL v3) as
* published by the Free Software Foundation;
*
* This software is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this software; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
******************************************************************************/
package com.impetus.ankush.agent.utils;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import org.apache.commons.io.IOUtils;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.annotate.JsonAutoDetect.Visibility;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
/**
* The Class AgentRestClient.
*
* @author Hokam Chauhan
*/
public class AgentRestClient {
/** The log. */
private static final AgentLogger LOGGER = new AgentLogger(
AgentRestClient.class);
private static final String APPLICATION_JSON = "application/json";
/** The mapper. */
private ObjectMapper mapper = new ObjectMapper();
public AgentRestClient() {
mapper.setVisibilityChecker(mapper.getVisibilityChecker()
.withFieldVisibility(Visibility.ANY));
}
/**
* Method getJsonInfoString.
*
* @param info
* Object
* @return String The Json String of Object
*/
private String getJsonInfoString(Object info) {
String jsonObject = null;
try {
jsonObject = mapper.writeValueAsString(info);
} catch (JsonGenerationException e) {
LOGGER.error(e.getMessage(), e);
} catch (JsonMappingException e) {
LOGGER.error(e.getMessage(), e);
} catch (IOException e) {
LOGGER.error(e.getMessage(), e);
}
return jsonObject;
}
/**
* Method sendObject.
*
* @param object
* Object
* @param urlPath
* String
* @return String The Json Output Response of the POST Request.
*/
public String sendData(Object object, String urlPath) {
String json = getJsonInfoString(object);
return postRequest(urlPath, json);
}
/**
* Method sendNodeInfo.
*
* @param urlPath
* String
* @param input
* String
* @return String
* @throws IOException
*/
private String sendRequest(String urlPath, String input, String method,
String accept, String contentType) {
HttpURLConnection conn = null;
OutputStream os = null;
BufferedReader br = null;
InputStreamReader isr = null;
try {
LOGGER.info("URL Path : " + urlPath);
URL url = new URL(urlPath);
conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod(method);
conn.setRequestProperty("Accept", accept);
conn.setRequestProperty("Content-type", contentType);
if (input != null && !input.isEmpty()) {
os = conn.getOutputStream();
os.write(input.getBytes());
os.flush();
}
LOGGER.info("Response Code :" + conn.getResponseCode());
if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) {
throw new RuntimeException("Failed : HTTP error code : "
+ conn.getResponseCode());
}
isr = new InputStreamReader(conn.getInputStream());
br = new BufferedReader(isr);
String buffer = "";
StringBuilder output = new StringBuilder();
while ((buffer = br.readLine()) != null) {
output.append(buffer);
}
return output.toString();
} catch (Exception e) {
LOGGER.error(e.getMessage(), e);
return null;
} finally {
try {
if (isr != null) {
isr.close();
}
if (br != null) {
br.close();
}
} catch (Exception e) {
LOGGER.error(
"Unable to close buffer stream while sending request",
e);
}
if (conn != null) {
conn.disconnect();
}
if (os != null) {
IOUtils.closeQuietly(os);
}
}
}
/**
* Method to send get request.
*
* @param url
* @return
*/
public String getRequest(String url) {
return sendRequest(url, null, "GET", APPLICATION_JSON, APPLICATION_JSON);
}
/**
* Method to send post request.
*
* @param url
* @param data
* @return
*/
public String postRequest(String url, String data) {
return sendRequest(url, data, "POST", APPLICATION_JSON,
APPLICATION_JSON);
}
}