Mercurial > hg > thermostat-ng > agent
changeset 2657:209c6fbeab9c
Get actual start time of running JVMs.
Reviewed-By: ebaron
Review-Thread: http://icedtea.classpath.org/pipermail/thermostat/2017-May/023193.html
author | Joshua Matsuoka <jmatsuok@redhat.com> |
---|---|
date | Tue, 23 May 2017 14:10:33 -0400 |
parents | 12b1a2662939 |
children | 4f1f13f48d0e |
files | system-backend/src/main/java/com/redhat/thermostat/backend/system/internal/JvmStatDataExtractor.java system-backend/src/main/java/com/redhat/thermostat/backend/system/internal/JvmStatHostListener.java system-backend/src/test/java/com/redhat/thermostat/backend/system/internal/JvmStatHostListenerTest.java |
diffstat | 3 files changed, 20 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/system-backend/src/main/java/com/redhat/thermostat/backend/system/internal/JvmStatDataExtractor.java Fri May 19 11:58:05 2017 +0200 +++ b/system-backend/src/main/java/com/redhat/thermostat/backend/system/internal/JvmStatDataExtractor.java Tue May 23 14:10:33 2017 -0400 @@ -98,5 +98,9 @@ return MonitoredVmUtil.jvmArgs(vm); } + public long getVmStartTime() throws MonitorException { + return (long) vm.findByName("sun.rt.vmInitDoneTime").getValue(); + } + }
--- a/system-backend/src/main/java/com/redhat/thermostat/backend/system/internal/JvmStatHostListener.java Fri May 19 11:58:05 2017 +0200 +++ b/system-backend/src/main/java/com/redhat/thermostat/backend/system/internal/JvmStatHostListener.java Tue May 23 14:10:33 2017 -0400 @@ -127,9 +127,8 @@ if (vm != null) { JvmStatDataExtractor extractor = new JvmStatDataExtractor(vm); String vmId = UUID.randomUUID().toString(); - long startTime = System.currentTimeMillis(); long stopTime = Long.MIN_VALUE; - VmInfo info = createVmInfo(vmId, vmPid, startTime, stopTime, extractor); + VmInfo info = createVmInfo(vmId, vmPid, stopTime, extractor); // Check blacklist if (!blacklist.isBlacklisted(info.getMainClass())) { @@ -146,14 +145,14 @@ } } - VmInfo createVmInfo(String vmId, Integer vmPid, long startTime, long stopTime, + VmInfo createVmInfo(String vmId, Integer vmPid, long stopTime, JvmStatDataExtractor extractor) throws MonitorException { Map<String, String> properties = new HashMap<String, String>(); Map<String, String> environment = InfoBuilderFactory.INSTANCE.createProcessEnvironmentBuilder().build(vmPid); // TODO actually figure out the loaded libraries. String[] loadedNativeLibraries = new String[0]; ProcessUserInfo userInfo = userInfoBuilder.build(vmPid); - VmInfo info = new VmInfo(writerId.getWriterID(), vmId, vmPid, startTime, stopTime, + VmInfo info = new VmInfo(writerId.getWriterID(), vmId, vmPid, extractor.getVmStartTime(), stopTime, extractor.getJavaVersion(), extractor.getJavaHome(), extractor.getMainClass(), extractor.getCommandLine(), extractor.getVmName(), extractor.getVmInfo(), extractor.getVmVersion(), extractor.getVmArguments(),
--- a/system-backend/src/test/java/com/redhat/thermostat/backend/system/internal/JvmStatHostListenerTest.java Fri May 19 11:58:05 2017 +0200 +++ b/system-backend/src/test/java/com/redhat/thermostat/backend/system/internal/JvmStatHostListenerTest.java Tue May 23 14:10:33 2017 -0400 @@ -40,6 +40,7 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; +import static org.mockito.AdditionalMatchers.not; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; @@ -69,6 +70,7 @@ import com.redhat.thermostat.storage.model.VmInfo; import sun.jvmstat.monitor.HostIdentifier; +import sun.jvmstat.monitor.Monitor; import sun.jvmstat.monitor.MonitorException; import sun.jvmstat.monitor.MonitoredHost; import sun.jvmstat.monitor.MonitoredVm; @@ -88,6 +90,7 @@ private static String INFO_VMVER = "90.01"; private static long INFO_VMUSERID = 2000; private static String INFO_VMUSERNAME = "User"; + private static final long INFO_STARTTIME = Long.MIN_VALUE; private JvmStatHostListener hostListener; private MonitoredHost host; @@ -116,19 +119,22 @@ monitoredVm1 = mock(MonitoredVm.class); monitoredVm2 = mock(MonitoredVm.class); StringMonitor monitor = mock(StringMonitor.class); + Monitor monitor2 = mock(Monitor.class); VmIdentifier vmId1 = new VmIdentifier("1"); VmIdentifier vmId2 = new VmIdentifier("2"); - + + when(monitor2.getValue()).thenReturn(100l); when(host.getHostIdentifier()).thenReturn(hostId); when(host.getMonitoredVm(eq(vmId1))).thenReturn(monitoredVm1); when(host.getMonitoredVm(eq(vmId2))).thenReturn(monitoredVm2); when(hostId.resolve(eq(vmId1))).thenReturn(vmId1); when(hostId.resolve(eq(vmId2))).thenReturn(vmId2); - when(monitoredVm1.findByName(any(String.class))).thenReturn(monitor); - when(monitoredVm2.findByName(any(String.class))).thenReturn(monitor); + when(monitoredVm1.findByName("sun.rt.vmInitDoneTime")).thenReturn(monitor2); + when(monitoredVm2.findByName("sun.rt.vmInitDoneTime")).thenReturn(monitor2); + when(monitoredVm1.findByName(not(eq("sun.rt.vmInitDoneTime")))).thenReturn(monitor); + when(monitoredVm2.findByName(not(eq("sun.rt.vmInitDoneTime")))).thenReturn(monitor); when(monitor.stringValue()).thenReturn("test"); when(monitor.getValue()).thenReturn("test"); - extractor = mock(JvmStatDataExtractor.class); when(extractor.getCommandLine()).thenReturn(INFO_CMDLINE); @@ -139,6 +145,7 @@ when(extractor.getVmInfo()).thenReturn(INFO_VMINFO); when(extractor.getVmName()).thenReturn(INFO_VMNAME); when(extractor.getVmVersion()).thenReturn(INFO_VMVER); + when(extractor.getVmStartTime()).thenReturn(INFO_STARTTIME); } @Test @@ -195,10 +202,9 @@ } @Test - public void testReusedPid() { + public void testReusedPid() throws MonitorException { final Set<Integer> started = new HashSet<>(); started.add(1); - // Start VM VmStatusChangeEvent event = mock(VmStatusChangeEvent.class); when(event.getMonitoredHost()).thenReturn(host); @@ -250,9 +256,8 @@ public void testCreateVmInfo() throws MonitorException { final String INFO_ID = "vmId"; final int INFO_PID = 1; - final long INFO_STARTTIME = Long.MIN_VALUE; final long INFO_STOPTIME = Long.MAX_VALUE; - VmInfo info = hostListener.createVmInfo(INFO_ID, INFO_PID, INFO_STARTTIME, INFO_STOPTIME, extractor); + VmInfo info = hostListener.createVmInfo(INFO_ID, INFO_PID, INFO_STOPTIME, extractor); assertEquals(INFO_PID, info.getVmPid()); assertEquals(INFO_STARTTIME, info.getStartTimeStamp());