in uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerJsonFormat.java [1459:1779]
private void handleServletJsonFormatServicesAaData(String target,Request baseRequest,HttpServletRequest request,HttpServletResponse response)
throws IOException, ServletException
{
String methodName = "handleServletJsonFormatServicesAaData";
duccLogger.trace(methodName, jobid, messages.fetch("enter"));
JsonObject jsonResponse = new JsonObject();
JsonArray data = new JsonArray();
if(dh.is_ducc_head_backup()) {
JsonArray row = new JsonArray();
noJobs(row, "no data - not master");
data.add(row);
}
else {
ServicesSortCache servicesSortCache = ServicesSortCache.getInstance();
Collection<IServiceAdapter> servicesSortedCollection = servicesSortCache.getSortedCollection();
if(!servicesSortedCollection.isEmpty()) {
StringBuffer col;
int maxRecords = getServicesMax(request);
ArrayList<String> users = getServicesUsers(request);
int counter = 0;
for(IServiceAdapter service : servicesSortedCollection) {
boolean list = DuccWebUtil.isListable(request, users, maxRecords, counter, service);
if(!list) {
continue;
}
counter++;
JsonArray row = new JsonArray();
int sid = service.getId();
String user = service.getUser();
long deployments = service.getDeployments();
long instances = service.getInstances();
// Enable
col = new StringBuffer();
col.append("<span class=\"ducc-col-start\">");
if(service.isRegistered()) {
if(buttonsEnabled) {
if(service.isDisabled()) {
col.append("<input type=\"button\" onclick=\"ducc_confirm_service_enable("+sid+")\" value=\"Enable\" "+getDisabledWithHover(request,user,service)+"/>");
}
}
}
col.append("</span>");
row.add(new JsonPrimitive(col.toString()));
// Stop
col = new StringBuffer();
col.append("<span class=\"ducc-col-stop\">");
if(service.isRegistered()) {
if(buttonsEnabled) {
if(service.isPingOnly()) {
if(service.isPingActive()) {
col.append("<input type=\"button\" onclick=\"ducc_confirm_service_stop("+sid+")\" value=\"Stop\" "+getDisabledWithHover(request,user,service)+"/>");
}
}
else {
if(deployments != 0) {
col.append("<input type=\"button\" onclick=\"ducc_confirm_service_stop("+sid+")\" value=\"Stop\" "+getDisabledWithHover(request,user,service)+"/>");
}
}
}
}
col.append("</span>");
row.add(new JsonPrimitive(col.toString()));
// Id
col = new StringBuffer();
String name = service.getName();
col.append("<span>");
String id = "<a href=\"service.details.html?name="+name+"\">"+sid+"</a>";
col.append(""+id);
col.append("</span>");
row.add(new JsonPrimitive(col.toString()));
// Name
col = new StringBuffer();
col.append("<span>");
col.append(name);
col.append("</span>");
row.add(new JsonPrimitive(col.toString()));
// State
col = new StringBuffer();
String state = service.getState();
boolean alert = service.isAlert();
boolean available = service.isStateAvailable();
if(alert) {
state += "+Alert";
}
String style = "class=\"health_black\";";
if(alert) {
style = "class=\"health_red\"";
}
else if(available) {
style = "class=\"health_green\"";
}
String stateHover = ServicesHelper.getInstance().getStateHover(service);
if(stateHover.length() > 0) {
stateHover = "title="+"\""+stateHover+"\"";
}
col.append("<span "+style+" "+stateHover+">");
col.append(state);
col.append("</span>");
row.add(new JsonPrimitive(col.toString()));
// Last Use
col = new StringBuffer();
long lastUse = service.getLastUse();
if(lastUse > 0) {
col.append(getTimeStamp(request, jobid, ""+lastUse));
}
row.add(new JsonPrimitive(col.toString()));
// Instances
col = new StringBuffer();
col.append(""+instances);
row.add(new JsonPrimitive(col.toString()));
// Deployments
col = new StringBuffer();
col.append(""+deployments);
row.add(new JsonPrimitive(col.toString()));
// Start-Mode
col = new StringBuffer();
StartState startState = service.getStartState();
col.append("<span>");
col.append(startState.name());
if(service.isDisabled()) {
col.append("<br>");
String health = "class=\"health_red\"";
String reason = "title=\""+service.getDisableReason()+"\"";
col.append("<span "+health+" "+reason+">");
col.append("Disabled");
col.append("</span>");
}
col.append("</span>");
row.add(new JsonPrimitive(col.toString()));
// User
col = new StringBuffer();
col.append(""+user);
row.add(new JsonPrimitive(col.toString()));
// Class
col = new StringBuffer();
if(service.isPingOnly()) {
String schedulingClass = ""+service.getSchedulingClass();
col.append("<span title=\""+schedulingClass+"\">");
String serviceType = "ping-only";
col.append("<span>");
col.append(serviceType);
}
else {
String schedulingClass = service.getSchedulingClass();
col.append(""+schedulingClass);
}
row.add(new JsonPrimitive(col.toString()));
// Pgin
col = new StringBuffer();
col.append("<span>");
//
long faults = 0;
try {
faults = service.getPgIn();
}
catch(Exception e) {
}
int ifaults = (int)faults;
switch(ifaults) {
case -3: // (some do and some don't have cgroups) but retVal would have been > 0
col.append("<span title=\"incomplete\" class=\"health_red\""+">");
col.append(inc);
break;
case -2: // (some do and some don't have cgroups) but retVal would have been == 0
col.append("<span title=\"incomplete\" class=\"health_black\""+">");
col.append(inc);
break;
case -1: // (none have cgroups)
col.append("<span title=\"not available\" class=\"health_black\""+">");
col.append(notAvailable);
break;
default: // (all have cgroups)
double swapping = service.getSwap();
if((swapping * faults) > 0) {
col.append("<span class=\"health_red\""+">");
}
else {
col.append("<span class=\"health_black\""+">");
}
col.append(faults);
break;
}
col.append("</span>");
//
col.append("</span>");
row.add(new JsonPrimitive(col.toString()));
// Swap
col = new StringBuffer();
col.append("<span>");
//
String swapSizeDisplay = "";
String swapSizeHover = "";
String title = "";
double swap = service.getSwap();
int iswap = (int)swap;
switch(iswap) {
case -3: // (some do and some don't have cgroups) but retVal would have been > 0
col.append("<span title=\"incomplete\" class=\"health_red\""+">");
col.append(inc);
break;
case -2: // (some do and some don't have cgroups) but retVal would have been == 0
col.append("<span title=\"incomplete\" class=\"health_black\""+">");
col.append(inc);
break;
case -1: // (none have cgroups)
col.append("<span title=\"not available\" class=\"health_black\""+">");
col.append(notAvailable);
break;
default: // (all have cgroups)
double swapBytes = swap;
swapSizeDisplay = DuccHandlerUtils.getSwapSizeDisplay(swapBytes);
swapSizeHover = DuccHandlerUtils.getSwapSizeHover(swapBytes);
title = "title="+"\""+swapSizeHover+"\"";
if(swapBytes > 0) {
col.append("<span "+title+" "+"class=\"health_red\""+">");
}
else {
col.append("<span "+title+" "+"class=\"health_black\""+">");
}
col.append(swapSizeDisplay);
break;
}
col.append("</span>");
//
col.append("</span>");
row.add(new JsonPrimitive(col.toString()));
// Size
col = new StringBuffer();
long size = service.getSize();
if(size < 0) {
size = 0;
}
col.append(size);
row.add(new JsonPrimitive(col.toString()));
// Jobs
col = new StringBuffer();
ArrayList<String> dependentJobs = service.getDependentJobs();
int countDependentJobs = dependentJobs.size();
String titleJobs = "";
if(countDependentJobs > 0) {
StringBuffer idList = new StringBuffer();
for(String duccId : dependentJobs) {
if(idList.length() > 0) {
idList.append(",");
}
idList.append(duccId);
}
titleJobs = "dependent Job Id list: "+idList;
}
String jobs = "<span title=\""+titleJobs+"\">"+countDependentJobs+"</span>";
col.append(jobs);
row.add(new JsonPrimitive(col.toString()));
// Services
col = new StringBuffer();
ArrayList<String> dependentServices = service.getDependentServices();
int countDependentServices = dependentServices.size();
String titleServices = "";
if(countDependentServices > 0) {
StringBuffer idList = new StringBuffer();
for(String duccId : dependentServices) {
if(idList.length() > 0) {
idList.append(",");
}
idList.append(duccId);
}
titleServices = "dependent Service Name list: "+idList;
}
String services = "<span title=\""+titleServices+"\">"+countDependentServices+"</span>";
col.append(services);
row.add(new JsonPrimitive(col.toString()));
// Reservations
col = new StringBuffer();
ArrayList<String> dependentReservations = service.getDependentReservations();
int countDependentReservations = dependentReservations.size();
String titleReservations = "";
if(countDependentReservations > 0) {
StringBuffer idList = new StringBuffer();
for(String duccId : dependentReservations) {
if(idList.length() > 0) {
idList.append(",");
}
idList.append(duccId);
}
titleReservations = "dependent Reservation Id list: "+idList;
}
String reservations = "<span title=\""+titleReservations+"\">"+countDependentReservations+"</span>";
col.append(reservations);
row.add(new JsonPrimitive(col.toString()));
// Description
col = new StringBuffer();
String description = service.getDescription();
col.append(description);
row.add(new JsonPrimitive(col.toString()));
// Row
data.add(row);
}
}
else {
JsonArray row = new JsonArray();
if(DuccData.getInstance().isPublished()) {
noServices(row,"no services");
}
else {
noServices(row,"no data");
}
data.add(row);
}
}
jsonResponse.add("aaData", data);
String json = jsonResponse.toString();
duccLogger.debug(methodName, jobid, json);
response.getWriter().println(json);
response.setContentType("application/json");
duccLogger.trace(methodName, jobid, messages.fetch("exit"));
}