# HG changeset patch # User Miloslav Zezulka # Date 1504528793 -7200 # Node ID f902a9f69e4b3a07ba045a8bfa836aed5c9953bd # Parent c21830a1925fb01e6fe351c18cef48a73a207b45 Add VmClassloaderInfoExtractor for accessing (un)loaded class count Reviewed-by: jerboaa, stooke, neugens Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2017-August/024516.html diff -r c21830a1925f -r f902a9f69e4b plugins/jvm-overview/agent/src/main/java/com/redhat/thermostat/jvm/overview/agent/internal/model/VmClassloaderInfoExtractor.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/plugins/jvm-overview/agent/src/main/java/com/redhat/thermostat/jvm/overview/agent/internal/model/VmClassloaderInfoExtractor.java Mon Sep 04 14:39:53 2017 +0200 @@ -0,0 +1,57 @@ +/* + * Copyright 2012-2017 Red Hat, Inc. + * + * This file is part of Thermostat. + * + * Thermostat is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published + * by the Free Software Foundation; either version 2, or (at your + * option) any later version. + * + * Thermostat is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Thermostat; see the file COPYING. If not see + * . + * + * Linking this code with other modules is making a combined work + * based on this code. Thus, the terms and conditions of the GNU + * General Public License cover the whole combination. + * + * As a special exception, the copyright holders of this code give + * you permission to link this code with independent modules to + * produce an executable, regardless of the license terms of these + * independent modules, and to copy and distribute the resulting + * executable under terms of your choice, provided that you also + * meet, for each linked independent module, the terms and conditions + * of the license of that module. An independent module is a module + * which is not derived from or based on this code. If you modify + * this code, you may extend this exception to your version of the + * library, but you are not obligated to do so. If you do not wish + * to do so, delete this exception statement from your version. + */ + +package com.redhat.thermostat.jvm.overview.agent.internal.model; + +import com.redhat.thermostat.jvm.overview.agent.VmUpdate; +import com.redhat.thermostat.jvm.overview.agent.VmUpdateException; + +class VmClassloaderInfoExtractor { + + final VmUpdate vmUpdate; + + VmClassloaderInfoExtractor(VmUpdate update) { + this.vmUpdate = update; + } + + public Long getLoadedClassesCount() throws VmUpdateException { + return vmUpdate.getPerformanceCounterLong("java.cls.loadedClasses"); + } + + public Long getUnloadedClassesCount() throws VmUpdateException { + return vmUpdate.getPerformanceCounterLong("java.cls.unloadedClasses"); + } +} diff -r c21830a1925f -r f902a9f69e4b plugins/jvm-overview/agent/src/test/java/com/redhat/thermostat/jvm/overview/agent/internal/model/VmClassloaderInfoExtractorTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/plugins/jvm-overview/agent/src/test/java/com/redhat/thermostat/jvm/overview/agent/internal/model/VmClassloaderInfoExtractorTest.java Mon Sep 04 14:39:53 2017 +0200 @@ -0,0 +1,69 @@ +/* + * Copyright 2012-2017 Red Hat, Inc. + * + * This file is part of Thermostat. + * + * Thermostat is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published + * by the Free Software Foundation; either version 2, or (at your + * option) any later version. + * + * Thermostat is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Thermostat; see the file COPYING. If not see + * . + * + * Linking this code with other modules is making a combined work + * based on this code. Thus, the terms and conditions of the GNU + * General Public License cover the whole combination. + * + * As a special exception, the copyright holders of this code give + * you permission to link this code with independent modules to + * produce an executable, regardless of the license terms of these + * independent modules, and to copy and distribute the resulting + * executable under terms of your choice, provided that you also + * meet, for each linked independent module, the terms and conditions + * of the license of that module. An independent module is a module + * which is not derived from or based on this code. If you modify + * this code, you may extend this exception to your version of the + * library, but you are not obligated to do so. If you do not wish + * to do so, delete this exception statement from your version. + */ + +package com.redhat.thermostat.jvm.overview.agent.internal.model; + +import com.redhat.thermostat.jvm.overview.agent.VmUpdate; +import com.redhat.thermostat.jvm.overview.agent.VmUpdateException; +import org.junit.Test; +import static org.junit.Assert.*; +import org.junit.Before; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class VmClassloaderInfoExtractorTest { + + private VmClassloaderInfoExtractor extractor; + private VmUpdate update; + + @Before + public void setup() { + update = mock(VmUpdate.class); + extractor = new VmClassloaderInfoExtractor(update); + } + + @Test + public void testClassesCount() throws VmUpdateException { + final String MONITOR_NAME = "java.cls.loadedClasses"; + final Long MONITOR_VALUE = 300l; + + when(update.getPerformanceCounterLong(eq(MONITOR_NAME))).thenReturn(MONITOR_VALUE); + + Long returned = extractor.getLoadedClassesCount(); + assertEquals(MONITOR_VALUE, returned); + } +}