package org.epics.archiverappliance.mgmt.bpl.reports;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLEncoder;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.epics.archiverappliance.common.BPLAction;
import org.epics.archiverappliance.config.ApplianceInfo;
import org.epics.archiverappliance.config.ConfigService;
import org.epics.archiverappliance.utils.ui.GetUrlContent;
import org.epics.archiverappliance.utils.ui.MimeTypeConstants;
import org.json.simple.JSONArray;
import org.json.simple.JSONValue;
public class InstanceReportDetails implements BPLAction {
private static Logger logger = Logger.getLogger(InstanceReportDetails.class.getName());
@Override
public void execute(HttpServletRequest req, HttpServletResponse resp, ConfigService configService) throws IOException {
String applianceIdentity = req.getParameter("appliance");
logger.info("Getting the detailed instance metrics for the appliance " + applianceIdentity);
resp.setContentType(MimeTypeConstants.APPLICATION_JSON);
String applianceDetailsURLSnippet = "/getInstanceMetricsForAppliance?appliance=" + URLEncoder.encode(applianceIdentity, "UTF-8");
ApplianceInfo info = configService.getAppliance(applianceIdentity);
try (PrintWriter out = resp.getWriter()) {
LinkedList<Map<String, String>> result = new LinkedList<Map<String, String>>();
addDetailedStatus(result, "Appliance Identity", applianceIdentity);
JSONArray engineStatusVars = GetUrlContent.getURLContentAsJSONArray(info.getEngineURL() + applianceDetailsURLSnippet );
if(engineStatusVars == null) {
logger.warn("No status vars from engine using URL " + info.getEngineURL() + applianceDetailsURLSnippet);
} else {
GetUrlContent.combineJSONArrays(result, engineStatusVars);
}
JSONArray etlStatusVars = GetUrlContent.getURLContentAsJSONArray(info.getEtlURL() + applianceDetailsURLSnippet );
if(etlStatusVars == null) {
logger.warn("No status vars from ETL using URL " + info.getEtlURL() + applianceDetailsURLSnippet);
} else {
GetUrlContent.combineJSONArrays(result, etlStatusVars);
}
JSONArray retrievalStatusVars = GetUrlContent.getURLContentAsJSONArray(info.getRetrievalURL() + applianceDetailsURLSnippet);
if(retrievalStatusVars == null) {
logger.warn("No status vars from retrieval using URL " + info.getRetrievalURL() + applianceDetailsURLSnippet);
} else {
GetUrlContent.combineJSONArrays(result, retrievalStatusVars);
}
out.println(JSONValue.toJSONString(result));
}
}
private static void addDetailedStatus(LinkedList<Map<String, String>> statuses, String name, String value) {
Map<String, String> obj = new LinkedHashMap<String, String>();
obj.put("name", name);
obj.put("value", value);
obj.put("source", "mgmt");
statuses.add(obj);
}
}