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