private void handleServletClassicServices()

in uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerClassic.java [1056:1356]


	private void handleServletClassicServices(String target,Request baseRequest,HttpServletRequest request,HttpServletResponse response) 
	throws IOException, ServletException
	{
		String methodName = "handleServletClassicServices";
		duccLogger.trace(methodName, jobid, messages.fetch("enter"));
		StringBuffer sb = new StringBuffer();
		
		if(dh.is_ducc_head_backup()) {
			sb.append("<tr>");
			sb.append("<td>");
			sb.append(messages.fetch("no data - not master"));
			sb.append("</td>");
			sb.append("</tr>");
		}
		else {
			ServicesSortCache servicesSortCache = ServicesSortCache.getInstance();
			Collection<IServiceAdapter> servicesSortedCollection = servicesSortCache.getSortedCollection();
			if(!servicesSortedCollection.isEmpty()) {
				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++;
					// Row Begin
					sb.append("<tr>");
					int sid = service.getId();
					String user = service.getUser();
					long deployments = service.getDeployments();
					long instances = service.getInstances();
					// Enable
					sb.append("<td valign=\"bottom\" class=\"ducc-col-start\">");
					if(service.isRegistered()) {
						if(buttonsEnabled) {
							if(service.isDisabled()) {
								sb.append("<input type=\"button\" onclick=\"ducc_confirm_service_enable("+sid+")\" value=\"Enable\" "+getDisabledWithHover(request,user,service)+"/>");
							}
						}
					}
					sb.append("</td>");
					// Stop
					sb.append("<td valign=\"bottom\" class=\"ducc-col-stop\">");
					if(service.isRegistered()) {
						if(buttonsEnabled) {
							if(service.isPingOnly()) {
								if(service.isPingActive()) {
									sb.append("<input type=\"button\" onclick=\"ducc_confirm_service_stop("+sid+")\" value=\"Stop\" "+getDisabledWithHover(request,user,service)+"/>");
								}
							}
							else {
								if(deployments != 0) {
									sb.append("<input type=\"button\" onclick=\"ducc_confirm_service_stop("+sid+")\" value=\"Stop\" "+getDisabledWithHover(request,user,service)+"/>");
								}
							}
						}
					}
					sb.append("</td>");
					// Id
					String name = service.getName();
					sb.append("<td align=\"right\">");
					String id = "<a href=\"service.details.html?name="+name+"\">"+sid+"</a>";
					sb.append(""+id);
					sb.append("</td>");
					// Name
					sb.append("<td>");
					sb.append(name);
					sb.append("</td>");
					// State
					sb.append("<td>");
					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+"\"";
					}
					sb.append("<span "+style+" "+stateHover+">");
					sb.append(state);
					sb.append("</span>");
					sb.append("</td>");
					// Last Use
					sb.append("<td>");
					long lastUse = service.getLastUse();
					if(lastUse > 0) {
						sb.append(getTimeStamp(request, jobid, ""+lastUse));
					}
					sb.append("</td>");
					// Instances
					sb.append("<td align=\"right\">");
					sb.append(instances);
					sb.append("</td>");
					// Deployments
					sb.append("<td align=\"right\">");
					sb.append(deployments);
					sb.append("</td>");
					// Start-State
					StartState startState = service.getStartState();
					sb.append("<td align=\"right\">");
					sb.append("<span>");
					sb.append(startState.name());
					if(service.isDisabled()) {
						sb.append("<br>");
						String health = "class=\"health_red\"";
						String reason = "title=\""+service.getDisableReason()+"\"";
						sb.append("<span "+health+" "+reason+">");
						sb.append("Disabled");
						sb.append("</span>");
					}
					sb.append("</span>");
					sb.append("</td>");
					// User
					sb.append("<td>");
					sb.append(user);
					sb.append("</td>");
					// Share Class (or Type)
					sb.append("<td>");
					if(service.isPingOnly()) {
						String schedulingClass = service.getSchedulingClass();
						sb.append("<span title=\""+schedulingClass+"\">");
						String serviceType = "ping-only";
						sb.append("<span>");
						sb.append(serviceType);
					}
					else {
						String schedulingClass = service.getSchedulingClass();
						sb.append(schedulingClass);
					}
					sb.append("</td>");
					// PgIn
					sb.append("<td align=\"right\">");
					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
						sb.append("<span title=\"incomplete\" class=\"health_red\""+">");
						sb.append(inc);
						break;
					case -2: // (some do and some don't have cgroups) but retVal would have been == 0
						sb.append("<span title=\"incomplete\" class=\"health_black\""+">");
						sb.append(inc);
						break;
					case -1: // (none have cgroups)
						sb.append("<span title=\"not available\" class=\"health_black\""+">");
						sb.append(notAvailable);
						break;
					default: // (all have cgroups)
						double swapping = service.getSwap();
						if((swapping * faults) > 0) {
							sb.append("<span class=\"health_red\""+">");
						}
						else {
							sb.append("<span class=\"health_black\""+">");
						}
						sb.append(faults);
						break;
					}
					sb.append("</span>");
					sb.append("</td>");
					// Swap
					sb.append("<td align=\"right\">");
					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
						sb.append("<span title=\"incomplete\" class=\"health_red\""+">");
						sb.append(inc);
						break;
					case -2: // (some do and some don't have cgroups) but retVal would have been == 0
						sb.append("<span title=\"incomplete\" class=\"health_black\""+">");
						sb.append(inc);
						break;
					case -1: // (none have cgroups)
						sb.append("<span title=\"not available\" class=\"health_black\""+">");
						sb.append(notAvailable);
						break;
					default: // (all have cgroups)
						double swapBytes = swap;
						swapSizeDisplay = DuccHandlerUtils.getSwapSizeDisplay(swapBytes);
						swapSizeHover = DuccHandlerUtils.getSwapSizeHover(swapBytes);
						title = "title="+"\""+swapSizeHover+"\"";
						if(swapBytes > 0) {
							sb.append("<span "+title+" "+"class=\"health_red\""+">");
						}
						else {
							sb.append("<span "+title+" "+"class=\"health_black\""+">");
						}
						sb.append(swapSizeDisplay);
						break;
					}
					sb.append("</span>");
					sb.append("</td>");
					// Size
					sb.append("<td align=\"right\">");
					long size = service.getSize();
					if(size < 0) {
						size = 0;
					}
					sb.append(size);
					sb.append("</td>");
					// Jobs
					sb.append("<td align=\"right\">");
					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>";
					sb.append(jobs);
					sb.append("</td>");
					// Services
					sb.append("<td align=\"right\">");
					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>";
					sb.append(services);
					sb.append("</td>");
					// Reservations
					sb.append("<td align=\"right\">");
					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>";
					sb.append(reservations);
					sb.append("</td>");
					// Description
					sb.append("<td>");
					String description = service.getDescription();
					sb.append(description);
					sb.append("</td>");
					// Row End
					sb.append("</tr>");
				}
			}
			else {
				sb.append("<tr>");
				sb.append("<td>");
				if(DuccData.getInstance().isPublished()) {
					sb.append(messages.fetch("no services"));
				}
				else {
					sb.append(messages.fetch("no data"));
				}
				sb.append("</td>");
				sb.append("</tr>");
			}
		}
		
		duccLogger.debug(methodName, jobid, sb);
		response.getWriter().println(sb);
		duccLogger.trace(methodName, jobid, messages.fetch("exit"));
	}