package org.lightfish.business.servermonitoring.control.collectors; import java.util.Iterator; import java.util.logging.Logger; import javax.enterprise.inject.Instance; import javax.inject.Inject; import javax.json.JsonObject; import javax.ws.rs.client.Client; import javax.ws.rs.client.Invocation; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.Cookie; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import org.lightfish.business.servermonitoring.control.SessionTokenRetriever; /** * * @author Rob Veldpaus */ public class RestDataCollector { @Inject protected Client client; @Inject protected Instance<String> location; @Inject protected Instance<String> sessionToken; @Inject protected SessionTokenRetriever tokenProvider; @Inject Logger LOG; public long getLong(String serverInstance, String uri, String name) { return getLong(serverInstance, uri, name, "count"); } public int getInt(String serverInstance, String uri, String name) { return getInt(serverInstance, uri, name, "count"); } public long getLong(String serverInstance, String uri, String name, String key) { Response result = getResponse(serverInstance, uri); return getJsonObject(result, name).getJsonNumber(key).longValue(); } public int getInt(String serverInstance, String uri, String name, String key) { Response result = getResponse(serverInstance, uri); return getJsonObject(result, name).getInt(key); } public String getString(String serverInstance, String uri, String name, String key) { Response result = getResponse(serverInstance, uri); return getJsonObject(result, name).getString(key); } public String[] getStringArray(String serverInstance, String name, String key) { String[] empty = new String[0]; Response result = getResponse(serverInstance, name); JsonObject response = result.readEntity(JsonObject.class); response = response.getJsonObject("extraProperties"); if (response == null) { return empty; } response = response.getJsonObject("childResources"); if (response == null) { return empty; } int length = response.size(); String retVal[] = new String[length]; Iterator keyIterator = response.keySet().iterator(); int counter = 0; while (keyIterator.hasNext()) { retVal[counter++] = (String) keyIterator.next(); } return retVal; } public JsonObject getJsonObject(Response result, String name) { JsonObject response = result.readEntity(JsonObject.class); JsonObject extraProperties = response.getJsonObject("extraProperties"); JsonObject retVal = null; if (extraProperties != null) { retVal = extraProperties. getJsonObject("entity"). getJsonObject(name); } else { LOG.info("Null retrieved"); } LOG.info("Retrieved JsonObject: " + retVal + " for " + result + " " + name); return retVal; } public String getBaseURI(String serverInstance) { return getProtocol() + location.get() + "/monitoring/domain/" + serverInstance + "/"; } public String getProtocol() { String protocol = "http://"; //TODO Error, if username == null, use http anyway if (sessionToken != null && sessionToken.get() != null && !sessionToken.get().isEmpty()) { protocol = "http://"; } return protocol; } public String getLocation() { return location.get(); } public Response getResponse(String serverInstance, String uri) { String fullUri = getBaseURI(serverInstance) + uri; return getResponse(fullUri); } public Response getResponse(String fullUri) { WebTarget resource = client.target(fullUri); Invocation.Builder builder = resource.request(MediaType.APPLICATION_JSON); if (sessionToken != null && sessionToken.get() != null && !sessionToken.get().isEmpty()) { builder.cookie(new Cookie("gfresttoken", sessionToken.get())); } return builder.get(Response.class); } }