/*
* Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package com.sun.tools.visualvm.modules.tracer.monitor;
import com.sun.tools.visualvm.application.Application;
import com.sun.tools.visualvm.application.jvm.Jvm;
import com.sun.tools.visualvm.application.jvm.JvmFactory;
import com.sun.tools.visualvm.application.jvm.MonitoredData;
import com.sun.tools.visualvm.modules.tracer.TracerPackage;
import com.sun.tools.visualvm.modules.tracer.TracerProbe;
import com.sun.tools.visualvm.modules.tracer.TracerProbeDescriptor;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import org.openide.util.ImageUtilities;
/**
*
* @author Jiri Sedlacek
*/
class MonitorPackage extends TracerPackage<Application> implements MonitorProbe.MonitoredDataResolver {
static final Icon ICON = new ImageIcon(ImageUtilities.loadImage(
"com/sun/tools/visualvm/modules/tracer/monitor/resources/monitor.png", true)); // NOI18N
private static final String NAME = "Basic JVM Metrics";
private static final String DESCR = "Provides the same basic JVM metrics as the Monitor tab.";
private static final int POSITION = 50;
private TracerProbeDescriptor cpuProbeDescriptor;
private TracerProbeDescriptor heapProbeDescriptor;
private TracerProbeDescriptor permgenProbeDescriptor;
private TracerProbeDescriptor classesProbeDescriptor;
private TracerProbeDescriptor threadsProbeDescriptor;
private MonitorProbe cpuProbe;
private MonitorProbe heapProbe;
private MonitorProbe permgenProbe;
private MonitorProbe classesProbe;
private MonitorProbe threadsProbe;
private final Application application;
private final Jvm jvm;
private long lastTimestamp = -1;
private MonitoredData lastMonitoredData;
MonitorPackage(Application application) {
super(NAME, DESCR, ICON, POSITION);
this.application = application;
this.jvm = JvmFactory.getJVMFor(application);
}
public TracerProbeDescriptor[] getProbeDescriptors() {
boolean available = jvm != null && jvm.isMonitoringSupported();
cpuProbeDescriptor = CpuMonitorProbe.createDescriptor(ICON, available, jvm);
heapProbeDescriptor = HeapMonitorProbe.createDescriptor(ICON, available, jvm);
permgenProbeDescriptor = PermgenMonitorProbe.createDescriptor(ICON, available, jvm);
classesProbeDescriptor = ClassesMonitorProbe.createDescriptor(ICON, available, jvm);
threadsProbeDescriptor = ThreadsMonitorProbe.createDescriptor(ICON, available, jvm);
return new TracerProbeDescriptor[] { cpuProbeDescriptor,
heapProbeDescriptor,
permgenProbeDescriptor,
classesProbeDescriptor,
threadsProbeDescriptor};
}
public TracerProbe<Application> getProbe(TracerProbeDescriptor descriptor) {
if (descriptor == cpuProbeDescriptor) {
if (cpuProbe == null)
cpuProbe = new CpuMonitorProbe(this, application, jvm);
return cpuProbe;
} else if (descriptor == heapProbeDescriptor) {
if (heapProbe == null)
heapProbe = new HeapMonitorProbe(this);
return heapProbe;
} else if (descriptor == permgenProbeDescriptor) {
if (permgenProbe == null)
permgenProbe = new PermgenMonitorProbe(this);
return permgenProbe;
} else if (descriptor == classesProbeDescriptor) {
if (classesProbe == null)
classesProbe = new ClassesMonitorProbe(this);
return classesProbe;
} else if (descriptor == threadsProbeDescriptor) {
if (threadsProbe == null)
threadsProbe = new ThreadsMonitorProbe(this);
return threadsProbe;
} else {
return null;
}
}
public MonitoredData getMonitoredData(long timestamp) {
// TODO: validity may be extended to some timeslot (~100ms)
if (lastTimestamp != timestamp) {
lastMonitoredData = jvm.getMonitoredData();
lastTimestamp = timestamp;
}
return lastMonitoredData;
}
}