Index: lams_central/src/java/org/lamsfoundation/lams/web/RuntimeStatsServlet.java =================================================================== diff -u -r33829c670fd8c90447d62ea3300498a103905e7a -r027491111fd57ce314b950c467ff86b31d5d505e --- lams_central/src/java/org/lamsfoundation/lams/web/RuntimeStatsServlet.java (.../RuntimeStatsServlet.java) (revision 33829c670fd8c90447d62ea3300498a103905e7a) +++ lams_central/src/java/org/lamsfoundation/lams/web/RuntimeStatsServlet.java (.../RuntimeStatsServlet.java) (revision 027491111fd57ce314b950c467ff86b31d5d505e) @@ -53,12 +53,12 @@ if (log.isDebugEnabled()) { log.debug("Getting long runtime stats"); } - stats = getLongStats(); + stats = RuntimeStatsServlet.getLongStats(); } else { if (log.isDebugEnabled()) { log.debug("Getting short runtime stats"); } - stats = getShortStats(); + stats = RuntimeStatsServlet.getShortStats(); } if (stats != null) { @@ -78,36 +78,18 @@ Date date = new Date(); MBeanServer server = ManagementFactory.getPlatformMBeanServer(); try { - /* - * ObjectName serviceRef = new ObjectName("*.*:*"); - * Set mbeans = server.queryNames(serviceRef, null); - * for (ObjectName on : mbeans) { - * System.out.println("\nObjectName : " + on); - * MBeanInfo info = server.getMBeanInfo(on); - * MBeanAttributeInfo[] attrInfo = info.getAttributes(); - * MBeanOperationInfo[] operInfo = info.getOperations(); - * System.out.println(">Attributes:"); - * for (MBeanAttributeInfo attr : attrInfo) { - * System.out.println(" " + attr.getName() + "\n"); - * } - * System.out.println(">Operations:"); - * for (MBeanOperationInfo attr : operInfo) { - * System.out.println(" " + attr.getName() + "\n"); - * } - * } - */ - ObjectName dataSourceName = new ObjectName( "jboss.as.expr:subsystem=datasources,data-source=lams-ds,statistics=pool"); Integer activeCount = Integer.valueOf((String) server.getAttribute(dataSourceName, "ActiveCount")); - resp.append("Overall Status : ok"); + resp.append("Overall Status : OK"); if (activeCount > 0) { resp.append(" - DB connection established"); } - resp.append("\nServer : ").append(SessionManager.getJvmRoute()).append("\n"); - resp.append("Current Sessions : ").append(SessionManager.getSessionCount()).append("\n"); - resp.append("Time of Request : ").append(date); + resp.append("\njvmRoute: ").append(SessionManager.getJvmRoute()).append("\n"); + resp.append("Active sessions [user/total]: ").append(SessionManager.getSessionUserCount()).append("/") + .append(SessionManager.getSessionTotalCount()).append("\n"); + resp.append("Time of request: ").append(date); } catch (Exception e) { log.error("Error while getting short runtime stats", e); } @@ -142,25 +124,24 @@ .append(threadBean.getThreadCount()).append("/").append(threadBean.getPeakThreadCount()) .append("\n"); - /* - * Connector statistics do not seem to be present for WF 8. - * They should be available in WF 9+ (WFLY-4420). - * ObjectName connectorName = new ObjectName("jboss.as.expr:subsystem=io,worker=default"); - * Integer busyThreads = (Integer) server.getAttribute(connectorName, "ioThreads"); - * Integer maxThreads = (Integer) server.getAttribute(connectorName, "taskMaxThreads"); - * resp.append("IO threads [io/task max]: " - * ).append(busyThreads).append("/").append(maxThreads).append("\n"); - */ + ObjectName connectorName = new ObjectName("jboss.as.expr:subsystem=io,worker=default"); + String busyThreads = (String) server.getAttribute(connectorName, "ioThreads"); + String maxThreads = (String) server.getAttribute(connectorName, "taskMaxThreads"); + resp.append("IO threads [io/task max]: ").append(busyThreads).append("/").append(maxThreads).append("\n"); - resp.append("Active sessions : ").append(SessionManager.getSessionCount()).append("\n"); + resp.append("Active sessions [user/total]: ").append(SessionManager.getSessionUserCount()).append("/") + .append(SessionManager.getSessionTotalCount()).append("\n"); ObjectName dataSourceName = new ObjectName( "jboss.as.expr:subsystem=datasources,data-source=lams-ds,statistics=pool"); - String inUseConnections = (String) server.getAttribute(dataSourceName, "InUseCount"); - String activeConnections = (String) server.getAttribute(dataSourceName, "ActiveCount"); - String availConnections = (String) server.getAttribute(dataSourceName, "AvailableCount"); - resp.append("Connections [in use/active/total]: ").append(inUseConnections).append("/") - .append(activeConnections).append("/").append(availConnections).append("\n"); + Integer inUseConnections = Integer.parseInt((String) server.getAttribute(dataSourceName, "InUseCount")); + Integer activeConnections = Integer.parseInt((String) server.getAttribute(dataSourceName, "ActiveCount")); + Integer availConnections = Integer.parseInt((String) server.getAttribute(dataSourceName, "AvailableCount")); + String maxUsageTime = (String) server.getAttribute(dataSourceName, "MaxUsageTime"); + resp.append("Connection count [in use/idle/left]: ").append(inUseConnections).append("/") + .append(activeConnections - inUseConnections).append("/") + .append(availConnections - activeConnections).append("\n"); + resp.append("Connection max usage time ms: ").append(maxUsageTime); } catch (Exception e) { log.error("Error while getting long runtime stats", e); } Index: lams_common/src/java/org/lamsfoundation/lams/web/session/SessionManager.java =================================================================== diff -u -rfd2cfad55c7c517931f69334ce644d509ec28140 -r027491111fd57ce314b950c467ff86b31d5d505e --- lams_common/src/java/org/lamsfoundation/lams/web/session/SessionManager.java (.../SessionManager.java) (revision fd2cfad55c7c517931f69334ce644d509ec28140) +++ lams_common/src/java/org/lamsfoundation/lams/web/session/SessionManager.java (.../SessionManager.java) (revision 027491111fd57ce314b950c467ff86b31d5d505e) @@ -44,9 +44,9 @@ // singleton private static SessionManager sessionManager; - private static final Map sessionIdMapping = new ConcurrentHashMap(); - private static final Map loginMapping = new ConcurrentHashMap(); - private ThreadLocal currentSessionIdContainer = new ThreadLocal(); + private static final Map sessionIdMapping = new ConcurrentHashMap<>(); + private static final Map loginMapping = new ConcurrentHashMap<>(); + private ThreadLocal currentSessionIdContainer = new ThreadLocal<>(); // various classes need to have to access these private static ServletContext servletContext; @@ -200,21 +200,28 @@ } /** - * Returns number of sessions stored in the container. + * Returns number of all sessions stored in the container. */ - public static int getSessionCount() { + public static int getSessionTotalCount() { return SessionManager.sessionIdMapping.size(); } /** + * Returns number of authenticated sessions stored in the container. + */ + public static int getSessionUserCount() { + return SessionManager.loginMapping.size(); + } + + /** * Lists all logins with their assigned sessions */ public static Map> getLoginToSessionIDMappings() { - Map> result = new TreeMap>(); + Map> result = new TreeMap<>(); for (Entry entry : loginMapping.entrySet()) { HttpSession session = entry.getValue(); UserDTO user = (UserDTO) session.getAttribute(AttributeNames.USER); - List sessionInfo = new LinkedList(); + List sessionInfo = new LinkedList<>(); sessionInfo.add(user.getFirstName()); sessionInfo.add(user.getLastName()); sessionInfo.add(session.getId());