private void handleServletClassicSystemDaemons()

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


	private void handleServletClassicSystemDaemons(String target,Request baseRequest,HttpServletRequest request,HttpServletResponse response) 
	throws IOException, ServletException
	{
		String methodName = "handleServletClassicSystemDaemons";
		duccLogger.trace(methodName, jobid, messages.fetch("enter"));
		StringBuffer sb = new StringBuffer();
		
		String wsHostIP = getWebServerHostIP();
		String wsHostName = getWebServerHostName();
		
		DuccDaemonsData duccDaemonsData = DuccDaemonsData.getInstance();
		DuccMachinesData duccMachinesData = DuccMachinesData.getInstance();
		
		BrokerHelper brokerHelper = BrokerHelper.getInstance();
		
		int counter = 0;
		boolean brokerAlive = brokerHelper.isAlive();
		daemons:
		for(DaemonName daemonName : DuccDaemonRuntimeProperties.daemonNames) {
			switch(daemonName) {
			case Database:
				if(databaseHelper.isDisabled()) {
					continue daemons;
				}
			default:
				break;
			}
			String status = "";
			String bootTime = "";
			String hostIP = "";
			String hostName = "";
			String pid = "";
			String pubSizeLast = "";
			String pubSizeMax = "";
			String heartbeatLast = "";
			String heartbeatMax = "";
			String heartbeatMaxTOD = "";
			String jmxUrl = null;
			Properties properties = DuccDaemonRuntimeProperties.getInstance().get(daemonName);
			switch(daemonName) {
			case Broker:
				if(brokerAlive) {
					status = DuccHandlerUtils.up();
				}
				else {
					status = DuccHandlerUtils.down();
				}
				bootTime = getTimeStamp(DuccCookies.getDateStyle(request),brokerHelper.getStartTime());
				hostName = useWS(wsHostName, brokerHelper.getHost());
				hostIP = useWS(wsHostName, hostName, wsHostIP);
				pid = ""+brokerHelper.getPID();
				pubSizeLast = "-";
				pubSizeMax = "-";
				heartbeatLast = "";
				heartbeatMax = "";
				heartbeatMaxTOD = "";
				jmxUrl = brokerHelper.getJmxUrl();
				break;
			case Database:
				if(databaseHelper.isAlive()) {
					status = DuccHandlerUtils.up();
				}
				else {
					status = DuccHandlerUtils.down();
				}
				// Get DB host list or wsName if the DB host is the same 
				hostName = useWS(wsHostName, databaseHelper.getHostListString());
				if(DuccPropertiesHelper.isDatabaseAutomanaged() && hostName.equals(wsHostName)) {
					bootTime = getTimeStamp(DuccCookies.getDateStyle(request),databaseHelper.getStartTime());
					hostIP = useWS(wsHostName, hostName, wsHostIP);
					pid = ""+databaseHelper.getPID();
				}
				else {
				  // Not automanaged or not on the same node as the WS
					bootTime = "-";
					String[] hostList = hostName.split("\\s+");
					String[] ipList = InetHelper.getIP(hostList);
					StringBuffer sbuf = new StringBuffer();
					if(ipList != null) {
						for(String ip : ipList) {
							sbuf.append(ip);
							sbuf.append(" ");
						}
					}
					hostIP = sbuf.toString();
					pid = "-";
				}
				//
				hostName = tableize(hostName);
				hostIP = tableize(hostIP);
				//
				pubSizeLast = "-";
				pubSizeMax = "-";
				heartbeatLast = "";
				heartbeatMax = "";
				heartbeatMaxTOD = "";
				jmxUrl = databaseHelper.getJmxUrl();
				break;
			case Webserver:
				status = DuccHandlerUtils.up();
				bootTime = getTimeStamp(DuccCookies.getDateStyle(request),getPropertiesValue(properties,DuccDaemonRuntimeProperties.keyBootTime,""));
				hostIP = getPropertiesValue(properties,DuccDaemonRuntimeProperties.keyNodeIpAddress,"");
				hostName = getPropertiesValue(properties,DuccDaemonRuntimeProperties.keyNodeName,"");
				pid = getPropertiesValue(properties,DuccDaemonRuntimeProperties.keyPid,"");
				pubSizeLast = "*";
				pubSizeMax = "*";
				heartbeatLast = "";
				heartbeatMax = "";
				heartbeatMaxTOD = "";
				jmxUrl = getPropertiesValue(properties,DuccDaemonRuntimeProperties.keyJmxUrl,"");
				break;	
			default:
				status = DuccHandlerUtils.unknown();
				if(daemonName.equals(DaemonName.Orchestrator)) {
					if(ComponentHelper.isLocked(IDuccEnv.DUCC_STATE_DIR,"orchestrator")) {
						String filename = ComponentHelper.getLockFileName(IDuccEnv.DUCC_STATE_DIR,"orchestrator");
						String hover = "title=\""+ComponentHelper.getLockFileNameWithPath(IDuccEnv.DUCC_STATE_DIR,"orchestrator")+"\"";
						String fileNameWithHover = "<span "+hover+" >"+filename+"</span>";
						status += ", "+DuccHandlerUtils.warn("warning: ")+fileNameWithHover+" found.";
					}
				}
				bootTime = getTimeStamp(DuccCookies.getDateStyle(request),getPropertiesValue(properties,DuccDaemonRuntimeProperties.keyBootTime,""));
				hostIP = getPropertiesValue(properties,DuccDaemonRuntimeProperties.keyNodeIpAddress,"");
				hostName = getPropertiesValue(properties,DuccDaemonRuntimeProperties.keyNodeName,"");
				pid = getPropertiesValue(properties,DuccDaemonRuntimeProperties.keyPid,"");
				pubSizeLast = ""+duccDaemonsData.getEventSize(daemonName);
				pubSizeMax = ""+duccDaemonsData.getEventSizeMax(daemonName);
				heartbeatLast = DuccDaemonsData.getInstance().getHeartbeat(daemonName);
				long timeout = DuccWebProperties.get_ducc_ws_monitored_daemon_down_millis_expiry()/1000;
				if(timeout > 0) {
					try {
						long overtime = timeout - Long.parseLong(heartbeatLast);
						if(overtime < 0) {
							if(brokerAlive) {
								status = DuccHandlerUtils.down();
							}
							if(daemonName.equals(DaemonName.Orchestrator)) {
								if(ComponentHelper.isLocked(IDuccEnv.DUCC_STATE_DIR,"orchestrator")) {
									String filename = ComponentHelper.getLockFileName(IDuccEnv.DUCC_STATE_DIR,"orchestrator");
									String hover = "title=\""+ComponentHelper.getLockFileNameWithPath(IDuccEnv.DUCC_STATE_DIR,"orchestrator")+"\"";
									String fileNameWithHover = "<span "+hover+" >"+filename+"</span>";
									status += ", "+DuccHandlerUtils.warn("warning: ")+fileNameWithHover+" found.";
								}
							}
						}
						else {
							if(brokerAlive) {
								status = DuccHandlerUtils.up();
							}
							if(daemonName.equals(DaemonName.Orchestrator)) {
								if(dh.is_ducc_head_virtual_master()) {
									boolean reqMet = DuccData.getInstance().getLive().isJobDriverMinimalAllocateRequirementMet();
									if(!reqMet) {
										status = DuccHandlerUtils.up_provisional(", pending JD allocation");
									}
								}
							}
						}
					}
					catch(Throwable t) {
					}
				}
				heartbeatMax = DuccDaemonsData.getInstance().getMaxHeartbeat(daemonName);
				heartbeatMaxTOD = TimeStamp.simpleFormat(DuccDaemonsData.getInstance().getMaxHeartbeatTOD(daemonName));
				try {
					heartbeatMaxTOD = getTimeStamp(DuccCookies.getDateStyle(request),heartbeatMaxTOD);
				}
				catch(Exception e) {
				}
				jmxUrl = getPropertiesValue(properties,DuccDaemonRuntimeProperties.keyJmxUrl,"");
				break;
			}
			// Status
			sb.append(trGet(counter));
			sb.append("<td>");
			sb.append(status);
			sb.append("</td>");	
			// Daemon Name
			sb.append("<td>");
			sb.append(daemonName);
			sb.append("</td>");
			// Boot Time
			sb.append("<td>");
			sb.append(toDash(bootTime));
			sb.append("</td>");
			// Host IP
			sb.append("<td>");
			sb.append(toDash(hostIP));
			sb.append("</td>");	
			// Host Name
			sb.append("<td>");
			sb.append(hostName);
			sb.append("</td>");
			// PID
			sb.append("<td>");
			sb.append(toDash(pid));
			sb.append("</td>");
			// Publication Size (last)
			sb.append("<td align=\"right\">");
			sb.append(""+pubSizeLast);
			sb.append("</td>");	
			// Publication Size (max)
			sb.append("<td align=\"right\">");
			sb.append(pubSizeMax);
			sb.append("</td>");	
			// Heartbeat (last)
			sb.append("<td align=\"right\">");
			sb.append(heartbeatLast);
			sb.append("</td>");	
			// Heartbeat (max)
			sb.append("<td align=\"right\">");
			sb.append(heartbeatMax);
			sb.append("</td>");
			// Heartbeat (max) TOD
			sb.append("<td>");
			sb.append(heartbeatMaxTOD);
			sb.append("</td>");
			// JConsole URL
			sb.append("<td>");
			if(jmxUrl != null) {
				sb.append(buildjConsoleLink(jmxUrl));
			}
			sb.append("</td>");	
			//
			sb.append("</tr>");
			counter++;
		}
		// <Agents>
		String cookie = DuccCookies.getCookie(request,DuccCookies.cookieAgents);
		if(cookie.equals(DuccCookies.valueAgentsShow)) {
			duccLogger.trace(methodName, jobid, "== show: "+cookie);
			
			if(dh.is_ducc_head_backup()) {
				sb.append("<tr>");
				sb.append("<td>");
				sb.append(messages.fetch("no agents - not master"));
				sb.append("</td>");
				sb.append("</tr>");
			}
			else {
				Map<MachineInfo,NodeId> machines = duccMachinesData.getMachines();
				Iterator<MachineInfo> iterator = machines.keySet().iterator();
				while(iterator.hasNext()) {
					MachineInfo machineInfo = iterator.next();
					String machineName = machineInfo.getShortName();
					if(machineName.startsWith("=")) {
						continue;
					}
					sb.append(trGet(counter));
					// Status
					StringBuffer status = new StringBuffer();
					if(brokerAlive) {
						String machineStatus = machineInfo.getStatus();
						if(machineStatus.equals("down")) {
							//status.append("<span class=\"health_red\""+">");
							status.append(DuccHandlerUtils.down());
							//status.append("</span>");
						}
						else if(machineStatus.equals("up")) {
							//status.append("<span class=\"health_green\""+">");
							status.append(DuccHandlerUtils.up());
							//status.append("</span>");
						}
						else {
							status.append(DuccHandlerUtils.unknown());
						}
					}
					else {
						status.append(DuccHandlerUtils.unknown());
					}
					sb.append("<td>");
					sb.append(status);
					sb.append("</td>");	
					sb.append("</td>");	
					// Daemon Name
					String daemonName = "Agent";
					sb.append("<td>");
					sb.append(daemonName);
					sb.append("</td>");	
					// Boot Time
					String bootTime = null;
					long bootTimeLong = machineInfo.getBootTime();
					if(bootTimeLong > 0) {
						bootTime = getTimeStamp(DuccCookies.getDateStyle(request),bootTimeLong);
					}
					sb.append("<td>");
					sb.append(toDash(bootTime));
					sb.append("</td>");
					// Host IP
					String hostIP = machineInfo.getIp();
					sb.append("<td>");
					sb.append(toDash(hostIP));
					sb.append("</td>");	
					// Host Name
					String hostName = machineInfo.getName();
					sb.append("<td>");
					sb.append(hostName);
					sb.append("</td>");
					// PID
					String pid = null;
					long pidLong = machineInfo.getPid();
					if(pidLong > 0) {
						pid = ""+pidLong;
					}
					sb.append("<td>");
					sb.append(toDash(pid));
					sb.append("</td>");
					// Publication Size (last)
					String publicationSizeLast = machineInfo.getPublicationSizeLast();
					sb.append("<td align=\"right\">");
					sb.append(publicationSizeLast);
					sb.append("</td>");	
					// Publication Size (max)
					String publicationSizeMax = machineInfo.getPublicationSizeMax();
					sb.append("<td align=\"right\">");
					sb.append(publicationSizeMax);
					sb.append("</td>");	
					// Heartbeat (last)
					String heartbeatLast = machineInfo.getHeartbeatLast();
					sb.append("<td align=\"right\">");
					sb.append(heartbeatLast);
					sb.append("</td>");	
					// Heartbeat (max)
					long heartbeatMax = machineInfo.getHeartbeatMax();
					sb.append("<td align=\"right\">");
					if(heartbeatMax > 0) {
						sb.append(heartbeatMax);
					}
					sb.append("</td>");
					// Heartbeat (max) TOD
					String fmtHeartbeatMaxTOD = "";
					long heartbeatMaxTOD = machineInfo.getHeartbeatMaxTOD();
					if(heartbeatMaxTOD > 0) {
						fmtHeartbeatMaxTOD = TimeStamp.simpleFormat(""+heartbeatMaxTOD);
						try {
							fmtHeartbeatMaxTOD = getTimeStamp(DuccCookies.getDateStyle(request),fmtHeartbeatMaxTOD);
						}
						catch(Exception e) {
						}
					}
					sb.append("<td>");
					sb.append(fmtHeartbeatMaxTOD);
					sb.append("</td>");
					// JConsole URL
					sb.append("<td>");
					String jmxUrl = machineInfo.getJconsole();
					if(jmxUrl != null) {
						sb.append(buildjConsoleLink(jmxUrl));
					}
					sb.append("</td>");
					//
					sb.append("</tr>");
					counter++;
				}
			}
		}
		else {
			duccLogger.trace(methodName, jobid, "!= show: "+cookie);
		}
		// </Agents>
		duccLogger.debug(methodName, jobid, sb);
		response.getWriter().println(sb);
		duccLogger.trace(methodName, jobid, messages.fetch("exit"));
	}