From 4c37904fd75d726f09beb409e4e6c6a6da6322ee Mon Sep 17 00:00:00 2001 From: Muhammad Wajahat Abbasi Date: Tue, 7 Jan 2025 22:51:10 +0500 Subject: [PATCH 01/17] NMS-16986 : Added missing items as required in ticket. --- .../opennms/OpenNMSReportPlugin.java | 33 ++++++++++++++++++- .../systemreport/system/OSReportPlugin.java | 15 ++++++++- 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/features/system-report/src/main/java/org/opennms/systemreport/opennms/OpenNMSReportPlugin.java b/features/system-report/src/main/java/org/opennms/systemreport/opennms/OpenNMSReportPlugin.java index 1659acc34bd6..d7ea249b4ece 100644 --- a/features/system-report/src/main/java/org/opennms/systemreport/opennms/OpenNMSReportPlugin.java +++ b/features/system-report/src/main/java/org/opennms/systemreport/opennms/OpenNMSReportPlugin.java @@ -23,10 +23,11 @@ import java.io.IOException; import java.io.InputStream; +import java.lang.management.ManagementFactory; +import java.lang.management.RuntimeMXBean; import java.util.Map; import java.util.Properties; import java.util.TreeMap; - import org.opennms.core.spring.BeanUtils; import org.opennms.netmgt.dao.api.AlarmDao; import org.opennms.netmgt.dao.api.EventDao; @@ -79,7 +80,9 @@ public int getPriority() { @Override public Map getEntries() { + final TreeMap map = new TreeMap(); + map.put("OpenNMS Home",getResourceFromProperty("opennms.home")); final InputStream is = this.getClass().getResourceAsStream("/version.properties"); if (is != null) { Properties p = new Properties(); @@ -106,7 +109,35 @@ public Map getEntries() { if (m_alarmDao != null) { map.put("Number of Alarms", getResource(Integer.toString(m_alarmDao.countAll()))); } + + RuntimeMXBean runtimeBean = getBean(ManagementFactory.RUNTIME_MXBEAN_NAME, RuntimeMXBean.class); + if (runtimeBean == null) { + LOG.info("falling back to local VM RuntimeMXBean"); + runtimeBean = ManagementFactory.getRuntimeMXBean(); + } + addGetters(runtimeBean, map); + + map.put("OpenNMS Up Time",getResource( getOnmsUptimeAsString(runtimeBean) )); + + return map; } + private String getOnmsUptimeAsString(RuntimeMXBean runtimeBean){ + + long startTimeMillis = runtimeBean.getStartTime(); + + // Get the current time (in milliseconds since epoch) + long currentTimeMillis = System.currentTimeMillis(); + + // Calculate uptime + long uptimeMillis = currentTimeMillis - startTimeMillis; + + long hours = uptimeMillis / (1000 * 60 * 60); + long minutes = (uptimeMillis % (1000 * 60 * 60)) / (1000 * 60); + long seconds = (uptimeMillis % (1000 * 60)) / 1000; + + return String.format("%d hours, %d minutes, %d seconds", hours, minutes, seconds); + } + } diff --git a/features/system-report/src/main/java/org/opennms/systemreport/system/OSReportPlugin.java b/features/system-report/src/main/java/org/opennms/systemreport/system/OSReportPlugin.java index 8a98df27e471..9fc01e46a767 100644 --- a/features/system-report/src/main/java/org/opennms/systemreport/system/OSReportPlugin.java +++ b/features/system-report/src/main/java/org/opennms/systemreport/system/OSReportPlugin.java @@ -27,16 +27,22 @@ import java.util.LinkedHashMap; import java.util.Map; import java.util.TreeMap; - +import java.util.stream.Collectors; +import org.opennms.core.resource.Vault; +import org.opennms.netmgt.dao.api.IpInterfaceDao; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.opennms.systemreport.AbstractSystemReportPlugin; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.Resource; public class OSReportPlugin extends AbstractSystemReportPlugin { private static final Logger LOG = LoggerFactory.getLogger(OSReportPlugin.class); private static final Map m_oses = new LinkedHashMap(); + @Autowired + public IpInterfaceDao m_ipInterfaceDao; + public OSReportPlugin() { if (m_oses.size() == 0) { m_oses.put("/etc/SUSE-release", "SuSE"); @@ -129,6 +135,13 @@ public Map getEntries() { map.put("Description", map.remove("Distribution Description")); } + String hostName=m_ipInterfaceDao.findAll().stream().map(s->s.getIpHostName()).distinct().collect(Collectors.joining(",")); + String ipAddress=m_ipInterfaceDao.findAll().stream().map(s->s.getIpAddress().getHostAddress()).distinct().collect(Collectors.joining(",")); + + map.put("Host Name",getResource(hostName)); + map.put("Ip Address",getResource(ipAddress)); + map.put("HTTP(S) ports",getResource(Vault.getProperty("org.opennms.netmgt.jetty.port"))); + return map; } } From eb0ea7585e16ee5634b7f8d1fdf178a3653b3865 Mon Sep 17 00:00:00 2001 From: Muhammad Wajahat Abbasi Date: Thu, 9 Jan 2025 00:20:05 +0500 Subject: [PATCH 02/17] NMS-16986 : Updated related test to fix build issues. --- .../opennms/systemreport/system/SystemReportPluginIT.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/features/system-report/src/test/java/org/opennms/systemreport/system/SystemReportPluginIT.java b/features/system-report/src/test/java/org/opennms/systemreport/system/SystemReportPluginIT.java index 580d74de42d7..8c04194b355b 100644 --- a/features/system-report/src/test/java/org/opennms/systemreport/system/SystemReportPluginIT.java +++ b/features/system-report/src/test/java/org/opennms/systemreport/system/SystemReportPluginIT.java @@ -27,8 +27,10 @@ import org.junit.Test; import org.opennms.core.test.MockLogAppender; +import org.opennms.netmgt.dao.mock.MockIpInterfaceDao; import org.opennms.systemreport.SystemReportPlugin; import org.springframework.core.io.ByteArrayResource; +import org.springframework.test.util.ReflectionTestUtils; public class SystemReportPluginIT { private SystemReportPlugin m_javaReportPlugin = new JavaReportPlugin(); @@ -47,10 +49,14 @@ public void testJavaReportPlugin() { @Test public void testOSPlugin() { + ReflectionTestUtils.setField(m_osReportPlugin,"m_ipInterfaceDao",new MockIpInterfaceDao()); final Map entries = m_osReportPlugin.getEntries(); assertTrue(entries.containsKey("Architecture")); assertTrue(entries.containsKey("Name")); assertTrue(entries.containsKey("Distribution")); + assertTrue(entries.containsKey("Host Name")); + assertTrue(entries.containsKey("Ip Address")); + assertTrue(entries.containsKey("HTTP(S) ports")); } private String getResourceText(final org.springframework.core.io.Resource r) { From 22537a0d488516b4b1e12c50817b58dc6e586a29 Mon Sep 17 00:00:00 2001 From: Muhammad Wajahat Abbasi Date: Fri, 10 Jan 2025 22:47:19 +0500 Subject: [PATCH 03/17] NMS-16986 : Updated related fields and tests. --- .../AbstractSystemReportPlugin.java | 7 +- .../opennms/OpenNMSReportPlugin.java | 19 ++--- .../opennms/TopEventReportPlugin.java | 2 +- .../systemreport/system/JavaReportPlugin.java | 3 +- .../systemreport/system/OSReportPlugin.java | 77 ++++++++++++++++++- .../system/SystemReportPluginIT.java | 44 ++++++++++- 6 files changed, 130 insertions(+), 22 deletions(-) diff --git a/features/system-report/src/main/java/org/opennms/systemreport/AbstractSystemReportPlugin.java b/features/system-report/src/main/java/org/opennms/systemreport/AbstractSystemReportPlugin.java index 8ed1d20be335..4c7f3cc9028d 100644 --- a/features/system-report/src/main/java/org/opennms/systemreport/AbstractSystemReportPlugin.java +++ b/features/system-report/src/main/java/org/opennms/systemreport/AbstractSystemReportPlugin.java @@ -143,9 +143,12 @@ protected String slurpCommand(final String[] command) { is = p.getInputStream(); isr = new InputStreamReader(is); br = new BufferedReader(isr); - while (br.ready()) { + String line=null; + while ((line = br.readLine()) != null) { //br.ready() not working as desired so code modified. + /* + lines commented due to desired results are not shown using this code. final String line = br.readLine(); - if (line == null) break; + if (line == null) break;*/ sb.append(line); if (br.ready()) sb.append("\n"); } diff --git a/features/system-report/src/main/java/org/opennms/systemreport/opennms/OpenNMSReportPlugin.java b/features/system-report/src/main/java/org/opennms/systemreport/opennms/OpenNMSReportPlugin.java index d7ea249b4ece..a5011d481d86 100644 --- a/features/system-report/src/main/java/org/opennms/systemreport/opennms/OpenNMSReportPlugin.java +++ b/features/system-report/src/main/java/org/opennms/systemreport/opennms/OpenNMSReportPlugin.java @@ -28,7 +28,10 @@ import java.util.Map; import java.util.Properties; import java.util.TreeMap; +import org.opennms.core.resource.Vault; import org.opennms.core.spring.BeanUtils; +import org.opennms.core.utils.SystemInfoUtils; +import org.opennms.core.utils.TimeSeries; import org.opennms.netmgt.dao.api.AlarmDao; import org.opennms.netmgt.dao.api.EventDao; import org.opennms.netmgt.dao.api.IpInterfaceDao; @@ -80,20 +83,10 @@ public int getPriority() { @Override public Map getEntries() { - final TreeMap map = new TreeMap(); map.put("OpenNMS Home",getResourceFromProperty("opennms.home")); - final InputStream is = this.getClass().getResourceAsStream("/version.properties"); - if (is != null) { - Properties p = new Properties(); - try { - p.load(is); - map.put("Version", getResource(p.getProperty("version.display"))); - } catch (final IOException e) { - LOG.warn("Unable to load from version.properties", e); - } - } - + map.put("Version", getResource(Vault.getProperty("version.display"))); + if (m_nodeDao != null) { map.put("Number of Nodes", getResource(Integer.toString(m_nodeDao.countAll()))); } @@ -118,7 +111,7 @@ public Map getEntries() { addGetters(runtimeBean, map); map.put("OpenNMS Up Time",getResource( getOnmsUptimeAsString(runtimeBean) )); - + map.put("Time-Series Strategy",getResource(TimeSeries.getTimeseriesStrategy().getName())); return map; } diff --git a/features/system-report/src/main/java/org/opennms/systemreport/opennms/TopEventReportPlugin.java b/features/system-report/src/main/java/org/opennms/systemreport/opennms/TopEventReportPlugin.java index f38e64431126..c06caae07b25 100644 --- a/features/system-report/src/main/java/org/opennms/systemreport/opennms/TopEventReportPlugin.java +++ b/features/system-report/src/main/java/org/opennms/systemreport/opennms/TopEventReportPlugin.java @@ -45,7 +45,7 @@ public void afterPropertiesSet() throws Exception { @Override public String getName() { - return "TopEvent"; + return "TopNEvents"; } @Override diff --git a/features/system-report/src/main/java/org/opennms/systemreport/system/JavaReportPlugin.java b/features/system-report/src/main/java/org/opennms/systemreport/system/JavaReportPlugin.java index 5e8fe1587cb9..f7332da2b2e2 100644 --- a/features/system-report/src/main/java/org/opennms/systemreport/system/JavaReportPlugin.java +++ b/features/system-report/src/main/java/org/opennms/systemreport/system/JavaReportPlugin.java @@ -68,6 +68,8 @@ public Map getEntries() { memoryBean = ManagementFactory.getMemoryMXBean(); } + map.put("Initial Heap Size", getResource(String.format("%d",memoryBean.getHeapMemoryUsage().getInit()))); + map.put("Max Heap Size", getResource(String.format("%d",memoryBean.getHeapMemoryUsage().getMax()))); addGetters(memoryBean, map); RuntimeMXBean runtimeBean = getBean(ManagementFactory.RUNTIME_MXBEAN_NAME, RuntimeMXBean.class); @@ -110,5 +112,4 @@ public Map getEntries() { return map; } - } diff --git a/features/system-report/src/main/java/org/opennms/systemreport/system/OSReportPlugin.java b/features/system-report/src/main/java/org/opennms/systemreport/system/OSReportPlugin.java index 9fc01e46a767..a1ca3f3ff69e 100644 --- a/features/system-report/src/main/java/org/opennms/systemreport/system/OSReportPlugin.java +++ b/features/system-report/src/main/java/org/opennms/systemreport/system/OSReportPlugin.java @@ -28,18 +28,31 @@ import java.util.Map; import java.util.TreeMap; import java.util.stream.Collectors; +import java.util.stream.IntStream; import org.opennms.core.resource.Vault; import org.opennms.netmgt.dao.api.IpInterfaceDao; +import org.opennms.netmgt.model.OnmsIpInterface; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.opennms.systemreport.AbstractSystemReportPlugin; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.Resource; - +import javax.management.AttributeNotFoundException; +import javax.management.InstanceNotFoundException; +import javax.management.MBeanException; +import javax.management.MBeanServer; +import javax.management.MalformedObjectNameException; +import javax.management.ObjectName; +import javax.management.ReflectionException; public class OSReportPlugin extends AbstractSystemReportPlugin { private static final Logger LOG = LoggerFactory.getLogger(OSReportPlugin.class); private static final Map m_oses = new LinkedHashMap(); + private static final MBeanServer M_BEAN_SERVER = ManagementFactory.getPlatformMBeanServer(); + private static final String JMX_OBJ_OS = "java.lang:type=OperatingSystem"; + private static final String JMX_ATTR_AVAILABLE_PROCESSORS = "AvailableProcessors"; + private static final String JMX_ATTR_FREE_PHYSICAL_MEMORY_SIZE = "FreePhysicalMemorySize"; + private static final String JMX_ATTR_TOTAL_PHYSICAL_MEMORY_SIZE = "TotalPhysicalMemorySize"; @Autowired public IpInterfaceDao m_ipInterfaceDao; @@ -135,13 +148,71 @@ public Map getEntries() { map.put("Description", map.remove("Distribution Description")); } - String hostName=m_ipInterfaceDao.findAll().stream().map(s->s.getIpHostName()).distinct().collect(Collectors.joining(",")); - String ipAddress=m_ipInterfaceDao.findAll().stream().map(s->s.getIpAddress().getHostAddress()).distinct().collect(Collectors.joining(",")); + String hostName = m_ipInterfaceDao.findAll().stream().map(OnmsIpInterface::getIpHostName).distinct().collect(Collectors.joining(",")); + String ipAddress = m_ipInterfaceDao.findAll().stream().map(s->s.getIpAddress().getHostAddress()).distinct().collect(Collectors.joining(",")); map.put("Host Name",getResource(hostName)); map.put("Ip Address",getResource(ipAddress)); map.put("HTTP(S) ports",getResource(Vault.getProperty("org.opennms.netmgt.jetty.port"))); + Object availableProcessorsObj = getJmxAttribute(JMX_OBJ_OS, JMX_ATTR_AVAILABLE_PROCESSORS); + if (availableProcessorsObj != null) { + map.put("System CPU count",getResource(String.valueOf((int) availableProcessorsObj))); + + } + + long totalPhysicalMemSize= 0L; + Object totalPhysicalMemSizeObj = getJmxAttribute(JMX_OBJ_OS, JMX_ATTR_TOTAL_PHYSICAL_MEMORY_SIZE); + if (totalPhysicalMemSizeObj != null) { + totalPhysicalMemSize = (long) totalPhysicalMemSizeObj; + + } + + long freePhysicalMemSize = 0L; + Object freePhysicalMemSizeObj = getJmxAttribute(JMX_OBJ_OS, JMX_ATTR_FREE_PHYSICAL_MEMORY_SIZE); + if (freePhysicalMemSizeObj != null) { + freePhysicalMemSize = (long) freePhysicalMemSizeObj; + } + + map.put("Total System RAM",getResource(String.valueOf(totalPhysicalMemSize))); + map.put("Used System RAM",getResource(String.valueOf((totalPhysicalMemSize-freePhysicalMemSize)))); + map.put("Hard Drive Capacity",getResource(getHardDriveCapacity())); + + return map; } + + private Object getJmxAttribute(String objectName, String attributeName) { + ObjectName objNameActual; + try { + objNameActual = new ObjectName(objectName); + } catch (MalformedObjectNameException e) { + LOG.warn("Failed to query from object name " + objectName, e); + return null; + } + try { + return M_BEAN_SERVER.getAttribute(objNameActual, attributeName); + } catch (InstanceNotFoundException | AttributeNotFoundException + | ReflectionException | MBeanException e) { + LOG.warn("Failed to query from attribute name " + attributeName + " on object " + objectName, e); + return null; + } + } + + + private String getHardDriveCapacity(){ + /*Unix command for retrieving the hard disk capacity here command will only return headers and total of hard disk capacity values*/ + String[] command = {"bash", "-c", "df -h --total | grep -E 'Filesystem|total'"}; + /* disCapComdOutput is Output of Disk Capcity Comand */ + String disCapComdOutput = slurpCommand(command); + + String[] hdStats = disCapComdOutput.trim().split("\n"); // Splitting the lines in hdStats Array of Strings + String [] headers = hdStats[0].split("\\s+"); // at zero index there are headers + String [] values = hdStats[1].split("\\s+"); // at 1 index there are values for disk capacity + + return IntStream.range(1, headers.length-1) // Stream over the indices of headers array and skipping the ist and last header as well as values. + .mapToObj(i -> headers[i] + ": " + values[i]) // Format each header-value pair + .collect(Collectors.joining(", ")); + } + } diff --git a/features/system-report/src/test/java/org/opennms/systemreport/system/SystemReportPluginIT.java b/features/system-report/src/test/java/org/opennms/systemreport/system/SystemReportPluginIT.java index 8c04194b355b..ef94fb1cae98 100644 --- a/features/system-report/src/test/java/org/opennms/systemreport/system/SystemReportPluginIT.java +++ b/features/system-report/src/test/java/org/opennms/systemreport/system/SystemReportPluginIT.java @@ -27,14 +27,21 @@ import org.junit.Test; import org.opennms.core.test.MockLogAppender; +import org.opennms.netmgt.dao.mock.MockAlarmDao; +import org.opennms.netmgt.dao.mock.MockEventDao; import org.opennms.netmgt.dao.mock.MockIpInterfaceDao; +import org.opennms.netmgt.dao.mock.MockNodeDao; +import org.opennms.netmgt.dao.mock.MockSnmpInterfaceDao; import org.opennms.systemreport.SystemReportPlugin; +import org.opennms.systemreport.opennms.OpenNMSReportPlugin; import org.springframework.core.io.ByteArrayResource; import org.springframework.test.util.ReflectionTestUtils; public class SystemReportPluginIT { private SystemReportPlugin m_javaReportPlugin = new JavaReportPlugin(); private SystemReportPlugin m_osReportPlugin = new OSReportPlugin(); + private SystemReportPlugin m_onmsReportPlugin = new OpenNMSReportPlugin(); + public SystemReportPluginIT() { MockLogAppender.setupLogging(false, "ERROR"); @@ -43,10 +50,38 @@ public SystemReportPluginIT() { @Test public void testJavaReportPlugin() { final Map entries = m_javaReportPlugin.getEntries(); - final float classVer = Float.valueOf(getResourceText(entries.get("Class Version"))); - assertTrue(classVer >= 49.0); + assertTrue(entries.containsKey("Class Version")); + assertTrue(entries.containsKey("Compiler")); + assertTrue(entries.containsKey("Home")); + assertTrue(entries.containsKey("Initial Heap Size")); + assertTrue(entries.containsKey("Max Heap Size")); + assertTrue(entries.containsKey("VM Name")); + assertTrue(entries.containsKey("VM Version")); + assertTrue(entries.containsKey("Vendor")); + assertTrue(entries.containsKey("Version")); + + } + + @Test + public void testOpenNMSReportPlugin() { + ReflectionTestUtils.setField(m_onmsReportPlugin,"m_nodeDao",new MockNodeDao()); + ReflectionTestUtils.setField(m_onmsReportPlugin,"m_ipInterfaceDao",new MockIpInterfaceDao()); + ReflectionTestUtils.setField(m_onmsReportPlugin,"m_snmpInterfaceDao",new MockSnmpInterfaceDao()); + ReflectionTestUtils.setField(m_onmsReportPlugin,"m_eventDao",new MockEventDao()); + ReflectionTestUtils.setField(m_onmsReportPlugin,"m_alarmDao",new MockAlarmDao()); + final Map entries = m_onmsReportPlugin.getEntries(); + assertTrue(entries.containsKey("Number of Alarms")); + assertTrue(entries.containsKey("Number of Events")); + assertTrue(entries.containsKey("Number of IP Interfaces")); + assertTrue(entries.containsKey("Number of Nodes")); + assertTrue(entries.containsKey("Number of SNMP Interfaces")); + assertTrue(entries.containsKey("OpenNMS Home")); + assertTrue(entries.containsKey("OpenNMS Up Time")); + assertTrue(entries.containsKey("Time-Series Strategy")); + assertTrue(entries.containsKey("Version")); } + @Test public void testOSPlugin() { ReflectionTestUtils.setField(m_osReportPlugin,"m_ipInterfaceDao",new MockIpInterfaceDao()); @@ -57,6 +92,11 @@ public void testOSPlugin() { assertTrue(entries.containsKey("Host Name")); assertTrue(entries.containsKey("Ip Address")); assertTrue(entries.containsKey("HTTP(S) ports")); + assertTrue(entries.containsKey("Hard Drive Capacity")); + assertTrue(entries.containsKey("Total System RAM")); + assertTrue(entries.containsKey("Used System RAM")); + assertTrue(entries.containsKey("Version")); + assertTrue(entries.containsKey("Version")); } private String getResourceText(final org.springframework.core.io.Resource r) { From 63c0d13dd520b9d95835ee72a7b695e33bd18050 Mon Sep 17 00:00:00 2001 From: mwajahatabbasi Date: Tue, 14 Jan 2025 23:27:18 +0500 Subject: [PATCH 04/17] NMS-16986 : Updated changes and tests as per requirement provided in the ticket(NMS-16986). --- .../AbstractSystemReportPlugin.java | 3 +++ .../opennms/systemreport/SystemReport.java | 5 ++-- .../systemreport/SystemReportFormatter.java | 3 +++ .../systemreport/SystemReportPlugin.java | 2 ++ .../AbstractSystemReportFormatter.java | 3 +++ .../formatters/ZipSystemReportFormatter.java | 3 +++ .../opennms/ConfigurationReportPlugin.java | 3 +++ .../systemreport/opennms/LogReportPlugin.java | 3 +++ .../opennms/OpenNMSReportPlugin.java | 4 +++ .../opennms/TopEventReportPlugin.java | 3 +++ .../systemreport/system/JavaReportPlugin.java | 25 +++---------------- .../systemreport/system/OSReportPlugin.java | 20 +++------------ .../applicationContext-systemReport.xml | 5 ++++ .../system/SystemReportPluginIT.java | 10 +++++++- 14 files changed, 50 insertions(+), 42 deletions(-) diff --git a/features/system-report/src/main/java/org/opennms/systemreport/AbstractSystemReportPlugin.java b/features/system-report/src/main/java/org/opennms/systemreport/AbstractSystemReportPlugin.java index 4c7f3cc9028d..e534f5131834 100644 --- a/features/system-report/src/main/java/org/opennms/systemreport/AbstractSystemReportPlugin.java +++ b/features/system-report/src/main/java/org/opennms/systemreport/AbstractSystemReportPlugin.java @@ -88,6 +88,9 @@ public boolean getOutputsFiles() { return false; } + @Override + public boolean isVisible() { return false; } + protected ResourceLocator getResourceLocator() { return m_resourceLocator; } diff --git a/features/system-report/src/main/java/org/opennms/systemreport/SystemReport.java b/features/system-report/src/main/java/org/opennms/systemreport/SystemReport.java index 15d1f077c121..a54aba849f65 100644 --- a/features/system-report/src/main/java/org/opennms/systemreport/SystemReport.java +++ b/features/system-report/src/main/java/org/opennms/systemreport/SystemReport.java @@ -35,6 +35,7 @@ import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; +import java.util.stream.Collectors; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.CommandLineParser; @@ -230,14 +231,14 @@ public List getPlugins() { initializeSpring(); final List plugins = new ArrayList(m_serviceRegistry.findProviders(SystemReportPlugin.class)); Collections.sort(plugins); - return plugins; + return plugins.stream().filter(SystemReportPlugin::isVisible).collect(Collectors.toList()); } public List getFormatters() { initializeSpring(); final List formatters = new ArrayList(m_serviceRegistry.findProviders(SystemReportFormatter.class)); Collections.sort(formatters); - return formatters; + return formatters.stream().filter(SystemReportFormatter::isVisible).collect(Collectors.toList()); } private void initializeSpring() { diff --git a/features/system-report/src/main/java/org/opennms/systemreport/SystemReportFormatter.java b/features/system-report/src/main/java/org/opennms/systemreport/SystemReportFormatter.java index 915e53b5fc21..0b751b529df4 100644 --- a/features/system-report/src/main/java/org/opennms/systemreport/SystemReportFormatter.java +++ b/features/system-report/src/main/java/org/opennms/systemreport/SystemReportFormatter.java @@ -89,4 +89,7 @@ public interface SystemReportFormatter extends Comparable */ public boolean canStdout(); + + public boolean isVisible(); + } diff --git a/features/system-report/src/main/java/org/opennms/systemreport/SystemReportPlugin.java b/features/system-report/src/main/java/org/opennms/systemreport/SystemReportPlugin.java index 365891d47a37..9e68851923bf 100644 --- a/features/system-report/src/main/java/org/opennms/systemreport/SystemReportPlugin.java +++ b/features/system-report/src/main/java/org/opennms/systemreport/SystemReportPlugin.java @@ -57,4 +57,6 @@ public interface SystemReportPlugin extends Comparable { public boolean getFullOutputOnly(); public boolean getOutputsFiles(); + + public boolean isVisible(); } diff --git a/features/system-report/src/main/java/org/opennms/systemreport/formatters/AbstractSystemReportFormatter.java b/features/system-report/src/main/java/org/opennms/systemreport/formatters/AbstractSystemReportFormatter.java index 49aa54332e5c..691553db9d48 100644 --- a/features/system-report/src/main/java/org/opennms/systemreport/formatters/AbstractSystemReportFormatter.java +++ b/features/system-report/src/main/java/org/opennms/systemreport/formatters/AbstractSystemReportFormatter.java @@ -95,6 +95,9 @@ public void begin() { @Override public void end() { } + + @Override + public boolean isVisible() { return false; } @Override public final int compareTo(final SystemReportFormatter o) { diff --git a/features/system-report/src/main/java/org/opennms/systemreport/formatters/ZipSystemReportFormatter.java b/features/system-report/src/main/java/org/opennms/systemreport/formatters/ZipSystemReportFormatter.java index 9e828b5ad2e0..0abfb1ee36a3 100644 --- a/features/system-report/src/main/java/org/opennms/systemreport/formatters/ZipSystemReportFormatter.java +++ b/features/system-report/src/main/java/org/opennms/systemreport/formatters/ZipSystemReportFormatter.java @@ -81,6 +81,9 @@ public boolean canStdout() { return false; } + @Override + public boolean isVisible() { return true; } + @Override public void begin() { super.begin(); diff --git a/features/system-report/src/main/java/org/opennms/systemreport/opennms/ConfigurationReportPlugin.java b/features/system-report/src/main/java/org/opennms/systemreport/opennms/ConfigurationReportPlugin.java index d8fab4f4d3b6..533505265b43 100644 --- a/features/system-report/src/main/java/org/opennms/systemreport/opennms/ConfigurationReportPlugin.java +++ b/features/system-report/src/main/java/org/opennms/systemreport/opennms/ConfigurationReportPlugin.java @@ -50,6 +50,9 @@ public int getPriority() { return 20; } + @Override + public boolean isVisible() { return true; } + @Override public boolean getFullOutputOnly() { return true; diff --git a/features/system-report/src/main/java/org/opennms/systemreport/opennms/LogReportPlugin.java b/features/system-report/src/main/java/org/opennms/systemreport/opennms/LogReportPlugin.java index aa876ef78259..3410efd08e98 100644 --- a/features/system-report/src/main/java/org/opennms/systemreport/opennms/LogReportPlugin.java +++ b/features/system-report/src/main/java/org/opennms/systemreport/opennms/LogReportPlugin.java @@ -51,6 +51,9 @@ public boolean getFullOutputOnly() { return true; } + @Override + public boolean isVisible() { return true; } + @Override public boolean getOutputsFiles() { return true; diff --git a/features/system-report/src/main/java/org/opennms/systemreport/opennms/OpenNMSReportPlugin.java b/features/system-report/src/main/java/org/opennms/systemreport/opennms/OpenNMSReportPlugin.java index a5011d481d86..2dd3156c3f25 100644 --- a/features/system-report/src/main/java/org/opennms/systemreport/opennms/OpenNMSReportPlugin.java +++ b/features/system-report/src/main/java/org/opennms/systemreport/opennms/OpenNMSReportPlugin.java @@ -76,6 +76,10 @@ public String getDescription() { return "OpenNMS core information, version, and basic configuration"; } + + @Override + public boolean isVisible() { return true; } + @Override public int getPriority() { return 3; diff --git a/features/system-report/src/main/java/org/opennms/systemreport/opennms/TopEventReportPlugin.java b/features/system-report/src/main/java/org/opennms/systemreport/opennms/TopEventReportPlugin.java index c06caae07b25..67f1466f951a 100644 --- a/features/system-report/src/main/java/org/opennms/systemreport/opennms/TopEventReportPlugin.java +++ b/features/system-report/src/main/java/org/opennms/systemreport/opennms/TopEventReportPlugin.java @@ -58,6 +58,9 @@ public int getPriority() { return 4; } + @Override + public boolean isVisible() { return true; } + @Override public Map getEntries() { final TreeMap map = new TreeMap(); diff --git a/features/system-report/src/main/java/org/opennms/systemreport/system/JavaReportPlugin.java b/features/system-report/src/main/java/org/opennms/systemreport/system/JavaReportPlugin.java index f7332da2b2e2..bac39d42c395 100644 --- a/features/system-report/src/main/java/org/opennms/systemreport/system/JavaReportPlugin.java +++ b/features/system-report/src/main/java/org/opennms/systemreport/system/JavaReportPlugin.java @@ -51,6 +51,9 @@ public int getPriority() { return 1; } + @Override + public boolean isVisible() { return true; } + @Override public Map getEntries() { final TreeMap map = new TreeMap(); @@ -88,28 +91,6 @@ public Map getEntries() { addGetters(classBean, map); - /* this stuff is really not giving us anything useful - List beans = getBeans(ManagementFactory.GARBAGE_COLLECTOR_MXBEAN_DOMAIN_TYPE, GarbageCollectorMXBean.class); - if (beans == null || beans.size() == 0) { - LOG.info("falling back to local VM MemoryMXBean"); - beans = ManagementFactory.getGarbageCollectorMXBeans(); - } - - LOG.trace("beans = {}", beans); - int collectorNum = 1; - for (final GarbageCollectorMXBean bean : beans) { - final Map temp = new TreeMap(); - addGetters(bean, map); - - final StringBuilder sb = new StringBuilder(); - for (final String s : temp.keySet()) { - sb.append(s).append(": ").append(temp.get(s)).append("\n"); - } - if (sb.length() > 0) sb.deleteCharAt(sb.length()); - map.put("Garbage Collector " + collectorNum, getResource(sb.toString())); - } - */ - return map; } } diff --git a/features/system-report/src/main/java/org/opennms/systemreport/system/OSReportPlugin.java b/features/system-report/src/main/java/org/opennms/systemreport/system/OSReportPlugin.java index a1ca3f3ff69e..e867877204cf 100644 --- a/features/system-report/src/main/java/org/opennms/systemreport/system/OSReportPlugin.java +++ b/features/system-report/src/main/java/org/opennms/systemreport/system/OSReportPlugin.java @@ -28,7 +28,6 @@ import java.util.Map; import java.util.TreeMap; import java.util.stream.Collectors; -import java.util.stream.IntStream; import org.opennms.core.resource.Vault; import org.opennms.netmgt.dao.api.IpInterfaceDao; import org.opennms.netmgt.model.OnmsIpInterface; @@ -84,6 +83,9 @@ public String getDescription() { return "Kernel, OS, and Distribution"; } + @Override + public boolean isVisible() { return true; } + @Override public int getPriority() { return 2; @@ -176,8 +178,6 @@ public Map getEntries() { map.put("Total System RAM",getResource(String.valueOf(totalPhysicalMemSize))); map.put("Used System RAM",getResource(String.valueOf((totalPhysicalMemSize-freePhysicalMemSize)))); - map.put("Hard Drive Capacity",getResource(getHardDriveCapacity())); - return map; } @@ -200,19 +200,5 @@ private Object getJmxAttribute(String objectName, String attributeName) { } - private String getHardDriveCapacity(){ - /*Unix command for retrieving the hard disk capacity here command will only return headers and total of hard disk capacity values*/ - String[] command = {"bash", "-c", "df -h --total | grep -E 'Filesystem|total'"}; - /* disCapComdOutput is Output of Disk Capcity Comand */ - String disCapComdOutput = slurpCommand(command); - - String[] hdStats = disCapComdOutput.trim().split("\n"); // Splitting the lines in hdStats Array of Strings - String [] headers = hdStats[0].split("\\s+"); // at zero index there are headers - String [] values = hdStats[1].split("\\s+"); // at 1 index there are values for disk capacity - - return IntStream.range(1, headers.length-1) // Stream over the indices of headers array and skipping the ist and last header as well as values. - .mapToObj(i -> headers[i] + ": " + values[i]) // Format each header-value pair - .collect(Collectors.joining(", ")); - } } diff --git a/features/system-report/src/main/resources/META-INF/opennms/applicationContext-systemReport.xml b/features/system-report/src/main/resources/META-INF/opennms/applicationContext-systemReport.xml index b560d3a4813f..8561abe4278f 100644 --- a/features/system-report/src/main/resources/META-INF/opennms/applicationContext-systemReport.xml +++ b/features/system-report/src/main/resources/META-INF/opennms/applicationContext-systemReport.xml @@ -22,6 +22,11 @@ + + + + + diff --git a/features/system-report/src/test/java/org/opennms/systemreport/system/SystemReportPluginIT.java b/features/system-report/src/test/java/org/opennms/systemreport/system/SystemReportPluginIT.java index ef94fb1cae98..3ddf5def8f7d 100644 --- a/features/system-report/src/test/java/org/opennms/systemreport/system/SystemReportPluginIT.java +++ b/features/system-report/src/test/java/org/opennms/systemreport/system/SystemReportPluginIT.java @@ -41,7 +41,7 @@ public class SystemReportPluginIT { private SystemReportPlugin m_javaReportPlugin = new JavaReportPlugin(); private SystemReportPlugin m_osReportPlugin = new OSReportPlugin(); private SystemReportPlugin m_onmsReportPlugin = new OpenNMSReportPlugin(); - + private SystemReportPlugin m_hardDriveReportPlugin=new HardDriveReportPlugin(); public SystemReportPluginIT() { MockLogAppender.setupLogging(false, "ERROR"); @@ -62,6 +62,14 @@ public void testJavaReportPlugin() { } + @Test + public void testHardDriveReportPlugin() { + final Map entries = m_hardDriveReportPlugin.getEntries(); + assertTrue(entries.containsKey("Hard Drive Capacity")); + assertTrue(entries.containsKey("Hard Drive Performance")); + } + + @Test public void testOpenNMSReportPlugin() { ReflectionTestUtils.setField(m_onmsReportPlugin,"m_nodeDao",new MockNodeDao()); From 10adbae46c8bc200cdfd243ce0653805865c5b8f Mon Sep 17 00:00:00 2001 From: mwajahatabbasi Date: Tue, 14 Jan 2025 23:27:44 +0500 Subject: [PATCH 05/17] NMS-16986 : Updated changes and tests as per requirement provided in the ticket(NMS-16986). --- .../system/HardDriveReportPlugin.java | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 features/system-report/src/main/java/org/opennms/systemreport/system/HardDriveReportPlugin.java diff --git a/features/system-report/src/main/java/org/opennms/systemreport/system/HardDriveReportPlugin.java b/features/system-report/src/main/java/org/opennms/systemreport/system/HardDriveReportPlugin.java new file mode 100644 index 000000000000..cbeec16b6381 --- /dev/null +++ b/features/system-report/src/main/java/org/opennms/systemreport/system/HardDriveReportPlugin.java @@ -0,0 +1,47 @@ +package org.opennms.systemreport.system; + +import org.opennms.systemreport.AbstractSystemReportPlugin; +import org.springframework.core.io.Resource; + +import java.util.Map; +import java.util.TreeMap; + +public class HardDriveReportPlugin extends AbstractSystemReportPlugin { + + + @Override + public String getName() { + return "Hard Drive Stats"; + } + + @Override + public String getDescription() { return "Hard Drive Capacity and Performance Information"; } + + @Override + public int getPriority() { + return 5; + } + + @Override + public boolean isVisible() { return true; } + + @Override + public Map getEntries() { + final Map map = new TreeMap(); + + String[] dfCommand = {"bash", "-c", "df -h"}; + final String dfOutput = slurpCommand(dfCommand); + if (dfOutput != null) { + map.put("Hard Drive Capacity", getResource("\n"+dfOutput)); + } + + String[] ioStatCommand = {"bash", "-c", "iostat -d"}; + final String iostatOutput = slurpCommand(ioStatCommand); + if (iostatOutput != null) { + map.put("Hard Drive Performance", getResource("\n"+iostatOutput)); + } + + return map; + } + +} From 993520a35734181a51f489bb93f933fa1c8002ff Mon Sep 17 00:00:00 2001 From: mwajahatabbasi Date: Wed, 15 Jan 2025 00:17:30 +0500 Subject: [PATCH 06/17] NMS-16986 : Updated changes and tests as per requirement provided in the ticket(NMS-16986). --- .../org/opennms/systemreport/system/SystemReportPluginIT.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/features/system-report/src/test/java/org/opennms/systemreport/system/SystemReportPluginIT.java b/features/system-report/src/test/java/org/opennms/systemreport/system/SystemReportPluginIT.java index 3ddf5def8f7d..f1540e06a255 100644 --- a/features/system-report/src/test/java/org/opennms/systemreport/system/SystemReportPluginIT.java +++ b/features/system-report/src/test/java/org/opennms/systemreport/system/SystemReportPluginIT.java @@ -100,11 +100,9 @@ public void testOSPlugin() { assertTrue(entries.containsKey("Host Name")); assertTrue(entries.containsKey("Ip Address")); assertTrue(entries.containsKey("HTTP(S) ports")); - assertTrue(entries.containsKey("Hard Drive Capacity")); assertTrue(entries.containsKey("Total System RAM")); assertTrue(entries.containsKey("Used System RAM")); assertTrue(entries.containsKey("Version")); - assertTrue(entries.containsKey("Version")); } private String getResourceText(final org.springframework.core.io.Resource r) { From 867f2e1c75b622f4c6edf73b39d78a394cedae0b Mon Sep 17 00:00:00 2001 From: Shahbaz Date: Wed, 15 Jan 2025 14:02:50 +0500 Subject: [PATCH 07/17] Grouping of System Report at front end. --- .../jsp/admin/support/systemReportList.jsp | 73 +++++++++++++++++-- 1 file changed, 68 insertions(+), 5 deletions(-) diff --git a/opennms-webapp/src/main/webapp/WEB-INF/jsp/admin/support/systemReportList.jsp b/opennms-webapp/src/main/webapp/WEB-INF/jsp/admin/support/systemReportList.jsp index d2293d1bbc24..952c3548e41d 100644 --- a/opennms-webapp/src/main/webapp/WEB-INF/jsp/admin/support/systemReportList.jsp +++ b/opennms-webapp/src/main/webapp/WEB-INF/jsp/admin/support/systemReportList.jsp @@ -35,7 +35,7 @@ +
- Plugins     All + Plugins

Choose which plugins to enable:

- - :
-
+
+ +
+ + + +
+ + + + +
+
+
+
+
+ +
+ + + +
+ + + + +
+
+
+
+
+
From 2dd8f71c20bf54db16e86b3dfe09ec75122ab7d1 Mon Sep 17 00:00:00 2001 From: Shahbaz Date: Wed, 15 Jan 2025 14:17:18 +0500 Subject: [PATCH 08/17] unnecessary comments removed --- .../main/webapp/WEB-INF/jsp/admin/support/systemReportList.jsp | 2 -- 1 file changed, 2 deletions(-) diff --git a/opennms-webapp/src/main/webapp/WEB-INF/jsp/admin/support/systemReportList.jsp b/opennms-webapp/src/main/webapp/WEB-INF/jsp/admin/support/systemReportList.jsp index 952c3548e41d..842265b9b5f1 100644 --- a/opennms-webapp/src/main/webapp/WEB-INF/jsp/admin/support/systemReportList.jsp +++ b/opennms-webapp/src/main/webapp/WEB-INF/jsp/admin/support/systemReportList.jsp @@ -58,8 +58,6 @@ function toggle(box, field) } function toggleGroup(activeGroup) { - console.log(activeGroup, 'Active group selected'); - // Select group elements const group1Checkboxes = document.querySelectorAll("#group1 input[type='checkbox']"); const group2Radios = document.querySelectorAll("#group2 input[type='radio']"); From 1811ef11f346c559fc55384b4283537533633739 Mon Sep 17 00:00:00 2001 From: Shahbaz Date: Wed, 15 Jan 2025 18:07:43 +0500 Subject: [PATCH 09/17] Selenium test cases fix --- .../org/opennms/smoketest/SupportPageIT.java | 30 +++++++++++++++---- 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/smoke-test/src/test/java/org/opennms/smoketest/SupportPageIT.java b/smoke-test/src/test/java/org/opennms/smoketest/SupportPageIT.java index 11e6116225d2..38e390bcaed2 100644 --- a/smoke-test/src/test/java/org/opennms/smoketest/SupportPageIT.java +++ b/smoke-test/src/test/java/org/opennms/smoketest/SupportPageIT.java @@ -61,12 +61,30 @@ public void testAllButtonsArePresent() throws Exception { public void testSystemReport() { driver.findElement(By.linkText("Generate System Report")).click(); - // checkboxes are selected by default - final WebElement allCheckbox = driver.findElement(By.cssSelector("input[type=checkbox][name=all]")); - assertThat(driver.findElement(By.cssSelector("input[type=checkbox][name=plugins][value=Java]")).isSelected(), is(true)); + final WebElement textFileReportRadio = driver.findElement(By.id("radio1")); + final WebElement logFilesRadio = driver.findElement(By.id("radio2")); + final WebElement javaReportCheckbox = driver.findElement(By.cssSelector("input[type=checkbox][name=plugins][value=Java]")); + final WebElement threadsReportRadio = driver.findElement(By.cssSelector("input[type=radio][name=plugins][value=Threads]")); + final WebElement topReportRadio = driver.findElement(By.cssSelector("input[type=radio][name=plugins][value=Top]")); - // deselect the "all" checkbox - allCheckbox.click(); - assertThat(driver.findElement(By.cssSelector("input[type=checkbox][name=plugins][value=Java]")).isSelected(), is(false)); + assertThat(textFileReportRadio.isSelected(), is(true)); + assertThat(logFilesRadio.isSelected(), is(false)) + assertThat(javaReportCheckbox.isSelected(), is(true)); + assertThat(threadsReportRadio.isSelected(), is(false)); + assertThat(topReportRadio.isSelected(), is(false)); + + javaReportCheckbox.click(); + assertThat(javaReportCheckbox.isSelected(), is(false)); + + logFilesRadio.click(); + assertThat(textFileReportRadio.isSelected(), is(false)); + assertThat(logFilesRadio.isSelected(), is(true)); + assertThat(javaReportCheckbox.isSelected(), is(false)); + assertThat(threadsReportRadio.isSelected(), is(true)); + assertThat(topReportRadio.isSelected(), is(false)); + + topReportRadio.click(); + assertThat(threadsReportRadio.isSelected(), is(false)); + assertThat(topReportRadio.isSelected(), is(true)); } } From ee9178f7ce93b022b6071d5f13dd23a7319e6022 Mon Sep 17 00:00:00 2001 From: Shahbaz Date: Wed, 15 Jan 2025 18:35:51 +0500 Subject: [PATCH 10/17] missing ';' --- .../src/test/java/org/opennms/smoketest/SupportPageIT.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/smoke-test/src/test/java/org/opennms/smoketest/SupportPageIT.java b/smoke-test/src/test/java/org/opennms/smoketest/SupportPageIT.java index 38e390bcaed2..177bc911f4e7 100644 --- a/smoke-test/src/test/java/org/opennms/smoketest/SupportPageIT.java +++ b/smoke-test/src/test/java/org/opennms/smoketest/SupportPageIT.java @@ -68,7 +68,7 @@ public void testSystemReport() { final WebElement topReportRadio = driver.findElement(By.cssSelector("input[type=radio][name=plugins][value=Top]")); assertThat(textFileReportRadio.isSelected(), is(true)); - assertThat(logFilesRadio.isSelected(), is(false)) + assertThat(logFilesRadio.isSelected(), is(false)); assertThat(javaReportCheckbox.isSelected(), is(true)); assertThat(threadsReportRadio.isSelected(), is(false)); assertThat(topReportRadio.isSelected(), is(false)); From 4fa6a8497b299a361a694fa9d4b2c7a059242a00 Mon Sep 17 00:00:00 2001 From: mwajahatabbasi Date: Thu, 16 Jan 2025 21:14:16 +0500 Subject: [PATCH 11/17] NMS-16986 : Handel Review Changes. --- .../AbstractSystemReportPlugin.java | 6 +----- .../system/HardDriveReportPlugin.java | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/features/system-report/src/main/java/org/opennms/systemreport/AbstractSystemReportPlugin.java b/features/system-report/src/main/java/org/opennms/systemreport/AbstractSystemReportPlugin.java index e534f5131834..7e85d2bb3cf8 100644 --- a/features/system-report/src/main/java/org/opennms/systemreport/AbstractSystemReportPlugin.java +++ b/features/system-report/src/main/java/org/opennms/systemreport/AbstractSystemReportPlugin.java @@ -147,11 +147,7 @@ protected String slurpCommand(final String[] command) { isr = new InputStreamReader(is); br = new BufferedReader(isr); String line=null; - while ((line = br.readLine()) != null) { //br.ready() not working as desired so code modified. - /* - lines commented due to desired results are not shown using this code. - final String line = br.readLine(); - if (line == null) break;*/ + while ((line = br.readLine()) != null) { sb.append(line); if (br.ready()) sb.append("\n"); } diff --git a/features/system-report/src/main/java/org/opennms/systemreport/system/HardDriveReportPlugin.java b/features/system-report/src/main/java/org/opennms/systemreport/system/HardDriveReportPlugin.java index cbeec16b6381..a3d23c1c5f19 100644 --- a/features/system-report/src/main/java/org/opennms/systemreport/system/HardDriveReportPlugin.java +++ b/features/system-report/src/main/java/org/opennms/systemreport/system/HardDriveReportPlugin.java @@ -1,3 +1,24 @@ +/* + * Licensed to The OpenNMS Group, Inc (TOG) under one or more + * contributor license agreements. See the LICENSE.md file + * distributed with this work for additional information + * regarding copyright ownership. + * + * TOG licenses this file to You under the GNU Affero General + * Public License Version 3 (the "License") or (at your option) + * any later version. You may not use this file except in + * compliance with the License. You may obtain a copy of the + * License at: + * + * https://www.gnu.org/licenses/agpl-3.0.txt + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific + * language governing permissions and limitations under the + * License. + */ package org.opennms.systemreport.system; import org.opennms.systemreport.AbstractSystemReportPlugin; From 5d696cd1d9de2695c012787dc7ba447a13cd6d09 Mon Sep 17 00:00:00 2001 From: mwajahatabbasi Date: Mon, 20 Jan 2025 22:55:09 +0500 Subject: [PATCH 12/17] NMS-16986 : Handel Merge changes as well as changes suggest in standup meeting. --- .../jsp/admin/support/systemReportList.jsp | 4 ++-- .../org/opennms/smoketest/SupportPageIT.java | 19 ++++++++++--------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/opennms-webapp/src/main/webapp/WEB-INF/jsp/admin/support/systemReportList.jsp b/opennms-webapp/src/main/webapp/WEB-INF/jsp/admin/support/systemReportList.jsp index 842265b9b5f1..c1303f230a38 100644 --- a/opennms-webapp/src/main/webapp/WEB-INF/jsp/admin/support/systemReportList.jsp +++ b/opennms-webapp/src/main/webapp/WEB-INF/jsp/admin/support/systemReportList.jsp @@ -104,7 +104,7 @@ function toggleGroup(activeGroup) {
- +
@@ -119,7 +119,7 @@ function toggleGroup(activeGroup) {
- +
diff --git a/smoke-test/src/test/java/org/opennms/smoketest/SupportPageIT.java b/smoke-test/src/test/java/org/opennms/smoketest/SupportPageIT.java index 177bc911f4e7..80ace6270df1 100644 --- a/smoke-test/src/test/java/org/opennms/smoketest/SupportPageIT.java +++ b/smoke-test/src/test/java/org/opennms/smoketest/SupportPageIT.java @@ -64,14 +64,14 @@ public void testSystemReport() { final WebElement textFileReportRadio = driver.findElement(By.id("radio1")); final WebElement logFilesRadio = driver.findElement(By.id("radio2")); final WebElement javaReportCheckbox = driver.findElement(By.cssSelector("input[type=checkbox][name=plugins][value=Java]")); - final WebElement threadsReportRadio = driver.findElement(By.cssSelector("input[type=radio][name=plugins][value=Threads]")); - final WebElement topReportRadio = driver.findElement(By.cssSelector("input[type=radio][name=plugins][value=Top]")); + final WebElement configurationReportRadio = driver.findElement(By.cssSelector("input[type=radio][name=plugins][value=Configuration]")); + final WebElement logsReportRadio = driver.findElement(By.cssSelector("input[type=radio][name=plugins][value=Logs]")); assertThat(textFileReportRadio.isSelected(), is(true)); assertThat(logFilesRadio.isSelected(), is(false)); assertThat(javaReportCheckbox.isSelected(), is(true)); - assertThat(threadsReportRadio.isSelected(), is(false)); - assertThat(topReportRadio.isSelected(), is(false)); + assertThat(configurationReportRadio.isSelected(), is(false)); + assertThat(logsReportRadio.isSelected(), is(false)); javaReportCheckbox.click(); assertThat(javaReportCheckbox.isSelected(), is(false)); @@ -80,11 +80,12 @@ public void testSystemReport() { assertThat(textFileReportRadio.isSelected(), is(false)); assertThat(logFilesRadio.isSelected(), is(true)); assertThat(javaReportCheckbox.isSelected(), is(false)); - assertThat(threadsReportRadio.isSelected(), is(true)); - assertThat(topReportRadio.isSelected(), is(false)); + assertThat(configurationReportRadio.isSelected(), is(true)); + assertThat(logsReportRadio.isSelected(), is(false)); - topReportRadio.click(); - assertThat(threadsReportRadio.isSelected(), is(false)); - assertThat(topReportRadio.isSelected(), is(true)); + logsReportRadio.click(); + assertThat(configurationReportRadio.isSelected(), is(false)); + assertThat(logsReportRadio.isSelected(), is(true)); } + } From d2d8ceca8e80b2c29a0a3cb1b5dcaef3dde69207 Mon Sep 17 00:00:00 2001 From: mwajahatabbasi Date: Tue, 21 Jan 2025 23:08:36 +0500 Subject: [PATCH 13/17] NMS-16986 : Handel PR Review Changes. --- .../systemreport/opennms/OpenNMSReportPlugin.java | 12 ++++++++---- .../opennms/systemreport/system/OSReportPlugin.java | 5 ----- .../systemreport/system/SystemReportPluginIT.java | 4 +--- 3 files changed, 9 insertions(+), 12 deletions(-) diff --git a/features/system-report/src/main/java/org/opennms/systemreport/opennms/OpenNMSReportPlugin.java b/features/system-report/src/main/java/org/opennms/systemreport/opennms/OpenNMSReportPlugin.java index 2dd3156c3f25..2b7464460104 100644 --- a/features/system-report/src/main/java/org/opennms/systemreport/opennms/OpenNMSReportPlugin.java +++ b/features/system-report/src/main/java/org/opennms/systemreport/opennms/OpenNMSReportPlugin.java @@ -25,6 +25,7 @@ import java.io.InputStream; import java.lang.management.ManagementFactory; import java.lang.management.RuntimeMXBean; +import java.time.Duration; import java.util.Map; import java.util.Properties; import java.util.TreeMap; @@ -88,7 +89,7 @@ public int getPriority() { @Override public Map getEntries() { final TreeMap map = new TreeMap(); - map.put("OpenNMS Home",getResourceFromProperty("opennms.home")); + map.put("OpenNMS Home Dir",getResourceFromProperty("opennms.home")); map.put("Version", getResource(Vault.getProperty("version.display"))); if (m_nodeDao != null) { @@ -130,9 +131,12 @@ private String getOnmsUptimeAsString(RuntimeMXBean runtimeBean){ // Calculate uptime long uptimeMillis = currentTimeMillis - startTimeMillis; - long hours = uptimeMillis / (1000 * 60 * 60); - long minutes = (uptimeMillis % (1000 * 60 * 60)) / (1000 * 60); - long seconds = (uptimeMillis % (1000 * 60)) / 1000; + Duration uptimeDuration = Duration.ofMillis(uptimeMillis); + + // Get hours, minutes, and seconds + long hours = uptimeDuration.toHours(); + long minutes = uptimeDuration.toMinutes() % 60; // Get remaining minutes after hours + long seconds = uptimeDuration.getSeconds() % 60; // Get remaining seconds after minutes return String.format("%d hours, %d minutes, %d seconds", hours, minutes, seconds); } diff --git a/features/system-report/src/main/java/org/opennms/systemreport/system/OSReportPlugin.java b/features/system-report/src/main/java/org/opennms/systemreport/system/OSReportPlugin.java index e867877204cf..bd0b62ebf3cc 100644 --- a/features/system-report/src/main/java/org/opennms/systemreport/system/OSReportPlugin.java +++ b/features/system-report/src/main/java/org/opennms/systemreport/system/OSReportPlugin.java @@ -150,11 +150,6 @@ public Map getEntries() { map.put("Description", map.remove("Distribution Description")); } - String hostName = m_ipInterfaceDao.findAll().stream().map(OnmsIpInterface::getIpHostName).distinct().collect(Collectors.joining(",")); - String ipAddress = m_ipInterfaceDao.findAll().stream().map(s->s.getIpAddress().getHostAddress()).distinct().collect(Collectors.joining(",")); - - map.put("Host Name",getResource(hostName)); - map.put("Ip Address",getResource(ipAddress)); map.put("HTTP(S) ports",getResource(Vault.getProperty("org.opennms.netmgt.jetty.port"))); Object availableProcessorsObj = getJmxAttribute(JMX_OBJ_OS, JMX_ATTR_AVAILABLE_PROCESSORS); diff --git a/features/system-report/src/test/java/org/opennms/systemreport/system/SystemReportPluginIT.java b/features/system-report/src/test/java/org/opennms/systemreport/system/SystemReportPluginIT.java index f1540e06a255..9892783ee629 100644 --- a/features/system-report/src/test/java/org/opennms/systemreport/system/SystemReportPluginIT.java +++ b/features/system-report/src/test/java/org/opennms/systemreport/system/SystemReportPluginIT.java @@ -83,7 +83,7 @@ public void testOpenNMSReportPlugin() { assertTrue(entries.containsKey("Number of IP Interfaces")); assertTrue(entries.containsKey("Number of Nodes")); assertTrue(entries.containsKey("Number of SNMP Interfaces")); - assertTrue(entries.containsKey("OpenNMS Home")); + assertTrue(entries.containsKey("OpenNMS Home Dir")); assertTrue(entries.containsKey("OpenNMS Up Time")); assertTrue(entries.containsKey("Time-Series Strategy")); assertTrue(entries.containsKey("Version")); @@ -97,8 +97,6 @@ public void testOSPlugin() { assertTrue(entries.containsKey("Architecture")); assertTrue(entries.containsKey("Name")); assertTrue(entries.containsKey("Distribution")); - assertTrue(entries.containsKey("Host Name")); - assertTrue(entries.containsKey("Ip Address")); assertTrue(entries.containsKey("HTTP(S) ports")); assertTrue(entries.containsKey("Total System RAM")); assertTrue(entries.containsKey("Used System RAM")); From 02ef846935077e699175180df851c448b75c96dc Mon Sep 17 00:00:00 2001 From: mwajahatabbasi Date: Wed, 22 Jan 2025 23:43:21 +0500 Subject: [PATCH 14/17] NMS-16986 : Handel PR Review Changes. --- features/system-report/pom.xml | 6 ++ .../system/HardDriveReportPlugin.java | 80 ++++++++++++++++--- .../systemreport/system/JavaReportPlugin.java | 1 - .../system/SystemReportPluginIT.java | 1 - pom.xml | 1 + 5 files changed, 75 insertions(+), 14 deletions(-) diff --git a/features/system-report/pom.xml b/features/system-report/pom.xml index f88141f87aa4..bb3f6f03d86a 100644 --- a/features/system-report/pom.xml +++ b/features/system-report/pom.xml @@ -98,6 +98,12 @@ opennms-dao-mock test + + com.github.oshi + oshi-core + ${oshi.core.version} + + org.mockito mockito-core diff --git a/features/system-report/src/main/java/org/opennms/systemreport/system/HardDriveReportPlugin.java b/features/system-report/src/main/java/org/opennms/systemreport/system/HardDriveReportPlugin.java index a3d23c1c5f19..64816a2b1069 100644 --- a/features/system-report/src/main/java/org/opennms/systemreport/system/HardDriveReportPlugin.java +++ b/features/system-report/src/main/java/org/opennms/systemreport/system/HardDriveReportPlugin.java @@ -26,6 +26,14 @@ import java.util.Map; import java.util.TreeMap; +import java.util.stream.Collectors; + +import org.apache.commons.io.FileUtils; +import oshi.SystemInfo; +import oshi.hardware.HWDiskStore; +import oshi.hardware.HardwareAbstractionLayer; +import oshi.software.os.FileSystem; +import oshi.software.os.OperatingSystem; public class HardDriveReportPlugin extends AbstractSystemReportPlugin { @@ -48,21 +56,69 @@ public int getPriority() { @Override public Map getEntries() { - final Map map = new TreeMap(); + final Map map = new TreeMap(); + map.put("Hard Drive Capacity", getResource("\n"+getDiskCapacityInfo())); + map.put("Hard Drive Performance", getResource("\n"+getDiskPerformanceInfo())); + return map; + } - String[] dfCommand = {"bash", "-c", "df -h"}; - final String dfOutput = slurpCommand(dfCommand); - if (dfOutput != null) { - map.put("Hard Drive Capacity", getResource("\n"+dfOutput)); - } - String[] ioStatCommand = {"bash", "-c", "iostat -d"}; - final String iostatOutput = slurpCommand(ioStatCommand); - if (iostatOutput != null) { - map.put("Hard Drive Performance", getResource("\n"+iostatOutput)); - } + private String getDiskPerformanceInfo(){ - return map; + SystemInfo systemInfo = new SystemInfo(); + HardwareAbstractionLayer hal = systemInfo.getHardware(); + HWDiskStore[] diskStores = hal.getDiskStores().toArray(new HWDiskStore[0]); + + String header = String.format("%-20s %-10s %-10s %-10s %-15s %-15s%n", + "Disk", "Size", "Reads", "Writes", "Read Bytes", "Write Bytes"); + + String diskInfo = java.util.Arrays.stream(diskStores) + .map(disk -> String.format("%-20s %-10s %-10s %-10s %-15s %-15s%n", + disk.getName(), + formatDiskSize(disk.getSize()), + formatDiskSize(disk.getReads()), + formatDiskSize(disk.getWrites()), + formatDiskSize(disk.getReadBytes()), + formatDiskSize(disk.getWriteBytes()))) + .collect(Collectors.joining()); + + return header + diskInfo; + + } + + + private String getDiskCapacityInfo(){ + + SystemInfo systemInfo = new SystemInfo(); + OperatingSystem os = systemInfo.getOperatingSystem(); + FileSystem fileSystem = os.getFileSystem(); + + String headers = String.format("%-20s %-10s %-10s %-10s %-10s %-10s%n", + "Filesystem", "Size", "Used", "Avail", "Use%", "Mounted on"); + + String fileStoresInfo = fileSystem.getFileStores().stream() + .map(fs -> { + long total = fs.getTotalSpace(); + long free = fs.getUsableSpace(); + long used = total - free; + double percentUsed = (total > 0) ? (100.0 * used / total) : 0; + + return String.format("%-20s %-10s %-10s %-10s %-10s %-10s%n", + fs.getName(), + formatDiskSize(total), + formatDiskSize(used), + formatDiskSize(free), + String.format("%.1f%%", percentUsed), + fs.getMount()); + }) + .collect(Collectors.joining()); + + + return headers+fileStoresInfo; + } + + private String formatDiskSize(long bytes) { + return FileUtils.byteCountToDisplaySize(bytes); } } diff --git a/features/system-report/src/main/java/org/opennms/systemreport/system/JavaReportPlugin.java b/features/system-report/src/main/java/org/opennms/systemreport/system/JavaReportPlugin.java index bac39d42c395..759b56414b8f 100644 --- a/features/system-report/src/main/java/org/opennms/systemreport/system/JavaReportPlugin.java +++ b/features/system-report/src/main/java/org/opennms/systemreport/system/JavaReportPlugin.java @@ -58,7 +58,6 @@ public int getPriority() { public Map getEntries() { final TreeMap map = new TreeMap(); map.put("Class Version", getResourceFromProperty("java.class.version")); - map.put("Compiler", getResourceFromProperty("java.compiler")); map.put("Home", getResourceFromProperty("java.home")); map.put("Version", getResourceFromProperty("java.version")); map.put("Vendor", getResourceFromProperty("java.vendor")); diff --git a/features/system-report/src/test/java/org/opennms/systemreport/system/SystemReportPluginIT.java b/features/system-report/src/test/java/org/opennms/systemreport/system/SystemReportPluginIT.java index 9892783ee629..d2bb44ad4152 100644 --- a/features/system-report/src/test/java/org/opennms/systemreport/system/SystemReportPluginIT.java +++ b/features/system-report/src/test/java/org/opennms/systemreport/system/SystemReportPluginIT.java @@ -51,7 +51,6 @@ public SystemReportPluginIT() { public void testJavaReportPlugin() { final Map entries = m_javaReportPlugin.getEntries(); assertTrue(entries.containsKey("Class Version")); - assertTrue(entries.containsKey("Compiler")); assertTrue(entries.containsKey("Home")); assertTrue(entries.containsKey("Initial Heap Size")); assertTrue(entries.containsKey("Max Heap Size")); diff --git a/pom.xml b/pom.xml index 32d3890b474f..9599b306a178 100644 --- a/pom.xml +++ b/pom.xml @@ -2029,6 +2029,7 @@ 1800 + 6.2.2 From a603edbb9bbd3c87fd038084530c5f80c83570a2 Mon Sep 17 00:00:00 2001 From: Shahbaz Date: Wed, 29 Jan 2025 21:59:17 +0500 Subject: [PATCH 15/17] grouping changes reverted --- .../jsp/admin/support/systemReportList.jsp | 71 ++----------------- .../org/opennms/smoketest/SupportPageIT.java | 31 ++------ 2 files changed, 11 insertions(+), 91 deletions(-) diff --git a/opennms-webapp/src/main/webapp/WEB-INF/jsp/admin/support/systemReportList.jsp b/opennms-webapp/src/main/webapp/WEB-INF/jsp/admin/support/systemReportList.jsp index c1303f230a38..d2293d1bbc24 100644 --- a/opennms-webapp/src/main/webapp/WEB-INF/jsp/admin/support/systemReportList.jsp +++ b/opennms-webapp/src/main/webapp/WEB-INF/jsp/admin/support/systemReportList.jsp @@ -35,7 +35,7 @@ -
- Plugins + Plugins     All

Choose which plugins to enable:

-
- -
- - - -
- - - - -
-
-
-
-
- -
- - - -
- - - - -
-
-
-
-
-
+ + :
+
diff --git a/smoke-test/src/test/java/org/opennms/smoketest/SupportPageIT.java b/smoke-test/src/test/java/org/opennms/smoketest/SupportPageIT.java index 80ace6270df1..11e6116225d2 100644 --- a/smoke-test/src/test/java/org/opennms/smoketest/SupportPageIT.java +++ b/smoke-test/src/test/java/org/opennms/smoketest/SupportPageIT.java @@ -61,31 +61,12 @@ public void testAllButtonsArePresent() throws Exception { public void testSystemReport() { driver.findElement(By.linkText("Generate System Report")).click(); - final WebElement textFileReportRadio = driver.findElement(By.id("radio1")); - final WebElement logFilesRadio = driver.findElement(By.id("radio2")); - final WebElement javaReportCheckbox = driver.findElement(By.cssSelector("input[type=checkbox][name=plugins][value=Java]")); - final WebElement configurationReportRadio = driver.findElement(By.cssSelector("input[type=radio][name=plugins][value=Configuration]")); - final WebElement logsReportRadio = driver.findElement(By.cssSelector("input[type=radio][name=plugins][value=Logs]")); + // checkboxes are selected by default + final WebElement allCheckbox = driver.findElement(By.cssSelector("input[type=checkbox][name=all]")); + assertThat(driver.findElement(By.cssSelector("input[type=checkbox][name=plugins][value=Java]")).isSelected(), is(true)); - assertThat(textFileReportRadio.isSelected(), is(true)); - assertThat(logFilesRadio.isSelected(), is(false)); - assertThat(javaReportCheckbox.isSelected(), is(true)); - assertThat(configurationReportRadio.isSelected(), is(false)); - assertThat(logsReportRadio.isSelected(), is(false)); - - javaReportCheckbox.click(); - assertThat(javaReportCheckbox.isSelected(), is(false)); - - logFilesRadio.click(); - assertThat(textFileReportRadio.isSelected(), is(false)); - assertThat(logFilesRadio.isSelected(), is(true)); - assertThat(javaReportCheckbox.isSelected(), is(false)); - assertThat(configurationReportRadio.isSelected(), is(true)); - assertThat(logsReportRadio.isSelected(), is(false)); - - logsReportRadio.click(); - assertThat(configurationReportRadio.isSelected(), is(false)); - assertThat(logsReportRadio.isSelected(), is(true)); + // deselect the "all" checkbox + allCheckbox.click(); + assertThat(driver.findElement(By.cssSelector("input[type=checkbox][name=plugins][value=Java]")).isSelected(), is(false)); } - } From 14a6da47d42f4726fae9b2684a17c553749a8194 Mon Sep 17 00:00:00 2001 From: mwajahatabbasi Date: Wed, 29 Jan 2025 23:37:11 +0500 Subject: [PATCH 16/17] NMS-16986 : Handel Changes suggested by Tech Support Changes for system report. --- .../java/org/opennms/systemreport/system/LsofReportPlugin.java | 2 ++ .../org/opennms/systemreport/system/ThreadReportPlugin.java | 3 +++ .../java/org/opennms/systemreport/system/TopReportPlugin.java | 3 +++ 3 files changed, 8 insertions(+) diff --git a/features/system-report/src/main/java/org/opennms/systemreport/system/LsofReportPlugin.java b/features/system-report/src/main/java/org/opennms/systemreport/system/LsofReportPlugin.java index b7ed029a899c..702b627aee0a 100644 --- a/features/system-report/src/main/java/org/opennms/systemreport/system/LsofReportPlugin.java +++ b/features/system-report/src/main/java/org/opennms/systemreport/system/LsofReportPlugin.java @@ -53,6 +53,8 @@ public boolean getOutputsFiles() { return true; } + @Override + public boolean isVisible() { return true; } @Override public Map getEntries() { final Map map = new TreeMap(); diff --git a/features/system-report/src/main/java/org/opennms/systemreport/system/ThreadReportPlugin.java b/features/system-report/src/main/java/org/opennms/systemreport/system/ThreadReportPlugin.java index 30a40bc3c6dc..8657b1d1301c 100644 --- a/features/system-report/src/main/java/org/opennms/systemreport/system/ThreadReportPlugin.java +++ b/features/system-report/src/main/java/org/opennms/systemreport/system/ThreadReportPlugin.java @@ -58,6 +58,9 @@ public boolean getOutputsFiles() { return true; } + @Override + public boolean isVisible() { return true; } + @Override public Map getEntries() { final Map map = new TreeMap(); diff --git a/features/system-report/src/main/java/org/opennms/systemreport/system/TopReportPlugin.java b/features/system-report/src/main/java/org/opennms/systemreport/system/TopReportPlugin.java index b08d20366fc3..5dc0815b46fa 100644 --- a/features/system-report/src/main/java/org/opennms/systemreport/system/TopReportPlugin.java +++ b/features/system-report/src/main/java/org/opennms/systemreport/system/TopReportPlugin.java @@ -52,6 +52,9 @@ public boolean getFullOutputOnly() { return true; } + @Override + public boolean isVisible() { return true; } + @Override public boolean getOutputsFiles() { return true; From be51c828c8fd814a8131c3cd3b3ae7e777ab7d80 Mon Sep 17 00:00:00 2001 From: mwajahatabbasi Date: Thu, 30 Jan 2025 17:18:00 +0500 Subject: [PATCH 17/17] NMS-16986 : Handel PR review changes. --- .../org/opennms/systemreport/system/OSReportPlugin.java | 6 ------ .../opennms/systemreport/system/SystemReportPluginIT.java | 1 - 2 files changed, 7 deletions(-) diff --git a/features/system-report/src/main/java/org/opennms/systemreport/system/OSReportPlugin.java b/features/system-report/src/main/java/org/opennms/systemreport/system/OSReportPlugin.java index bd0b62ebf3cc..712304427e60 100644 --- a/features/system-report/src/main/java/org/opennms/systemreport/system/OSReportPlugin.java +++ b/features/system-report/src/main/java/org/opennms/systemreport/system/OSReportPlugin.java @@ -27,14 +27,10 @@ import java.util.LinkedHashMap; import java.util.Map; import java.util.TreeMap; -import java.util.stream.Collectors; import org.opennms.core.resource.Vault; -import org.opennms.netmgt.dao.api.IpInterfaceDao; -import org.opennms.netmgt.model.OnmsIpInterface; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.opennms.systemreport.AbstractSystemReportPlugin; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.Resource; import javax.management.AttributeNotFoundException; import javax.management.InstanceNotFoundException; @@ -52,8 +48,6 @@ public class OSReportPlugin extends AbstractSystemReportPlugin { private static final String JMX_ATTR_AVAILABLE_PROCESSORS = "AvailableProcessors"; private static final String JMX_ATTR_FREE_PHYSICAL_MEMORY_SIZE = "FreePhysicalMemorySize"; private static final String JMX_ATTR_TOTAL_PHYSICAL_MEMORY_SIZE = "TotalPhysicalMemorySize"; - @Autowired - public IpInterfaceDao m_ipInterfaceDao; public OSReportPlugin() { if (m_oses.size() == 0) { diff --git a/features/system-report/src/test/java/org/opennms/systemreport/system/SystemReportPluginIT.java b/features/system-report/src/test/java/org/opennms/systemreport/system/SystemReportPluginIT.java index d2bb44ad4152..df24fc004cbc 100644 --- a/features/system-report/src/test/java/org/opennms/systemreport/system/SystemReportPluginIT.java +++ b/features/system-report/src/test/java/org/opennms/systemreport/system/SystemReportPluginIT.java @@ -91,7 +91,6 @@ public void testOpenNMSReportPlugin() { @Test public void testOSPlugin() { - ReflectionTestUtils.setField(m_osReportPlugin,"m_ipInterfaceDao",new MockIpInterfaceDao()); final Map entries = m_osReportPlugin.getEntries(); assertTrue(entries.containsKey("Architecture")); assertTrue(entries.containsKey("Name"));