Java tutorial
/* * Copyright 2004,2005 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.wso2.carbon.oc.internal; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager; import org.apache.commons.httpclient.UsernamePasswordCredentials; import org.apache.commons.httpclient.auth.AuthScope; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.httpclient.methods.RequestEntity; import org.apache.commons.httpclient.methods.StringRequestEntity; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.lang.StringUtils; import org.wso2.carbon.core.ServerStatus; import org.wso2.carbon.oc.asset.Machine; import org.wso2.carbon.oc.asset.Server; import javax.crypto.Mac; import java.io.IOException; import java.io.UnsupportedEncodingException; public class OperationsCenterConnector { private static Logger logger = LoggerFactory.getLogger(OperationsCenterConnector.class); /** * The http client used to connect Operations Center. */ private HttpClient httpClient; boolean isRegistered = false; private String ocUrl; private static final String REGISTRATION_PATH = "/api/register"; private static final String UPDATE_PATH = "/api/update"; private static final String CONTENT_TYPE = "application/json"; private static final String CHARACTER_SET = "UTF-8"; //temp private JSONArray resJsonArray = new JSONArray(); //private static OperationsCenterAgentComponent operationsCenterAgentComponent = new OperationsCenterAgentComponent(); public OperationsCenterConnector(String ocUrl, String username, String password) { this.ocUrl = ocUrl; if (StringUtils.isBlank(this.ocUrl)) { throw new IllegalArgumentException("Operations Center URL is unspecified."); } this.httpClient = new HttpClient(new MultiThreadedHttpConnectionManager()); this.httpClient.getState().setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(username, password)); this.httpClient.getParams().setAuthenticationPreemptive(true); } /** * @return */ public HttpClient getHttpClient() { return httpClient; } public void report() { logger.info("=============reporting.."); if (isRegistered) { logger.info("sending statistics....!"); sendStatistic(); } else { //logger.info("registering....!"); register(); //logger.info("registered.....!"); } } private void sendStatistic() { JSONObject jsonObject = new JSONObject(); //dynamic data [Machine] jsonObject.put("freeMemory", "" + Machine.getInstance().getFreeMemoryMB()); jsonObject.put("usageIdle", "" + Machine.getInstance().getIdleCpuUsage()); jsonObject.put("usageSystem", "" + Machine.getInstance().getSystemCpuUsage()); jsonObject.put("usageUser", "" + Machine.getInstance().getUserCpuUsage()); //dynamic data [Server] jsonObject.put("adminServiceUrl", Server.getInstance().getAdminServiceUrl()); jsonObject.put("serverUpTime", "" + Server.getInstance().getServerUptime()); jsonObject.put("threadCount", "" + Server.getInstance().getThreadcount()); JSONObject request = new JSONObject(); request.put("update", jsonObject); String jsonString = request.toJSONString(); PostMethod postMethod = new PostMethod(ocUrl + UPDATE_PATH); try { RequestEntity entity = new StringRequestEntity(jsonString, CONTENT_TYPE, CHARACTER_SET); postMethod.setRequestEntity(entity); try { int statusCode = httpClient.executeMethod(postMethod); //json parser String responseMessage = postMethod.getResponseBodyAsString(); if (isJsonPassed(responseMessage)) { //add jackson JSONParser parser = new JSONParser(); Object obj = parser.parse(responseMessage); JSONObject resObj = (JSONObject) obj; String status = (String) resObj.get("command"); if (status.equals(ServerStatus.STATUS_RESTARTING)) { logger.info("[STATISTIC] Response : " + status); try { OperationsCenterAgentDataHolder.getInstance().getiServerAdmin().restart(); } catch (Exception e) { logger.info("[STATISTIC] problem while restarting server "); } } else if (status.equals(ServerStatus.STATUS_SHUTTING_DOWN)) { logger.info("[STATISTIC] Response : " + status); try { OperationsCenterAgentDataHolder.getInstance().getiServerAdmin().shutdown(); } catch (Exception e) { logger.info("[STATISTIC] problem while shutting down server "); } } else if (status.equals("G_" + ServerStatus.STATUS_RESTARTING)) { logger.info("[STATISTIC] Response : " + status); try { OperationsCenterAgentDataHolder.getInstance().getiServerAdmin().restartGracefully(); } catch (Exception e) { logger.info("[STATISTIC] problem while gracefull restart server "); } } else if (status.equals("G_" + ServerStatus.STATUS_SHUTTING_DOWN)) { logger.info("[STATISTIC] Response : " + status); try { OperationsCenterAgentDataHolder.getInstance().getiServerAdmin().shutdownGracefully(); } catch (Exception e) { logger.info("[STATISTIC] problem while gracefull shutting down server "); } } } if (statusCode == HttpStatus.SC_OK) { isRegistered = true; } else { logger.error("[STATISTIC] Failed to send stats to the Operations Center, Status Code : " + statusCode); } } catch (IOException e) { logger.error("[STATISTIC] Failed to Execute post method"); isRegistered = false; } catch (ParseException e) { logger.error("[STATISTIC] Failed to parse json method"); } } catch (UnsupportedEncodingException e) { logger.error("[STATISTIC] Failed to send stats to Operations Center"); } catch (IOException e) { e.printStackTrace(); } finally { postMethod.releaseConnection(); } } private boolean isJsonPassed(String strJson) { boolean passed = false; JSONParser parser = new JSONParser(); try { parser.parse(strJson); passed = true; } catch (ParseException e) { passed = false; } return passed; } private boolean register() { JSONObject jsonObject = new JSONObject(); //registering data [Server] jsonObject.put("domain", Server.getInstance().getDomain()); jsonObject.put("subDomain", Server.getInstance().getSubDomain()); jsonObject.put("serverName", "" + Server.getInstance().getServerName()); jsonObject.put("adminServiceUrl", Server.getInstance().getAdminServiceUrl()); jsonObject.put("startUpTime", "" + Server.getInstance().getServerStartTime()); //registering data [Machine] jsonObject.put("ip", Machine.getInstance().getIp()); jsonObject.put("osName", Machine.getInstance().getOsName()); jsonObject.put("cpuCount", Machine.getInstance().getCpuCount()); jsonObject.put("totalMemory", Machine.getInstance().getTotalMemoryMB()); jsonObject.put("cpuSpeed", Machine.getInstance().getCpuSpeedGHz()); JSONObject request = new JSONObject(); request.put("register", jsonObject); String jsonString = request.toJSONString(); PostMethod postMethod = new PostMethod(ocUrl + REGISTRATION_PATH); try { RequestEntity entity = new StringRequestEntity(jsonString, CONTENT_TYPE, CHARACTER_SET); postMethod.setRequestEntity(entity); try { int statusCode = httpClient.executeMethod(postMethod); if (statusCode == HttpStatus.SC_OK) { isRegistered = true; logger.info("[REGISTER] Registered in Operations Center successfully."); } else { logger.error("[REGISTER] Failed to register in Operations Center, Status Code : " + statusCode); } } catch (IOException e) { logger.error("[REGISTER] Failed to Execute post method"); return false; } } catch (UnsupportedEncodingException e) { logger.error("[REGISTER] Failed to register with Operations Center"); isRegistered = false; } finally { postMethod.releaseConnection(); } return true; } }