private void handleServletJsonFormatServicesAaData()

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"));
	}