diff options
author | Thomas Becker | 2012-11-21 12:38:31 +0000 |
---|---|---|
committer | Thomas Becker | 2012-11-21 12:38:31 +0000 |
commit | 273c166b215b2cb8b2c4743142abdddd41341bb8 (patch) | |
tree | f1b05e37cd1d6e06e1ba2c69f945244aa277cdc3 /jetty-monitor | |
parent | ac43fd4c63b429d4736ca654cf84ac53deef9dc1 (diff) | |
download | org.eclipse.jetty.project-273c166b215b2cb8b2c4743142abdddd41341bb8.tar.gz org.eclipse.jetty.project-273c166b215b2cb8b2c4743142abdddd41341bb8.tar.xz org.eclipse.jetty.project-273c166b215b2cb8b2c4743142abdddd41341bb8.zip |
Delete java-monitor.
Diffstat (limited to 'jetty-monitor')
34 files changed, 0 insertions, 5118 deletions
diff --git a/jetty-monitor/README.txt b/jetty-monitor/README.txt deleted file mode 100644 index 72c7da114f..0000000000 --- a/jetty-monitor/README.txt +++ /dev/null @@ -1,13 +0,0 @@ -The ThreadMonitor is distributed as part of the jetty-monitor module. - -In order to start ThreadMonitor when server starts up, the following command line should be used. - - java -jar start.jar OPTIONS=monitor jetty-monitor.xml - -To run ThreadMonitor on a Jetty installation that doesn't include jetty-monitor module, the jetty-monitor-[version].jar file needs to be copied into ${jetty.home}/lib/ext directory, and jetty-monitor.xml configuration file needs to be copied into ${jetty.home}/etc directory. Subsequently, the following command line should be used. - - java -jar start.jar etc/jetty-monitor.xml - -If running Jetty on Java VM version 1.5, the -Dcom.sun.management.jmxremote option should be added to the command lines above in order to enable the JMX agent. - -In order to log CPU utilization for threads that are above specified threshold, you need to follow instructions inside jetty-monitor.xml configuration file.
\ No newline at end of file diff --git a/jetty-monitor/pom.xml b/jetty-monitor/pom.xml deleted file mode 100644 index 7b5ac23570..0000000000 --- a/jetty-monitor/pom.xml +++ /dev/null @@ -1,139 +0,0 @@ -<!-- -// ======================================================================== -// Copyright (c) Webtide LLC -// -// All rights reserved. This program and the accompanying materials -// are made available under the terms of the Eclipse Public License v1.0 -// and Apache License v2.0 which accompanies this distribution. -// -// The Eclipse Public License is available at -// http://www.eclipse.org/legal/epl-v10.html -// -// The Apache License v2.0 is available at -// http://www.apache.org/licenses/LICENSE-2.0.txt -// -// You may elect to redistribute this code under either of these licenses. -// ======================================================================== ---> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> - <parent> - <groupId>org.eclipse.jetty</groupId> - <artifactId>jetty-project</artifactId> - <version>9.0.0-SNAPSHOT</version> - </parent> - <modelVersion>4.0.0</modelVersion> - <artifactId>jetty-monitor</artifactId> - <name>Jetty :: Monitoring</name> - <description>Performance monitoring artifact for jetty.</description> - <properties> - <bundle-symbolic-name>${project.groupId}.monitor</bundle-symbolic-name> - </properties> - <build> - <plugins> - <plugin> - <groupId>org.apache.felix</groupId> - <artifactId>maven-bundle-plugin</artifactId> - <extensions>true</extensions> - <executions> - <execution> - <goals> - <goal>manifest</goal> - </goals> - <configuration> - <instructions> - <Import-Package>javax.management.*,*</Import-Package> - </instructions> - </configuration> - </execution> - </executions> - </plugin> - <plugin> - <!-- - Required for OSGI - --> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-jar-plugin</artifactId> - <configuration> - <archive> - <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile> - </archive> - </configuration> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-assembly-plugin</artifactId> - <executions> - <execution> - <phase>package</phase> - <goals> - <goal>single</goal> - </goals> - <configuration> - <descriptorRefs> - <descriptorRef>config</descriptorRef> - </descriptorRefs> - </configuration> - </execution> - </executions> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-surefire-plugin</artifactId> - <configuration> - <forkMode>always</forkMode> - </configuration> - </plugin> - <plugin> - <groupId>org.codehaus.mojo</groupId> - <artifactId>findbugs-maven-plugin</artifactId> - <configuration> - <onlyAnalyze>org.eclipse.jetty.monitor.*</onlyAnalyze> - </configuration> - </plugin> - </plugins> - </build> - <dependencies> - <dependency> - <groupId>org.eclipse.jetty</groupId> - <artifactId>jetty-util</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>org.eclipse.jetty</groupId> - <artifactId>jetty-io</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>org.eclipse.jetty</groupId> - <artifactId>jetty-http</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>org.eclipse.jetty</groupId> - <artifactId>jetty-xml</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>org.eclipse.jetty</groupId> - <artifactId>jetty-client</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>org.eclipse.jetty</groupId> - <artifactId>jetty-jmx</artifactId> - <version>${project.version}</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.eclipse.jetty</groupId> - <artifactId>jetty-server</artifactId> - <version>${project.version}</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.eclipse.jetty.toolchain</groupId> - <artifactId>jetty-test-helper</artifactId> - <scope>test</scope> - </dependency> - </dependencies> -</project> diff --git a/jetty-monitor/src/main/config/etc/jetty-monitor.xml b/jetty-monitor/src/main/config/etc/jetty-monitor.xml deleted file mode 100644 index bd461c4e96..0000000000 --- a/jetty-monitor/src/main/config/etc/jetty-monitor.xml +++ /dev/null @@ -1,30 +0,0 @@ -<?xml version="1.0"?> -<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd"> - -<Configure id="Server" class="org.eclipse.jetty.server.Server"> - <!-- Create Thread Monitor, and add to the Server as a lifecycle --> - <Call name="addBean"> - <Arg> - <New class="org.eclipse.jetty.monitor.ThreadMonitor"> - <Set name="scanInterval">2000</Set> - <Set name="busyThreshold">90</Set> - <Set name="stackDepth">5</Set> - <Set name="trailLength">2</Set> - <!-- To enable logging CPU utilization for threads above specified threshold, --> - <!-- uncomment the following lines, changing log interval (in milliseconds) --> - <!-- and log threshold (in percent) as desired. --> - <!-- - <Set name="logInterval">10000</Set> - <Set name="logThreshold">65</Set> - --> - - <!-- To enable detail dump of the server whenever a thread is detected as spinning, --> - <!-- uncomment the following lines. --> - <!-- - <Set name="dumpable"><Ref id="Server"/></Set> - --> - </New> - </Arg> - </Call> -</Configure> - diff --git a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/JMXMonitor.java b/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/JMXMonitor.java deleted file mode 100644 index 86ab62fa83..0000000000 --- a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/JMXMonitor.java +++ /dev/null @@ -1,194 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2012 Mort Bay Consulting Pty. Ltd. -// ------------------------------------------------------------------------ -// All rights reserved. This program and the accompanying materials -// are made available under the terms of the Eclipse Public License v1.0 -// and Apache License v2.0 which accompanies this distribution. -// -// The Eclipse Public License is available at -// http://www.eclipse.org/legal/epl-v10.html -// -// The Apache License v2.0 is available at -// http://www.opensource.org/licenses/apache2.0.php -// -// You may elect to redistribute this code under either of these licenses. -// ======================================================================== -// - -package org.eclipse.jetty.monitor; - -import java.io.IOException; -import java.util.HashSet; -import java.util.Set; - -import javax.management.MBeanServerConnection; - -import org.eclipse.jetty.monitor.jmx.MonitorAction; -import org.eclipse.jetty.monitor.jmx.MonitorTask; -import org.eclipse.jetty.monitor.jmx.ServiceConnection; -import org.eclipse.jetty.xml.XmlConfiguration; - -/* ------------------------------------------------------------ */ -/** - * JMXMonitor - * - * Performs monitoring of the values of the attributes of MBeans - * and executes specified actions as well as sends notifications - * of the specified events that have occurred. - */ -public class JMXMonitor -{ - private static JMXMonitor __monitor = new JMXMonitor(); - - private String _serverUrl; - private ServiceConnection _serviceConnection; - - private Set<MonitorAction> _actions = new HashSet<MonitorAction>(); - - /* ------------------------------------------------------------ */ - /** - * Constructs a JMXMonitor instance. Used for XML Configuration. - * - * !! DO NOT INSTANTIATE EXPLICITLY !! - */ - public JMXMonitor() {} - - /* ------------------------------------------------------------ */ - /** - * Adds monitor actions to the monitor - * - * @param actions monitor actions to add - * @return true if successful - */ - public boolean addActions(MonitorAction... actions) - { - return getInstance().add(actions); - } - - /* ------------------------------------------------------------ */ - /** - * Removes monitor actions from the monitor - * - * @param actions monitor actions to remove - * @return true if successful - */ - public boolean removeActions(MonitorAction... actions) - { - return getInstance().remove(actions); - } - - /* ------------------------------------------------------------ */ - /** - * Sets the JMX server URL - * - * @param url URL of the JMX server - */ - public void setUrl(String url) - { - getInstance().set(url); - } - - public MBeanServerConnection getConnection() - throws IOException - { - return getInstance().get(); - } - - public static JMXMonitor getInstance() - { - return __monitor; - } - - public static boolean addMonitorActions(MonitorAction... actions) - { - return getInstance().add(actions); - } - - public static boolean removeMonitorActions(MonitorAction... actions) - { - return getInstance().remove(actions); - } - - public static void setServiceUrl(String url) - { - getInstance().set(url); - } - - /* ------------------------------------------------------------ */ - /** - * Retrieves a connection to JMX service - * - * @return server connection - * @throws IOException - */ - public static MBeanServerConnection getServiceConnection() - throws IOException - { - return getInstance().getConnection(); - } - - public static void main(final String args[]) throws Exception - { - XmlConfiguration.main(args); - } - - private synchronized boolean add(MonitorAction... actions) - { - boolean result = true; - - for (MonitorAction action : actions) - { - if (!_actions.add(action)) - { - result = false; - } - else - { - MonitorTask.schedule(action); - } - } - - return result; - } - - private synchronized boolean remove(MonitorAction... actions) - { - boolean result = true; - - for (MonitorAction action : actions) - { - if (!_actions.remove(action)) - { - result = false; - } - - MonitorTask.cancel(action); - } - - return result; - } - - private synchronized void set(String url) - { - _serverUrl = url; - - if (_serviceConnection != null) - { - _serviceConnection.disconnect(); - _serviceConnection = null; - } - } - - private synchronized MBeanServerConnection get() - throws IOException - { - if (_serviceConnection == null) - { - _serviceConnection = new ServiceConnection(_serverUrl); - _serviceConnection.connect(); - } - - return _serviceConnection.getConnection(); - } -} diff --git a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/ThreadMonitor.java b/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/ThreadMonitor.java deleted file mode 100644 index c552b6bde1..0000000000 --- a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/ThreadMonitor.java +++ /dev/null @@ -1,603 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2012 Mort Bay Consulting Pty. Ltd. -// ------------------------------------------------------------------------ -// All rights reserved. This program and the accompanying materials -// are made available under the terms of the Eclipse Public License v1.0 -// and Apache License v2.0 which accompanies this distribution. -// -// The Eclipse Public License is available at -// http://www.eclipse.org/legal/epl-v10.html -// -// The Apache License v2.0 is available at -// http://www.opensource.org/licenses/apache2.0.php -// -// You may elect to redistribute this code under either of these licenses. -// ======================================================================== -// - - -package org.eclipse.jetty.monitor; - -import java.lang.management.ManagementFactory; -import java.lang.management.ThreadMXBean; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.eclipse.jetty.monitor.thread.ThreadMonitorException; -import org.eclipse.jetty.monitor.thread.ThreadMonitorInfo; -import org.eclipse.jetty.util.annotation.ManagedAttribute; -import org.eclipse.jetty.util.annotation.ManagedObject; -import org.eclipse.jetty.util.component.AbstractLifeCycle; -import org.eclipse.jetty.util.component.Dumpable; -import org.eclipse.jetty.util.log.Log; -import org.eclipse.jetty.util.log.Logger; -import org.eclipse.jetty.util.log.Logger; - - -/* ------------------------------------------------------------ */ -@ManagedObject("detect and report spinning and deadlocked threads") -public class ThreadMonitor extends AbstractLifeCycle implements Runnable -{ - private static final Logger LOG = Log.getLogger(ThreadMonitor.class); - - private int _scanInterval; - private int _logInterval; - private int _busyThreshold; - private int _logThreshold; - private int _stackDepth; - private int _trailLength; - - private ThreadMXBean _threadBean; - - private Thread _runner; - private Logger _logger; - private volatile boolean _done = true; - private Dumpable _dumpable; - - private Map<Long,ThreadMonitorInfo> _monitorInfo; - - /* ------------------------------------------------------------ */ - /** - * Instantiates a new thread monitor. - * - * @throws Exception - */ - public ThreadMonitor() throws Exception - { - this(5000); - } - - /* ------------------------------------------------------------ */ - /** - * Instantiates a new thread monitor. - * - * @param intervalMs scan interval - * @throws Exception - */ - public ThreadMonitor(int intervalMs) throws Exception - { - this(intervalMs, 95); - } - - /* ------------------------------------------------------------ */ - /** - * Instantiates a new thread monitor. - * - * @param intervalMs scan interval - * @param threshold busy threshold - * @throws Exception - */ - public ThreadMonitor(int intervalMs, int threshold) throws Exception - { - this(intervalMs, threshold, 3); - } - - /* ------------------------------------------------------------ */ - /** - * Instantiates a new thread monitor. - * - * @param intervalMs scan interval - * @param threshold busy threshold - * @param depth stack compare depth - * @throws Exception - */ - public ThreadMonitor(int intervalMs, int threshold, int depth) throws Exception - { - this(intervalMs, threshold, depth, 3); - } - - /* ------------------------------------------------------------ */ - /** - * Instantiates a new thread monitor. - * - * @param intervalMs scan interval - * @param threshold busy threshold - * @param depth stack compare depth - * @param trail length of stack trail - * @throws Exception - */ - public ThreadMonitor(int intervalMs, int threshold, int depth, int trail) throws Exception - { - _scanInterval = intervalMs; - _busyThreshold = threshold; - _stackDepth = depth; - _trailLength = trail; - - _logger = Log.getLogger(ThreadMonitor.class.getName()); - _monitorInfo = new HashMap<Long, ThreadMonitorInfo>(); - - init(); - } - - /* ------------------------------------------------------------ */ - /** - * Gets the scan interval. - * - * @return the scan interval - */ - @ManagedAttribute("scan interval") - public int getScanInterval() - { - return _scanInterval; - } - - /* ------------------------------------------------------------ */ - /** - * Sets the scan interval. - * - * @param ms the new scan interval - */ - public void setScanInterval(int ms) - { - _scanInterval = ms; - } - - /* ------------------------------------------------------------ */ - /** - * Gets the log interval. - * - * @return the log interval - */ - @ManagedAttribute("log interval") - public int getLogInterval() - { - return _logInterval; - } - - /* ------------------------------------------------------------ */ - /** - * Sets the log interval. - * - * @param ms the new log interval - */ - public void setLogInterval(int ms) - { - _logInterval = ms; - } - - /* ------------------------------------------------------------ */ - /** - * Gets the busy threshold. - * - * @return the busy threshold - */ - @ManagedAttribute("busy threshold") - public int getBusyThreshold() - { - return _busyThreshold; - } - - /* ------------------------------------------------------------ */ - /** - * Sets the busy threshold. - * - * @param percent the new busy threshold - */ - public void setBusyThreshold(int percent) - { - _busyThreshold = percent; - } - - /* ------------------------------------------------------------ */ - /** - * Gets the log threshold. - * - * @return the log threshold - */ - @ManagedAttribute("log threshold") - public int getLogThreshold() - { - return _logThreshold; - } - - /* ------------------------------------------------------------ */ - /** - * Sets the log threshold. - * - * @param percent the new log threshold - */ - public void setLogThreshold(int percent) - { - _logThreshold = percent; - } - - /* ------------------------------------------------------------ */ - /** - * Gets the stack depth. - * - * @return the stack depth - */ - @ManagedAttribute("stack depth") - public int getStackDepth() - { - return _stackDepth; - } - - /* ------------------------------------------------------------ */ - /** - * Sets the stack depth. - * - * @param stackDepth the new stack depth - */ - public void setStackDepth(int stackDepth) - { - _stackDepth = stackDepth; - } - - /* ------------------------------------------------------------ */ - /** - * Sets the stack trace trail length. - * - * @param trailLength the new trail length - */ - @ManagedAttribute("trail length") - public void setTrailLength(int trailLength) - { - _trailLength = trailLength; - } - - /* ------------------------------------------------------------ */ - /** - * Gets the stack trace trail length. - * - * @return the trail length - */ - public int getTrailLength() - { - return _trailLength; - } - - /* ------------------------------------------------------------ */ - /** - * Enable logging of CPU usage. - * - * @param frequencyMs the logging frequency - * @param thresholdPercent the logging threshold - */ - public void logCpuUsage(int frequencyMs, int thresholdPercent) - { - setLogInterval(frequencyMs); - setLogThreshold(thresholdPercent); - } - - /* ------------------------------------------------------------ */ - /** - * @return A {@link Dumpable} that is dumped whenever spinning threads are detected - */ - public Dumpable getDumpable() - { - return _dumpable; - } - - /* ------------------------------------------------------------ */ - /** - * @param dumpable A {@link Dumpable} that is dumped whenever spinning threads are detected - */ - public void setDumpable(Dumpable dumpable) - { - _dumpable = dumpable; - } - - /* ------------------------------------------------------------ */ - /** - * @see org.eclipse.jetty.util.component.AbstractLifeCycle#doStart() - */ - public void doStart() - { - _done = false; - - _runner = new Thread(this); - _runner.setDaemon(true); - _runner.start(); - - LOG.info("Thread Monitor started successfully"); - } - - /* ------------------------------------------------------------ */ - /** - * @see org.eclipse.jetty.util.component.AbstractLifeCycle#doStop() - */ - public void doStop() - { - if (_runner != null) - { - _done = true; - try - { - _runner.join(); - } - catch (InterruptedException ex) {} - } - } - - /* ------------------------------------------------------------ */ - /** - * Retrieve all avaliable thread ids - * - * @return array of thread ids - */ - protected long[] getAllThreadIds() - { - return _threadBean.getAllThreadIds(); - } - - /* ------------------------------------------------------------ */ - /** - * Retrieve the cpu time for specified thread. - * - * @param id thread id - * @return cpu time of the thread - */ - protected long getThreadCpuTime(long id) - { - return _threadBean.getThreadCpuTime(id); - } - - /* ------------------------------------------------------------ */ - /** - * Initialize JMX objects. - */ - protected void init() - { - _threadBean = ManagementFactory.getThreadMXBean(); - if (_threadBean.isThreadCpuTimeSupported()) - { - _threadBean.setThreadCpuTimeEnabled(true); - } - } - - /* ------------------------------------------------------------ */ - /** - * @see java.lang.Runnable#run() - */ - public void run() - { - // Initialize repeat flag - boolean repeat = false; - boolean scanNow, logNow; - - // Set next scan time and log time - long nextScanTime = System.currentTimeMillis(); - long nextLogTime = nextScanTime + _logInterval; - - while (!_done) - { - long currTime = System.currentTimeMillis(); - scanNow = (currTime > nextScanTime); - logNow = (_logInterval > 0 && currTime > nextLogTime); - if (repeat || scanNow || logNow) - { - repeat = collectThreadInfo(); - logThreadInfo(logNow); - - if (scanNow) - { - nextScanTime = System.currentTimeMillis() + _scanInterval; - } - if (logNow) - { - nextLogTime = System.currentTimeMillis() + _logInterval; - } - } - - // Sleep only if not going to repeat scanning immediately - if (!repeat) - { - try - { - Thread.sleep(100); - } - catch (InterruptedException ex) - { - LOG.ignore(ex); - } - } - } - - } - - /* ------------------------------------------------------------ */ - /** - * Collect thread info. - */ - private boolean collectThreadInfo() - { - boolean repeat = false; - try - { - // Retrieve stack traces for all threads at once as it - // was proven to be an order of magnitude faster when - // retrieving a single thread stack trace. - Map<Thread,StackTraceElement[]> all = Thread.getAllStackTraces(); - - for (Map.Entry<Thread,StackTraceElement[]> entry : all.entrySet()) - { - Thread thread = entry.getKey(); - long threadId = thread.getId(); - - // Skip our own runner thread - if (threadId == _runner.getId()) - { - continue; - } - - ThreadMonitorInfo currMonitorInfo = _monitorInfo.get(Long.valueOf(threadId)); - if (currMonitorInfo == null) - { - // Create thread info object for a new thread - currMonitorInfo = new ThreadMonitorInfo(thread); - currMonitorInfo.setStackTrace(entry.getValue()); - currMonitorInfo.setCpuTime(getThreadCpuTime(threadId)); - currMonitorInfo.setSampleTime(System.nanoTime()); - _monitorInfo.put(Long.valueOf(threadId), currMonitorInfo); - } - else - { - // Update the existing thread info object - currMonitorInfo.setStackTrace(entry.getValue()); - currMonitorInfo.setCpuTime(getThreadCpuTime(threadId)); - currMonitorInfo.setSampleTime(System.nanoTime()); - - // Stack trace count holds logging state - int count = currMonitorInfo.getTraceCount(); - if (count >= 0 && currMonitorInfo.isSpinning()) - { - // Thread was spinning and was logged before - if (count < _trailLength) - { - // Log another stack trace - currMonitorInfo.setTraceCount(count+1); - repeat = true; - continue; - } - - // Reset spin flag and trace count - currMonitorInfo.setSpinning(false); - currMonitorInfo.setTraceCount(-1); - } - if (currMonitorInfo.getCpuUtilization() > _busyThreshold) - { - // Thread is busy - StackTraceElement[] lastStackTrace = currMonitorInfo.getStackTrace(); - - if (lastStackTrace != null - && matchStackTraces(lastStackTrace, entry.getValue())) - { - // Thread is spinning - currMonitorInfo.setSpinning(true); - if (count < 0) - { - // Enable logging of spin status and stack traces - // only if the incoming trace count is negative - // that indicates a new scan for this thread - currMonitorInfo.setTraceCount(0); - repeat = (_trailLength > 0); - } - } - } - } - } - } - catch (Exception ex) - { - LOG.debug(ex); - } - return repeat; - } - - /* ------------------------------------------------------------ */ - protected void logThreadInfo(boolean logAll) - { - if (_monitorInfo.size() > 0) - { - // Select thread objects for all live threads - long[] running = getAllThreadIds(); - List<ThreadMonitorInfo> all = new ArrayList<ThreadMonitorInfo>(); - for (int idx=0; idx<running.length; idx++) - { - ThreadMonitorInfo info = _monitorInfo.get(running[idx]); - if (info != null) - { - all.add(info); - } - } - - // Sort selected thread objects by their CPU utilization - Collections.sort(all, new Comparator<ThreadMonitorInfo>() - { - /* ------------------------------------------------------------ */ - public int compare(ThreadMonitorInfo info1, ThreadMonitorInfo info2) - { - return (int)Math.signum(info2.getCpuUtilization()-info1.getCpuUtilization()); - } - }); - - String format = "Thread '%2$s'[%3$s,id:%1$d,cpu:%4$.2f%%]%5$s"; - - // Log thread information for threads that exceed logging threshold - // or log spinning threads if their trace count is zero - boolean spinning=false; - for (ThreadMonitorInfo info : all) - { - if (logAll && info.getCpuUtilization() > _logThreshold - || info.isSpinning() && info.getTraceCount() == 0) - { - String message = String.format(format, - info.getThreadId(), info.getThreadName(), - info.getThreadState(), info.getCpuUtilization(), - info.isSpinning() ? " SPINNING" : ""); - _logger.info(message); - spinning=true; - } - } - - // Dump info - if (spinning && _dumpable!=null) - { - System.err.println(_dumpable.dump()); - } - - // Log stack traces for spinning threads with positive trace count - for (ThreadMonitorInfo info : all) - { - if (info.isSpinning() && info.getTraceCount() >= 0) - { - String message = String.format(format, - info.getThreadId(), info.getThreadName(), - info.getThreadState(), info.getCpuUtilization(), - " STACK TRACE"); - _logger.warn(new ThreadMonitorException(message, info.getStackTrace())); - } - } - } - } - - /* ------------------------------------------------------------ */ - /** - * Match stack traces. - * - * @param lastStackTrace last stack trace - * @param stackTrace current stack trace - * @return true, if successful - */ - private boolean matchStackTraces(StackTraceElement[] lastStackTrace, StackTraceElement[] stackTrace) - { - boolean match = true; - int count = Math.min(_stackDepth, Math.min(lastStackTrace.length, stackTrace.length)); - - for (int idx=0; idx < count; idx++) - { - if (!stackTrace[idx].equals(lastStackTrace[idx])) - { - match = false; - break; - } - } - return match; - } -} diff --git a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/integration/JavaMonitorAction.java b/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/integration/JavaMonitorAction.java deleted file mode 100644 index 9b557f12e5..0000000000 --- a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/integration/JavaMonitorAction.java +++ /dev/null @@ -1,401 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2012 Mort Bay Consulting Pty. Ltd. -// ------------------------------------------------------------------------ -// All rights reserved. This program and the accompanying materials -// are made available under the terms of the Eclipse Public License v1.0 -// and Apache License v2.0 which accompanies this distribution. -// -// The Eclipse Public License is available at -// http://www.eclipse.org/legal/epl-v10.html -// -// The Apache License v2.0 is available at -// http://www.opensource.org/licenses/apache2.0.php -// -// You may elect to redistribute this code under either of these licenses. -// ======================================================================== -// - -package org.eclipse.jetty.monitor.integration; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.net.Socket; -import java.net.URL; -import java.nio.ByteBuffer; -import java.util.Collection; -import java.util.Map; -import java.util.Properties; -import java.util.Set; -import javax.management.MBeanServerConnection; -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; - -import org.eclipse.jetty.client.HttpClient; -import org.eclipse.jetty.client.api.ContentResponse; -import org.eclipse.jetty.client.util.ByteBufferContentProvider; -import org.eclipse.jetty.http.HttpStatus; -import org.eclipse.jetty.monitor.JMXMonitor; -import org.eclipse.jetty.monitor.jmx.EventNotifier; -import org.eclipse.jetty.monitor.jmx.EventState; -import org.eclipse.jetty.monitor.jmx.EventState.TriggerState; -import org.eclipse.jetty.monitor.jmx.EventTrigger; -import org.eclipse.jetty.monitor.jmx.MonitorAction; -import org.eclipse.jetty.monitor.triggers.AggregateEventTrigger; -import org.eclipse.jetty.util.BufferUtil; -import org.eclipse.jetty.util.log.Log; -import org.eclipse.jetty.util.log.Logger; - -import static java.lang.Integer.parseInt; -import static java.lang.System.getProperty; - - -/* ------------------------------------------------------------ */ -/** - */ -public class JavaMonitorAction extends MonitorAction -{ - private static final Logger LOG = Log.getLogger(JavaMonitorAction.class); - - private final HttpClient _client; - - private final String _url; - private final String _uuid; - private final String _appid; - - private String _srvip; - private String _session; - - /* ------------------------------------------------------------ */ - /** - * @param notifier the event notifier - * @param pollInterval the poll interval - * @throws Exception - * @throws MalformedObjectNameException - */ - public JavaMonitorAction(EventNotifier notifier, String url, String uuid, String appid, long pollInterval) - throws Exception - { - super(new AggregateEventTrigger(),notifier,pollInterval); - - _url = url; - _uuid = uuid; - _appid = appid; - - _client = new HttpClient(); - _client.setConnectTimeout(2000); - _client.setIdleTimeout(30000); - - try - { - _client.start(); - _srvip = getServerIP(); - } - catch (Exception ex) - { - LOG.debug(ex); - } - - sendData(new Properties()); - } - - /* ------------------------------------------------------------ */ - /** - * @see org.eclipse.jetty.monitor.jmx.MonitorAction#execute(org.eclipse.jetty.monitor.jmx.EventTrigger, org.eclipse.jetty.monitor.jmx.EventState, long) - */ - @Override - public void execute(EventTrigger trigger, EventState<?> state, long timestamp) - { - exec(state); - } - - /* ------------------------------------------------------------ */ - /** - * @param state the event state - * - */ - private <T> void exec(EventState<T> state) - { - Collection<TriggerState<T>> trs = state.values(); - - Properties data = new Properties(); - for (TriggerState<T> ts : trs) - { - Object value = ts.getValue(); - - StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.append(value == null ? "" : value.toString()); - stringBuilder.append("|"); - stringBuilder.append(getClassID(value)); - stringBuilder.append("||"); - stringBuilder.append(ts.getDescription()); - - data.setProperty(ts.getID(), stringBuilder.toString()); - - try - { - sendData(data); - } - catch (Exception ex) - { - LOG.debug(ex); - } - } - } - - /* ------------------------------------------------------------ */ - /** - * @param data the properties to send - * @throws Exception - */ - private void sendData(Properties data) - throws Exception - { - data.put("account", _uuid); - data.put("appserver", "Jetty"); - data.put("localIp", _srvip); - if (_appid == null) - data.put("lowestPort", getHttpPort()); - else - data.put("lowestPort", _appid); - if (_session != null) - data.put("session", _session); - - Properties response = sendRequest(data); - - parseResponse(response); - } - - /* ------------------------------------------------------------ */ - /** - * @param requestProperties the properties to send - * @return the response properties - * @throws Exception - */ - private Properties sendRequest(Properties requestProperties) - throws Exception - { - ByteArrayInputStream resStream = null; - Properties responseProperties = null; - - ByteArrayOutputStream reqStream = new ByteArrayOutputStream(); - requestProperties.storeToXML(reqStream, null); - try - { - ByteBuffer byteBuffer = BufferUtil.toBuffer(reqStream.toByteArray()); - ContentResponse response = _client.POST(_url).header("Connection", - "close").content(new ByteBufferContentProvider(byteBuffer)).send().get(); - - if (response.getStatus() == HttpStatus.OK_200) - { - responseProperties = new Properties(); - response.getContentAsString(); - resStream = new ByteArrayInputStream(response.getContent()); - responseProperties.loadFromXML(resStream); - } - } - finally - { - try - { - reqStream.close(); - if (resStream != null) - resStream.close(); - } - catch (IOException ex) - { - LOG.ignore(ex); - } - } - return responseProperties; - } - - /* ------------------------------------------------------------ */ - private void parseResponse(Properties response) - { - if (response.get("onhold") != null) - throw new Error("Suspended"); - - - if (response.get("session") != null) - { - _session = (String) response.remove("session"); - - AggregateEventTrigger trigger = (AggregateEventTrigger)getTrigger(); - - String queryString; - ObjectName[] queryResults; - for (Map.Entry<Object, Object> entry : response.entrySet()) - { - String[] values = ((String) entry.getValue()).split("\\|"); - - queryString = values[0]; - if (queryString.startsWith("com.javamonitor.openfire")) - continue; - - if (queryString.startsWith("com.javamonitor")) - { - queryString = "org.eclipse.jetty.monitor.integration:type=javamonitortools,id=0"; - } - - queryResults = null; - try - { - queryResults = queryNames(queryString); - } - catch (IOException | MalformedObjectNameException e) - { - LOG.debug(e); - } - - if (queryResults != null) - { - int idx = 0; - for(ObjectName objName : queryResults) - { - String id = entry.getKey().toString()+(idx == 0 ? "" : ":"+idx); - String name = queryString.equals(objName.toString()) ? "" : objName.toString(); - boolean repeat = Boolean.parseBoolean(values[2]); - trigger.add(new JavaMonitorTrigger(objName, values[1], id, name, repeat)); - } - } - } - } - } - - /* ------------------------------------------------------------ */ - /** - * @param value the value - * @return the classId - */ - private int getClassID(final Object value) - { - if (value == null) - return 0; - - if (value instanceof Byte || - value instanceof Short || - value instanceof Integer || - value instanceof Long) - return 1; - - if (value instanceof Float || - value instanceof Double) - return 2; - - if (value instanceof Boolean) - return 3; - - return 4; // String - } - - /* ------------------------------------------------------------ */ - /** - * @return the serverIp - * @throws Exception - */ - private String getServerIP() - throws Exception - { - Socket s = null; - try { - if (getProperty("http.proxyHost") != null) - { - s = new Socket(getProperty("http.proxyHost"), - parseInt(getProperty("http.proxyPort", "80"))); - } - else - { - int port = 80; - - URL url = new URL(_url); - if (url.getPort() != -1) { - port = url.getPort(); - } - s = new Socket(url.getHost(), port); - } - return s.getLocalAddress().getHostAddress(); - } - finally - { - try - { - if (s != null) - s.close(); - } - catch (IOException ex) - { - LOG.ignore(ex); - } - } - } - - /* ------------------------------------------------------------ */ - public Integer getHttpPort() - { - Collection<ObjectName> connectors; - MBeanServerConnection service; - try - { - service = JMXMonitor.getServiceConnection(); - - connectors = service.queryNames(new ObjectName("org.eclipse.jetty.nio:type=selectchannelconnector,*"), null); - if (connectors != null && connectors.size() > 0) - { - Integer lowest = Integer.MAX_VALUE; - for (final ObjectName connector : connectors) { - lowest = (Integer)service.getAttribute(connector, "port"); - } - - if (lowest < Integer.MAX_VALUE) - return lowest; - } - } - catch (Exception ex) - { - LOG.debug(ex); - } - - return 0; - } - - /* ------------------------------------------------------------ */ - /** - * @param param the param - * @return object names - * @throws IOException - * @throws NullPointerException - * @throws MalformedObjectNameException - */ - private ObjectName[] queryNames(ObjectName param) - throws IOException, MalformedObjectNameException - { - ObjectName[] result = null; - - MBeanServerConnection connection = JMXMonitor.getServiceConnection(); - Set names = connection.queryNames(param, null); - if (names != null && names.size() > 0) - { - result = new ObjectName[names.size()]; - - int idx = 0; - for(Object name : names) - { - if (name instanceof ObjectName) - result[idx++] = (ObjectName)name; - else - result[idx++] = new ObjectName(name.toString()); - } - } - - return result; - } - - private ObjectName[] queryNames(String param) - throws IOException, MalformedObjectNameException - { - return queryNames(new ObjectName(param)); - } - - } diff --git a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/integration/JavaMonitorTools.java b/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/integration/JavaMonitorTools.java deleted file mode 100644 index acb1fb56b8..0000000000 --- a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/integration/JavaMonitorTools.java +++ /dev/null @@ -1,283 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2012 Mort Bay Consulting Pty. Ltd. -// ------------------------------------------------------------------------ -// All rights reserved. This program and the accompanying materials -// are made available under the terms of the Eclipse Public License v1.0 -// and Apache License v2.0 which accompanies this distribution. -// -// The Eclipse Public License is available at -// http://www.eclipse.org/legal/epl-v10.html -// -// The Apache License v2.0 is available at -// http://www.opensource.org/licenses/apache2.0.php -// -// You may elect to redistribute this code under either of these licenses. -// ======================================================================== -// - -package org.eclipse.jetty.monitor.integration; - -import java.lang.management.ManagementFactory; -import java.lang.management.ThreadInfo; -import java.lang.management.ThreadMXBean; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.security.Security; -import java.util.HashMap; -import java.util.Map; - -import org.eclipse.jetty.util.annotation.ManagedAttribute; -import org.eclipse.jetty.util.annotation.ManagedObject; - -/* ------------------------------------------------------------ */ -/** - * Derived from the JMX bean classes created by Kees Jan Koster for the java-monitor - * J2EE probe http://code.google.com/p/java-monitor-probes/source/browse/. - * - * @author kjkoster <kjkoster@gmail.com> - */ -@ManagedObject("retrieves information required by java-monitor") -public class JavaMonitorTools -{ - private static final ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); - - private static Method findDeadlockMethod = null; - - static - { - try - { - findDeadlockMethod = ThreadMXBean.class.getMethod("findDeadlockedThreads"); - } - catch (Exception ignored) - { - // this is a 1.5 JVM - try - { - findDeadlockMethod = ThreadMXBean.class.getMethod("findMonitorDeadlockedThreads"); - } - catch (SecurityException | NoSuchMethodException e) - { - e.printStackTrace(); - } - } - } - - private ThreadInfo[] findDeadlock() - throws IllegalAccessException, InvocationTargetException - { - final long[] threadIds = (long[])findDeadlockMethod.invoke(threadMXBean,(Object[])null); - - if (threadIds == null || threadIds.length < 1) - { - // no deadlock, we're done - return null; - } - - return threadMXBean.getThreadInfo(threadIds,Integer.MAX_VALUE); - } - - @ManagedAttribute("detailed report of deadlocked threads") - public String getDeadlockStacktraces() - { - try - { - final ThreadInfo[] threads = findDeadlock(); - if (threads == null) - { - // no deadlock, we're done - return null; - } - - return stacktraces(threads,0); - } - catch (Exception e) - { - return e.getMessage(); - } - } - - private static final int MAX_STACK = 10; - - private String stacktraces(final ThreadInfo[] threads, final int i) - { - if (i >= threads.length) - { - return ""; - } - final ThreadInfo thread = threads[i]; - - final StringBuilder trace = new StringBuilder(); - for (int stack_i = 0; stack_i < Math.min(thread.getStackTrace().length,MAX_STACK); stack_i++) - { - if (stack_i == (MAX_STACK - 1)) - { - trace.append(" ..."); - } - else - { - trace.append(" at ").append(thread.getStackTrace()[stack_i]).append("\n"); - } - } - - return "\"" + thread.getThreadName() + "\", id " + thread.getThreadId() + " is " + thread.getThreadState() + " on " + thread.getLockName() - + ", owned by " + thread.getLockOwnerName() + ", id " + thread.getLockOwnerId() + "\n" + trace + "\n\n" + stacktraces(threads,i + 1); - } - - /** - * We keep track of the last time we sampled the thread states. - * It is a crude optimization to avoid having to query for the - * threads states very often. - */ - private long lastSampled = 0L; - - private final Map<Thread.State, Integer> states = new HashMap<>(); - - public int getThreadsBlocked() - { - sampleThreads(); - - return states.get(Thread.State.BLOCKED); - } - - @ManagedAttribute("number of new threads") - public int getThreadsNew() - { - sampleThreads(); - - return states.get(Thread.State.NEW); - } - - @ManagedAttribute("number of terminated threads") - public int getThreadsTerminated() - { - sampleThreads(); - - return states.get(Thread.State.TERMINATED); - } - - @ManagedAttribute("number of sleeping and waiting threads") - public int getThreadsTimedWaiting() - { - sampleThreads(); - - return states.get(Thread.State.TIMED_WAITING); - } - - @ManagedAttribute("number of waiting threads") - public int getThreadsWaiting() - { - sampleThreads(); - - return states.get(Thread.State.WAITING); - } - - public int getThreadsRunnable() - { - sampleThreads(); - - return states.get(Thread.State.RUNNABLE); - } - - private synchronized void sampleThreads() - { - if ((lastSampled + 50L) < System.currentTimeMillis()) - { - lastSampled = System.currentTimeMillis(); - for (final Thread.State state : Thread.State.values()) - { - states.put(state,0); - } - - for (final ThreadInfo thread : threadMXBean.getThreadInfo(threadMXBean.getAllThreadIds())) - { - if (thread != null) - { - final Thread.State state = thread.getThreadState(); - states.put(state,states.get(state) + 1); - } - else - { - states.put(Thread.State.TERMINATED,states.get(Thread.State.TERMINATED) + 1); - } - } - } - } - - private static final String POLICY = "sun.net.InetAddressCachePolicy"; - - @ManagedAttribute("amount of time successful dns queries are cached for") - public int getCacheSeconds() throws ClassNotFoundException, - IllegalAccessException, InvocationTargetException, - NoSuchMethodException { - final Class policy = Class.forName(POLICY); - final Object returnValue = policy.getMethod("get", (Class[]) null) - .invoke(null, (Object[]) null); - Integer seconds = (Integer) returnValue; - - return seconds.intValue(); - } - - @ManagedAttribute("Amount of time failed DNS queries are cached for") - public int getCacheNegativeSeconds() throws ClassNotFoundException, - IllegalAccessException, InvocationTargetException, - NoSuchMethodException { - final Class policy = Class.forName(POLICY); - final Object returnValue = policy.getMethod("getNegative", - (Class[]) null).invoke(null, (Object[]) null); - Integer seconds = (Integer) returnValue; - - return seconds.intValue(); - } - - private static final String DEFAULT = "default"; - - private static final String SECURITY = "security"; - - private static final String SYSTEM = "system"; - - private static final String BOTH = "both"; - - private static final String SECURITY_TTL = "networkaddress.cache.ttl"; - - private static final String SYSTEM_TTL = "sun.net.inetaddr.ttl"; - - private static final String SECURITY_NEGATIVE_TTL = "networkaddress.cache.negative.ttl"; - - private static final String SYSTEM_NEGATIVE_TTL = "sun.net.inetaddr.negative.ttl"; - - @ManagedAttribute("Cache policy for successful DNS lookups was changed from the hard-coded default") - public String getCacheTweakedFrom() { - if (Security.getProperty(SECURITY_TTL) != null) { - if (System.getProperty(SYSTEM_TTL) != null) { - return BOTH; - } - - return SECURITY; - } - - if (System.getProperty(SYSTEM_TTL) != null) { - return SYSTEM; - } - - return DEFAULT; - } - - @ManagedAttribute("Cache policy for failed DNS lookups was changed from the hard-coded default") - public String getCacheNegativeTweakedFrom() { - if (Security.getProperty(SECURITY_NEGATIVE_TTL) != null) { - if (System.getProperty(SYSTEM_NEGATIVE_TTL) != null) { - return BOTH; - } - - return SECURITY; - } - - if (System.getProperty(SYSTEM_NEGATIVE_TTL) != null) { - return SYSTEM; - } - - return DEFAULT; - } -} diff --git a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/integration/JavaMonitorTrigger.java b/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/integration/JavaMonitorTrigger.java deleted file mode 100644 index 19d3d1966e..0000000000 --- a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/integration/JavaMonitorTrigger.java +++ /dev/null @@ -1,82 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2012 Mort Bay Consulting Pty. Ltd. -// ------------------------------------------------------------------------ -// All rights reserved. This program and the accompanying materials -// are made available under the terms of the Eclipse Public License v1.0 -// and Apache License v2.0 which accompanies this distribution. -// -// The Eclipse Public License is available at -// http://www.eclipse.org/legal/epl-v10.html -// -// The Apache License v2.0 is available at -// http://www.opensource.org/licenses/apache2.0.php -// -// You may elect to redistribute this code under either of these licenses. -// ======================================================================== -// - -package org.eclipse.jetty.monitor.integration; - -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; - -import org.eclipse.jetty.monitor.triggers.AttrEventTrigger; - - -/* ------------------------------------------------------------ */ -/** - */ -public class JavaMonitorTrigger <TYPE extends Comparable<TYPE>> - extends AttrEventTrigger<TYPE> -{ - private final String _id; - private final String _name; - private final boolean _dynamic; - private int _count; - - /* ------------------------------------------------------------ */ - /** - * @param nameObject - * @param attributeName - * @param id - * @param dynamic - * @throws IllegalArgumentException - */ - public JavaMonitorTrigger(ObjectName nameObject, String attributeName, String id, String name, boolean dynamic) - throws IllegalArgumentException - { - super(nameObject, attributeName); - - _id = id; - _name = name; - _dynamic = dynamic; - } - - /* ------------------------------------------------------------ */ - /** - * @see org.eclipse.jetty.monitor.triggers.AttrEventTrigger#match(java.lang.Comparable) - */ - @Override - public boolean match(Comparable<TYPE> value) - { - return _dynamic ? true : (_count++ < 1); - } - - protected boolean getSaveAll() - { - return false; - } - - @Override - public String getID() - { - return _id; - } - - @Override - public String getNameString() - { - return _name; - } -} diff --git a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/jmx/ConsoleNotifier.java b/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/jmx/ConsoleNotifier.java deleted file mode 100644 index 93e07f3054..0000000000 --- a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/jmx/ConsoleNotifier.java +++ /dev/null @@ -1,61 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2012 Mort Bay Consulting Pty. Ltd. -// ------------------------------------------------------------------------ -// All rights reserved. This program and the accompanying materials -// are made available under the terms of the Eclipse Public License v1.0 -// and Apache License v2.0 which accompanies this distribution. -// -// The Eclipse Public License is available at -// http://www.eclipse.org/legal/epl-v10.html -// -// The Apache License v2.0 is available at -// http://www.opensource.org/licenses/apache2.0.php -// -// You may elect to redistribute this code under either of these licenses. -// ======================================================================== -// - -package org.eclipse.jetty.monitor.jmx; - - -/* ------------------------------------------------------------ */ -/** - * ConsoleNotifier - * - * Provides a way to output notification messages to the server console - */ -public class ConsoleNotifier implements EventNotifier -{ - String _messageFormat; - - - /* ------------------------------------------------------------ */ - /** - * Constructs a new notifier with specified format string - * - * @param format the {@link java.util.Formatter format string} - * @throws IllegalArgumentException - */ - public ConsoleNotifier(String format) - throws IllegalArgumentException - { - if (format == null) - throw new IllegalArgumentException("Message format cannot be null"); - - _messageFormat = format; - } - - /* ------------------------------------------------------------ */ - /** - * @see org.eclipse.jetty.monitor.jmx.EventNotifier#notify(org.eclipse.jetty.monitor.jmx.EventTrigger, org.eclipse.jetty.monitor.jmx.EventState, long) - */ - public void notify(EventTrigger trigger, EventState<?> state, long timestamp) - { - String output = String.format("%1$tF %1$tT.%1$tL:NOTIFY::", timestamp); - - output += String.format(_messageFormat, state); - - System.out.println(output); - } -} diff --git a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/jmx/EventNotifier.java b/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/jmx/EventNotifier.java deleted file mode 100644 index 3a8a84b432..0000000000 --- a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/jmx/EventNotifier.java +++ /dev/null @@ -1,39 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2012 Mort Bay Consulting Pty. Ltd. -// ------------------------------------------------------------------------ -// All rights reserved. This program and the accompanying materials -// are made available under the terms of the Eclipse Public License v1.0 -// and Apache License v2.0 which accompanies this distribution. -// -// The Eclipse Public License is available at -// http://www.eclipse.org/legal/epl-v10.html -// -// The Apache License v2.0 is available at -// http://www.opensource.org/licenses/apache2.0.php -// -// You may elect to redistribute this code under either of these licenses. -// ======================================================================== -// - -package org.eclipse.jetty.monitor.jmx; - - -/* ------------------------------------------------------------ */ -/** - * EventNotifier - * - * Interface for classes used to send event notifications - */ -public interface EventNotifier -{ - - /* ------------------------------------------------------------ */ - /** - * This method is called when a notification event is received by the containing object - * - * @param state an {@link org.eclipse.jetty.monitor.jmx.EventState event state} - * @param timestamp time stamp of the event - */ - public void notify(EventTrigger trigger, EventState<?> state, long timestamp); -} diff --git a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/jmx/EventState.java b/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/jmx/EventState.java deleted file mode 100644 index c7d16546c4..0000000000 --- a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/jmx/EventState.java +++ /dev/null @@ -1,207 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2012 Mort Bay Consulting Pty. Ltd. -// ------------------------------------------------------------------------ -// All rights reserved. This program and the accompanying materials -// are made available under the terms of the Eclipse Public License v1.0 -// and Apache License v2.0 which accompanies this distribution. -// -// The Eclipse Public License is available at -// http://www.eclipse.org/legal/epl-v10.html -// -// The Apache License v2.0 is available at -// http://www.opensource.org/licenses/apache2.0.php -// -// You may elect to redistribute this code under either of these licenses. -// ======================================================================== -// - -package org.eclipse.jetty.monitor.jmx; - -import java.util.Collection; -import java.util.Collections; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - - -/* ------------------------------------------------------------ */ -/** - * EventState - * - * Holds the state of one or more {@link org.eclipse.jetty.monitor.jmx.EventTrigger event trigger} - * instances to be used when sending notifications as well as executing the actions - */ -public class EventState<TYPE> -{ - - /* ------------------------------------------------------------ */ - /** - * State - * - * Holds the state of a single {@link org.eclipse.jetty.monitor.jmx.EventTrigger event trigger} - */ - public static class TriggerState<TYPE> - { - private final String _id; - private final String _desc; - private final TYPE _value; - - /* ------------------------------------------------------------ */ - /** - * Construct a trigger state - * - * @param id unique identification string of the associated event trigger - * @param desc description of the associated event trigger - * @param value effective value of the MXBean attribute (if applicable) - */ - public TriggerState(String id, String desc, TYPE value) - { - _id = id; - _desc = desc; - _value = value; - } - - /* ------------------------------------------------------------ */ - /** - * Retrieve the identification string of associated event trigger - * - * @return unique identification string - */ - public String getID() - { - return _id; - } - - /* ------------------------------------------------------------ */ - /** - * Retrieve the description string set by event trigger - * - * @return description string - */ - public String getDescription() - { - return _desc; - } - - /* ------------------------------------------------------------ */ - /** - * Retrieve the effective value of the MXBean attribute (if applicable) - * - * @return attribute value - */ - public TYPE getValue() - { - return _value; - } - - /* ------------------------------------------------------------ */ - /** - * @return string representation of the state - */ - public String toString() - { - StringBuilder result = new StringBuilder(); - - result.append(_desc); - result.append('='); - result.append(_value); - - return result.toString(); - } - } - - protected Map<String, TriggerState<TYPE>> _states; - - /* ------------------------------------------------------------ */ - /** - * Constructs an empty event state - */ - public EventState() - { - _states = new ConcurrentHashMap<String, TriggerState<TYPE>>(); - } - - - /* ------------------------------------------------------------ */ - /** - * Constructs an event state and adds a specified trigger state to it - * - * @param id unique identification string of the associated event trigger - * @param desc description of the associated event trigger - * @param value effective value of the MXBean attribute (if applicable) - */ - public EventState(String id, String desc, TYPE value) - { - this(); - - add(new TriggerState<TYPE>(id, desc, value)); - } - - /* ------------------------------------------------------------ */ - /** - * Adds a trigger state to the event state - * - * @param state trigger state to add - */ - public void add(TriggerState<TYPE> state) - { - _states.put(state.getID(), state); - } - - /* ------------------------------------------------------------ */ - /** - * Adds a collection of trigger states to the event state - * - * @param entries collection of trigger states to add - */ - public void addAll(Collection<TriggerState<TYPE>> entries) - { - for (TriggerState<TYPE> entry : entries) - { - add(entry); - } - } - - /* ------------------------------------------------------------ */ - /** - * Retrieves a single trigger state - * - * @param id unique identification string of the event trigger - * @return requested trigger state or null if not found - */ - public TriggerState<TYPE> get(String id) - { - return _states.get(id); - } - - /* ------------------------------------------------------------ */ - /** - * Retrieves a collection of all trigger states of the event state - * - * @return collection of the trigger states - */ - public Collection<TriggerState<TYPE>> values() - { - return Collections.unmodifiableCollection(_states.values()); - } - - /* ------------------------------------------------------------ */ - /** - * Returns a string representation of the event state - * - * @return string representation of the event state - */ - public String toString() - { - int cnt = 0; - StringBuilder result = new StringBuilder(); - - for (TriggerState<TYPE> value : _states.values()) - { - result.append(cnt++>0?"#":""); - result.append(value.toString()); - } - - return result.toString(); - } -} diff --git a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/jmx/EventTrigger.java b/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/jmx/EventTrigger.java deleted file mode 100644 index eaa6c9b009..0000000000 --- a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/jmx/EventTrigger.java +++ /dev/null @@ -1,74 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2012 Mort Bay Consulting Pty. Ltd. -// ------------------------------------------------------------------------ -// All rights reserved. This program and the accompanying materials -// are made available under the terms of the Eclipse Public License v1.0 -// and Apache License v2.0 which accompanies this distribution. -// -// The Eclipse Public License is available at -// http://www.eclipse.org/legal/epl-v10.html -// -// The Apache License v2.0 is available at -// http://www.opensource.org/licenses/apache2.0.php -// -// You may elect to redistribute this code under either of these licenses. -// ======================================================================== -// - - -package org.eclipse.jetty.monitor.jmx; - -import static java.util.UUID.randomUUID; - -/* ------------------------------------------------------------ */ -/** - * EventTrigger - * - * Abstract base class for all EventTrigger implementations. - * Used to determine whether the necessary conditions for - * triggering an event are present. - */ -public abstract class EventTrigger -{ - private final String _id; - - /* ------------------------------------------------------------ */ - /** - * Construct an event trigger - */ - public EventTrigger() - { - _id = randomUUID().toString(); - } - - /* ------------------------------------------------------------ */ - /** - * Retrieve the identification string of the event trigger - * - * @return unique identification string - */ - public String getID() - { - return _id; - } - - /* ------------------------------------------------------------ */ - /** - * Abstract method to verify if the event trigger conditions - * are in the appropriate state for an event to be triggered - * - * @return true to trigger an event - */ - public abstract boolean match(long timestamp) throws Exception; - - /* ------------------------------------------------------------ */ - /** - * Retrieve the event state associated with specified invocation - * of the event trigger match method - * - * @param timestamp time stamp associated with invocation - * @return event state or null if not found - */ - public abstract EventState<?> getState(long timestamp); -} diff --git a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/jmx/LoggingNotifier.java b/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/jmx/LoggingNotifier.java deleted file mode 100644 index f044772010..0000000000 --- a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/jmx/LoggingNotifier.java +++ /dev/null @@ -1,65 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2012 Mort Bay Consulting Pty. Ltd. -// ------------------------------------------------------------------------ -// All rights reserved. This program and the accompanying materials -// are made available under the terms of the Eclipse Public License v1.0 -// and Apache License v2.0 which accompanies this distribution. -// -// The Eclipse Public License is available at -// http://www.eclipse.org/legal/epl-v10.html -// -// The Apache License v2.0 is available at -// http://www.opensource.org/licenses/apache2.0.php -// -// You may elect to redistribute this code under either of these licenses. -// ======================================================================== -// - - -package org.eclipse.jetty.monitor.jmx; - -import org.eclipse.jetty.util.log.Log; -import org.eclipse.jetty.util.log.Logger; - - -/* ------------------------------------------------------------ */ -/** - * ConsoleNotifier - * - * Provides a way to output notification messages to a log file - */ -public class LoggingNotifier implements EventNotifier -{ - private static final Logger LOG = Log.getLogger(LoggingNotifier.class); - - String _messageFormat; - - /* ------------------------------------------------------------ */ - /** - * Constructs a new notifier with specified format string - * - * @param format the {@link java.util.Formatter format string} - * @throws IllegalArgumentException - */ - public LoggingNotifier(String format) - throws IllegalArgumentException - { - if (format == null) - throw new IllegalArgumentException("Message format cannot be null"); - - _messageFormat = format; - } - - /* ------------------------------------------------------------ */ - /** - * @see org.eclipse.jetty.monitor.jmx.EventNotifier#notify(org.eclipse.jetty.monitor.jmx.EventTrigger, org.eclipse.jetty.monitor.jmx.EventState, long) - */ - public void notify(EventTrigger trigger, EventState<?> state, long timestamp) - { - String output = String.format(_messageFormat, state); - - LOG.info(output); - } - -} diff --git a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/jmx/MonitorAction.java b/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/jmx/MonitorAction.java deleted file mode 100644 index aee9fc0c34..0000000000 --- a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/jmx/MonitorAction.java +++ /dev/null @@ -1,179 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2012 Mort Bay Consulting Pty. Ltd. -// ------------------------------------------------------------------------ -// All rights reserved. This program and the accompanying materials -// are made available under the terms of the Eclipse Public License v1.0 -// and Apache License v2.0 which accompanies this distribution. -// -// The Eclipse Public License is available at -// http://www.eclipse.org/legal/epl-v10.html -// -// The Apache License v2.0 is available at -// http://www.opensource.org/licenses/apache2.0.php -// -// You may elect to redistribute this code under either of these licenses. -// ======================================================================== -// - -package org.eclipse.jetty.monitor.jmx; - -import static java.util.UUID.randomUUID; - -import java.security.InvalidParameterException; - -/* ------------------------------------------------------------ */ -/** - * MonitorAction - * - * Abstract base class for all MonitorAction implementations. - * Receives notification when an associated EventTrigger is matched. - */ -public abstract class MonitorAction - extends NotifierGroup -{ - public static final int DEFAULT_POLL_INTERVAL = 5000; - - private final String _id; - private final EventTrigger _trigger; - private final EventNotifier _notifier; - private final long _pollInterval; - private final long _pollDelay; - - /* ------------------------------------------------------------ */ - /** - * Creates a new monitor action - * - * @param trigger event trigger to be associated with this action - * @throws InvalidParameterException - */ - public MonitorAction(EventTrigger trigger) - throws InvalidParameterException - { - this(trigger, null, 0, 0); - } - - - /* ------------------------------------------------------------ */ - /** - * Creates a new monitor action - * - * @param trigger event trigger to be associated with this action - * @param notifier event notifier to be associated with this action - * @throws InvalidParameterException - */ - public MonitorAction(EventTrigger trigger, EventNotifier notifier) - throws InvalidParameterException - { - this(trigger, notifier, 0); - } - - /* ------------------------------------------------------------ */ - /** - * Creates a new monitor action - * - * @param trigger event trigger to be associated with this action - * @param notifier event notifier to be associated with this action - * @param pollInterval interval for polling of the JMX server - * @throws InvalidParameterException - */ - public MonitorAction(EventTrigger trigger, EventNotifier notifier, long pollInterval) - throws InvalidParameterException - { - this(trigger, notifier, pollInterval, 0); - } - - /* ------------------------------------------------------------ */ - /** - * Creates a new monitor action - * - * @param trigger event trigger to be associated with this action - * @param notifier event notifier to be associated with this action - * @param pollInterval interval for polling of the JMX server - * @param pollDelay delay before starting to poll the JMX server - * @throws InvalidParameterException - */ - public MonitorAction(EventTrigger trigger, EventNotifier notifier, long pollInterval, long pollDelay) - throws InvalidParameterException - { - if (trigger == null) - throw new InvalidParameterException("Trigger cannot be null"); - - _id = randomUUID().toString(); - _trigger = trigger; - _notifier = notifier; - _pollInterval = pollInterval > 0 ? pollInterval : DEFAULT_POLL_INTERVAL; - _pollDelay = pollDelay > 0 ? pollDelay : _pollInterval; - } - - /* ------------------------------------------------------------ */ - /** - * Retrieve the identification string of the monitor action - * - * @return unique identification string - */ - - public final String getID() - { - return _id; - } - - - /* ------------------------------------------------------------ */ - /** - * Retrieve the event trigger of the monitor action - * - * @return associated event trigger - */ - public EventTrigger getTrigger() - { - return _trigger; - } - - /* ------------------------------------------------------------ */ - /** - * Retrieve the poll interval - * - * @return interval value (in milliseconds) - */ - public long getPollInterval() - { - return _pollInterval; - } - - - /* ------------------------------------------------------------ */ - /** Retrieve the poll delay - * @return delay value (in milliseconds) - */ - public long getPollDelay() - { - return _pollDelay; - } - - /* ------------------------------------------------------------ */ - /** - * This method will be called when event trigger associated - * with this monitor action matches its conditions. - * - * @param timestamp time stamp of the event - */ - public final void doExecute(long timestamp) - { - EventState<?> state =_trigger.getState(timestamp); - if (_notifier != null) - _notifier.notify(_trigger, state, timestamp); - execute(_trigger, state, timestamp); - } - - /* ------------------------------------------------------------ */ - /** - * This method will be called to allow subclass to execute - * the desired action in response to the event. - * - * @param trigger event trigger associated with this monitor action - * @param state event state associated with current invocation of event trigger - * @param timestamp time stamp of the current invocation of event trigger - */ - public abstract void execute(EventTrigger trigger, EventState<?> state, long timestamp); - } diff --git a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/jmx/MonitorTask.java b/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/jmx/MonitorTask.java deleted file mode 100644 index 3475e3b45c..0000000000 --- a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/jmx/MonitorTask.java +++ /dev/null @@ -1,119 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2012 Mort Bay Consulting Pty. Ltd. -// ------------------------------------------------------------------------ -// All rights reserved. This program and the accompanying materials -// are made available under the terms of the Eclipse Public License v1.0 -// and Apache License v2.0 which accompanies this distribution. -// -// The Eclipse Public License is available at -// http://www.eclipse.org/legal/epl-v10.html -// -// The Apache License v2.0 is available at -// http://www.opensource.org/licenses/apache2.0.php -// -// You may elect to redistribute this code under either of these licenses. -// ======================================================================== -// - -package org.eclipse.jetty.monitor.jmx; - -import java.util.HashMap; -import java.util.Map; -import java.util.Timer; -import java.util.TimerTask; -import java.util.concurrent.TimeUnit; - -import org.eclipse.jetty.util.log.Log; -import org.eclipse.jetty.util.log.Logger; -import org.eclipse.jetty.util.thread.ExecutorThreadPool; -import org.eclipse.jetty.util.thread.ThreadPool; - -/* ------------------------------------------------------------ */ -/** - * MonitorTask - * - * Invokes polling of the JMX server for the MBean attribute values - * through executing timer task scheduled using java.util.Timer - * at specified poll interval following a specified delay. - */ -public class MonitorTask extends TimerTask -{ - private static final Logger LOG = Log.getLogger(MonitorTask.class); - - private static Timer __timer = new Timer(true); - private static ThreadPool _callback = new ExecutorThreadPool(4,64,60,TimeUnit.SECONDS);; - private static Map<String,TimerTask> __tasks = new HashMap<String,TimerTask>(); - - private final MonitorAction _action; - - /* ------------------------------------------------------------ */ - /** - * Creates new instance of MonitorTask - * - * @param action instance of MonitorAction to use - */ - private MonitorTask(MonitorAction action) - { - _action = action; - } - - /* ------------------------------------------------------------ */ - /** - * Schedule new timer task for specified monitor action - * - * @param action monitor action - */ - public static void schedule(MonitorAction action) - { - TimerTask task = new MonitorTask(action); - __timer.scheduleAtFixedRate(task, - action.getPollDelay(), - action.getPollInterval()); - - __tasks.put(action.getID(), task); - } - - /* ------------------------------------------------------------ */ - /** - * Cancel timer task for specified monitor action - * - * @param action monitor action - */ - public static void cancel(MonitorAction action) - { - TimerTask task = __tasks.remove(action.getID()); - if (task != null) - task.cancel(); - } - - /* ------------------------------------------------------------ */ - /** - * This method is invoked when poll interval has elapsed - * to check if the event trigger conditions are satisfied - * in order to fire event. - * - * @see java.util.TimerTask#run() - */ - @Override - public final void run() - { - final long timestamp = System.currentTimeMillis(); - final EventTrigger trigger = _action.getTrigger(); - - _callback.dispatch(new Runnable() { - public void run() - { - try - { - if(trigger.match(timestamp)) - _action.doExecute(timestamp); - } - catch (Exception ex) - { - LOG.debug(ex); - } - } - }); - } -} diff --git a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/jmx/NotifierGroup.java b/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/jmx/NotifierGroup.java deleted file mode 100644 index 14993d21dc..0000000000 --- a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/jmx/NotifierGroup.java +++ /dev/null @@ -1,120 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2012 Mort Bay Consulting Pty. Ltd. -// ------------------------------------------------------------------------ -// All rights reserved. This program and the accompanying materials -// are made available under the terms of the Eclipse Public License v1.0 -// and Apache License v2.0 which accompanies this distribution. -// -// The Eclipse Public License is available at -// http://www.eclipse.org/legal/epl-v10.html -// -// The Apache License v2.0 is available at -// http://www.opensource.org/licenses/apache2.0.php -// -// You may elect to redistribute this code under either of these licenses. -// ======================================================================== -// - - -package org.eclipse.jetty.monitor.jmx; - -import java.util.Collection; -import java.util.Collections; -import java.util.HashSet; -import java.util.Set; - - - -/* ------------------------------------------------------------ */ -/** - * NotifierGroup - * - * This class allows for grouping of the event notifiers - */ -public class NotifierGroup implements EventNotifier -{ - private Set<EventNotifier> _group; - - /* ------------------------------------------------------------ */ - /** - * Create a notifier group - */ - public NotifierGroup() - { - _group = new HashSet<EventNotifier>(); - } - - /* ------------------------------------------------------------ */ - /** - * Retrieve all event notifier associated with this group - * - * @return collection of event notifiers - */ - public Collection<EventNotifier> getNotifiers() - { - return Collections.unmodifiableSet(_group); - } - - /* ------------------------------------------------------------ */ - /** - * Add specified event notifier to event notifier group - * - * @param notifier event notifier to be added - * @return true if successful - */ - public boolean addNotifier(EventNotifier notifier) - { - return _group.add(notifier); - } - - /* ------------------------------------------------------------ */ - /** - * Add a collection of event notifiers to event notifier group - * - * @param notifiers collection of event notifiers to be added - * @return true if successful - */ - public boolean addNotifiers(Collection<EventNotifier> notifiers) - { - return _group.addAll(notifiers); - } - - /* ------------------------------------------------------------ */ - /** - * Remove event notifier from event notifier group - * - * @param notifier event notifier to be removed - * @return true if successful - */ - public boolean removeNotifier(EventNotifier notifier) - { - return _group.remove(notifier); - } - - /* ------------------------------------------------------------ */ - /** - * Remove a collection of event notifiers from event notifier group - * - * @param notifiers collection of event notifiers to be removed - * @return true if successful - */ - public boolean removeNotifiers(Collection<EventNotifier> notifiers) - { - return _group.removeAll(notifiers); - } - - /* ------------------------------------------------------------ */ - /** - * Invoke the notify() method of each of the notifiers in group - * - * @see org.eclipse.jetty.monitor.jmx.EventNotifier#notify(org.eclipse.jetty.monitor.jmx.EventTrigger, org.eclipse.jetty.monitor.jmx.EventState, long) - */ - public void notify(EventTrigger trigger, EventState<?> state, long timestamp) - { - for (EventNotifier notifier: _group) - { - notifier.notify(trigger, state, timestamp); - } - } -} diff --git a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/jmx/ServiceConnection.java b/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/jmx/ServiceConnection.java deleted file mode 100644 index 157fec5cbe..0000000000 --- a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/jmx/ServiceConnection.java +++ /dev/null @@ -1,172 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2012 Mort Bay Consulting Pty. Ltd. -// ------------------------------------------------------------------------ -// All rights reserved. This program and the accompanying materials -// are made available under the terms of the Eclipse Public License v1.0 -// and Apache License v2.0 which accompanies this distribution. -// -// The Eclipse Public License is available at -// http://www.eclipse.org/legal/epl-v10.html -// -// The Apache License v2.0 is available at -// http://www.opensource.org/licenses/apache2.0.php -// -// You may elect to redistribute this code under either of these licenses. -// ======================================================================== -// - -package org.eclipse.jetty.monitor.jmx; - -import java.io.IOException; -import java.lang.management.ManagementFactory; - -import javax.management.MBeanServer; -import javax.management.MBeanServerConnection; -import javax.management.remote.JMXConnector; -import javax.management.remote.JMXConnectorFactory; -import javax.management.remote.JMXConnectorServer; -import javax.management.remote.JMXConnectorServerFactory; -import javax.management.remote.JMXServiceURL; - -import org.eclipse.jetty.util.log.Log; -import org.eclipse.jetty.util.log.Logger; - - -/* ------------------------------------------------------------ */ -/** - * ServerConnection - * - * Provides ability to create a connection to either an external - * JMX server, or a loopback connection to the internal one. - */ -public class ServiceConnection -{ - private static final Logger LOG = Log.getLogger(ServiceConnection.class); - - private String _serviceUrl; - private MBeanServer _server; - private JMXConnectorServer _connectorServer; - private JMXConnector _serverConnector; - private MBeanServerConnection _serviceConnection; - - /* ------------------------------------------------------------ */ - /** - * Construct a loopback connection to an internal server - * - * @throws IOException - */ - public ServiceConnection() - throws IOException - { - this(null); - } - - /* ------------------------------------------------------------ */ - /** - * Construct a connection to specified server - * - * @param url URL of JMX server - * @throws IOException - */ - public ServiceConnection(String url) - throws IOException - { - _serviceUrl = url; - } - - /** - * Retrieve an external URL for the JMX server - * - * @return service URL - */ - public String getServiceUrl() - { - return _serviceUrl; - } - - /* ------------------------------------------------------------ */ - /** - * Retrieve a connection to MBean server - * - * @return connection to MBean server - */ - public MBeanServerConnection getConnection() - { - return _serviceConnection; - } - - public void connect() - throws IOException - { - if (_serviceConnection == null) - { - if (_serviceUrl == null) - openLoopbackConnection(); - else - openServerConnection(_serviceUrl); - } - } - /* ------------------------------------------------------------ */ - /** - * Open a loopback connection to local JMX server - * - * @throws IOException - */ - private void openLoopbackConnection() - throws IOException - { - _server = ManagementFactory.getPlatformMBeanServer(); - - JMXServiceURL serviceUrl = new JMXServiceURL("service:jmx:rmi://"); - _connectorServer = JMXConnectorServerFactory.newJMXConnectorServer(serviceUrl, null, _server); - _connectorServer.start(); - - _serviceUrl = _connectorServer.getAddress().toString(); - - _serverConnector = JMXConnectorFactory.connect(_connectorServer.getAddress()); - _serviceConnection = _serverConnector.getMBeanServerConnection(); - } - - /* ------------------------------------------------------------ */ - /** - * Open a connection to remote JMX server - * - * @param url - * @throws IOException - */ - private void openServerConnection(String url) - throws IOException - { - _serviceUrl = url; - - JMXServiceURL serviceUrl = new JMXServiceURL(_serviceUrl); - _serverConnector = JMXConnectorFactory.connect(serviceUrl); - _serviceConnection = _serverConnector.getMBeanServerConnection(); - } - - /* ------------------------------------------------------------ */ - /** - * Close the connections - */ - public void disconnect() - { - try - { - if (_serverConnector != null) - { - _serverConnector.close(); - _serviceConnection = null; - } - if (_connectorServer != null) - { - _connectorServer.stop(); - _connectorServer = null; - } - } - catch (Exception ex) - { - LOG.debug(ex); - } - } -} diff --git a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/jmx/SimpleAction.java b/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/jmx/SimpleAction.java deleted file mode 100644 index 567a0ebefc..0000000000 --- a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/jmx/SimpleAction.java +++ /dev/null @@ -1,46 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2012 Mort Bay Consulting Pty. Ltd. -// ------------------------------------------------------------------------ -// All rights reserved. This program and the accompanying materials -// are made available under the terms of the Eclipse Public License v1.0 -// and Apache License v2.0 which accompanies this distribution. -// -// The Eclipse Public License is available at -// http://www.eclipse.org/legal/epl-v10.html -// -// The Apache License v2.0 is available at -// http://www.opensource.org/licenses/apache2.0.php -// -// You may elect to redistribute this code under either of these licenses. -// ======================================================================== -// - -package org.eclipse.jetty.monitor.jmx; - -import java.security.InvalidParameterException; - - - -/* ------------------------------------------------------------ */ -/** - */ -public class SimpleAction extends MonitorAction -{ - public SimpleAction(EventTrigger trigger, EventNotifier notifier, long pollInterval) - throws InvalidParameterException - { - super(trigger,notifier,pollInterval); - } - - /* ------------------------------------------------------------ */ - /** - * @see org.eclipse.jetty.monitor.jmx.MonitorAction#execute(org.eclipse.jetty.monitor.jmx.EventTrigger, org.eclipse.jetty.monitor.jmx.EventState, long) - */ - - @Override - public void execute(EventTrigger trigger, EventState<?> state, long timestamp) - { - System.out.printf("Action time: %tc%n", timestamp); - } -} diff --git a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/thread/ThreadMonitorException.java b/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/thread/ThreadMonitorException.java deleted file mode 100644 index 7f416d262b..0000000000 --- a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/thread/ThreadMonitorException.java +++ /dev/null @@ -1,35 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2012 Mort Bay Consulting Pty. Ltd. -// ------------------------------------------------------------------------ -// All rights reserved. This program and the accompanying materials -// are made available under the terms of the Eclipse Public License v1.0 -// and Apache License v2.0 which accompanies this distribution. -// -// The Eclipse Public License is available at -// http://www.eclipse.org/legal/epl-v10.html -// -// The Apache License v2.0 is available at -// http://www.opensource.org/licenses/apache2.0.php -// -// You may elect to redistribute this code under either of these licenses. -// ======================================================================== -// - - -package org.eclipse.jetty.monitor.thread; - - -/* ------------------------------------------------------------ */ -/** - */ -public class ThreadMonitorException extends Exception -{ - private static final long serialVersionUID = -4345223166315716918L; - - public ThreadMonitorException(String message, StackTraceElement[] stackTrace) - { - super(message); - setStackTrace(stackTrace); - } -} diff --git a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/thread/ThreadMonitorInfo.java b/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/thread/ThreadMonitorInfo.java deleted file mode 100644 index 1fce7eabde..0000000000 --- a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/thread/ThreadMonitorInfo.java +++ /dev/null @@ -1,203 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2012 Mort Bay Consulting Pty. Ltd. -// ------------------------------------------------------------------------ -// All rights reserved. This program and the accompanying materials -// are made available under the terms of the Eclipse Public License v1.0 -// and Apache License v2.0 which accompanies this distribution. -// -// The Eclipse Public License is available at -// http://www.eclipse.org/legal/epl-v10.html -// -// The Apache License v2.0 is available at -// http://www.opensource.org/licenses/apache2.0.php -// -// You may elect to redistribute this code under either of these licenses. -// ======================================================================== -// - - -package org.eclipse.jetty.monitor.thread; - - -/* ------------------------------------------------------------ */ -/** - */ -public class ThreadMonitorInfo -{ - private Thread _thread; - private StackTraceElement[] _stackTrace; - - private boolean _threadSpinning = false; - private int _traceCount = -1; - - private long _prevCpuTime; - private long _prevSampleTime; - private long _currCpuTime; - private long _currSampleTime; - - - /* ------------------------------------------------------------ */ - /** - * Instantiates a new thread monitor info. - * - * @param thread the thread this object is created for - */ - public ThreadMonitorInfo(Thread thread) - { - _thread = thread; - } - - /* ------------------------------------------------------------ */ - /** - * @return Id of the thread - */ - public long getThreadId() - { - return _thread.getId(); - } - - /* ------------------------------------------------------------ */ - /** - * Gets the thread name. - * - * @return the thread name - */ - public String getThreadName() - { - return _thread.getName(); - } - - /* ------------------------------------------------------------ */ - /** - * Gets the thread state. - * - * @return the thread state - */ - public String getThreadState() - { - return _thread.getState().toString(); - } - - /* ------------------------------------------------------------ */ - /** - * Gets the stack trace. - * - * @return the stack trace - */ - public StackTraceElement[] getStackTrace() - { - return _stackTrace; - } - - /* ------------------------------------------------------------ */ - /** - * Sets the stack trace. - * - * @param stackTrace the new stack trace - */ - public void setStackTrace(StackTraceElement[] stackTrace) - { - _stackTrace = stackTrace; - } - - /* ------------------------------------------------------------ */ - /** - * Checks if is spinning. - * - * @return true, if is spinning - */ - public boolean isSpinning() - { - return _threadSpinning; - } - - /* ------------------------------------------------------------ */ - /** - * Sets the spinning flag. - * - * @param value the new value - */ - public void setSpinning(boolean value) - { - _threadSpinning = value; - } - - /* ------------------------------------------------------------ */ - /** - * Sets the trace count. - * - * @param traceCount the new trace count - */ - public void setTraceCount(int traceCount) - { - _traceCount = traceCount; - } - - /* ------------------------------------------------------------ */ - /** - * Gets the trace count. - * - * @return the trace count - */ - public int getTraceCount() - { - return _traceCount; - } - - /* ------------------------------------------------------------ */ - /** - * @return the CPU time of the thread - */ - public long getCpuTime() - { - return _currCpuTime; - } - - /* ------------------------------------------------------------ */ - /** - * Set the CPU time. - * - * @param ns new CPU time - */ - public void setCpuTime(long ns) - { - _prevCpuTime = _currCpuTime; - _currCpuTime = ns; - } - - /* ------------------------------------------------------------ */ - /** - * @return the time of sample - */ - public long getSampleTime() - { - return _currSampleTime; - } - - /* ------------------------------------------------------------ */ - /** - * Sets the sample time. - * - * @param ns the time of sample - */ - public void setSampleTime(long ns) - { - _prevSampleTime = _currSampleTime; - _currSampleTime = ns; - } - - /* ------------------------------------------------------------ */ - /** - * Gets the CPU utilization. - * - * @return the CPU utilization percentage - */ - public float getCpuUtilization() - { - long elapsedCpuTime = _currCpuTime - _prevCpuTime; - long elapsedNanoTime = _currSampleTime - _prevSampleTime; - - return elapsedNanoTime > 0 ? Math.min((elapsedCpuTime * 100.0f) / elapsedNanoTime, 100.0f) : 0; - } -} diff --git a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/triggers/AggregateEventTrigger.java b/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/triggers/AggregateEventTrigger.java deleted file mode 100644 index afd0fd844c..0000000000 --- a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/triggers/AggregateEventTrigger.java +++ /dev/null @@ -1,169 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2012 Mort Bay Consulting Pty. Ltd. -// ------------------------------------------------------------------------ -// All rights reserved. This program and the accompanying materials -// are made available under the terms of the Eclipse Public License v1.0 -// and Apache License v2.0 which accompanies this distribution. -// -// The Eclipse Public License is available at -// http://www.eclipse.org/legal/epl-v10.html -// -// The Apache License v2.0 is available at -// http://www.opensource.org/licenses/apache2.0.php -// -// You may elect to redistribute this code under either of these licenses. -// ======================================================================== -// - - -package org.eclipse.jetty.monitor.triggers; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import org.eclipse.jetty.monitor.jmx.EventState; -import org.eclipse.jetty.monitor.jmx.EventTrigger; - - -/* ------------------------------------------------------------ */ -/** - * AggregateEventTrigger - * - * EventTrigger aggregation that executes every aggregated event - * triggers in left to right order, and returns match if any one - * of them have returned match. - */ -public class AggregateEventTrigger extends EventTrigger -{ - protected final List<EventTrigger> _triggers; - - /* ------------------------------------------------------------ */ - /** - * Construct an event trigger - */ - public AggregateEventTrigger() - { - _triggers = new ArrayList<EventTrigger>(); - } - - /* ------------------------------------------------------------ */ - /** - * Construct an event trigger and associate the list - * of event triggers to be aggregated by this trigger - * - * @param triggers list of event triggers to add - */ - public AggregateEventTrigger(List<EventTrigger> triggers) - { - _triggers = new ArrayList<EventTrigger>(triggers); - } - - /* ------------------------------------------------------------ */ - /** - * Construct an event trigger and associate the array - * of event triggers to be aggregated by this trigger - * - * @param triggers list of event triggers to add - */ - public AggregateEventTrigger(EventTrigger... triggers) - { - _triggers = Arrays.asList(triggers); - } - - /* ------------------------------------------------------------ */ - /** - * @param trigger - */ - public void add(EventTrigger trigger) - { - _triggers.add(trigger); - } - - /* ------------------------------------------------------------ */ - /** - * @param triggers - */ - public void addAll(List<EventTrigger> triggers) - { - _triggers.addAll(triggers); - } - - /* ------------------------------------------------------------ */ - /** - * @param triggers - */ - public void addAll(EventTrigger... triggers) - { - _triggers.addAll(Arrays.asList(triggers)); - } - - /* ------------------------------------------------------------ */ - /** - * Retrieve the event state associated with specified invocation - * of the event trigger match method. This event trigger retrieves - * the combined event state of all aggregated event triggers. - * - * @param timestamp time stamp associated with invocation - * @return event state or null if not found - * - * @see org.eclipse.jetty.monitor.jmx.EventTrigger#getState(long) - */ - @Override - public EventState getState(long timestamp) - { - EventState state = new EventState(); - - for (EventTrigger trigger : _triggers) - { - EventState subState = trigger.getState(timestamp); - if (subState != null) - { - state.addAll(subState.values()); - } - } - - return state; - } - - /* ------------------------------------------------------------ */ - /** - * @see org.eclipse.jetty.monitor.jmx.EventTrigger#match(long) - */ - @Override - public boolean match(long timestamp) throws Exception - { - boolean result = false; - for(EventTrigger trigger : _triggers) - { - result = trigger.match(timestamp) ? true : result; - } - return true; - } - - /* ------------------------------------------------------------ */ - /** - * Returns the string representation of this event trigger - * in the format "AND(triger1,trigger2,...)". - * - * @return string representation of the event trigger - * - * @see java.lang.Object#toString() - */ - public String toString() - { - int cnt = 0; - StringBuilder result = new StringBuilder(); - - result.append("ANY("); - for (EventTrigger trigger : _triggers) - { - result.append(cnt++ > 0 ? "," : ""); - result.append(trigger); - } - result.append(')'); - - return result.toString(); - } -} diff --git a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/triggers/AndEventTrigger.java b/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/triggers/AndEventTrigger.java deleted file mode 100644 index fba3e6a718..0000000000 --- a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/triggers/AndEventTrigger.java +++ /dev/null @@ -1,134 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2012 Mort Bay Consulting Pty. Ltd. -// ------------------------------------------------------------------------ -// All rights reserved. This program and the accompanying materials -// are made available under the terms of the Eclipse Public License v1.0 -// and Apache License v2.0 which accompanies this distribution. -// -// The Eclipse Public License is available at -// http://www.eclipse.org/legal/epl-v10.html -// -// The Apache License v2.0 is available at -// http://www.opensource.org/licenses/apache2.0.php -// -// You may elect to redistribute this code under either of these licenses. -// ======================================================================== -// - - -package org.eclipse.jetty.monitor.triggers; - -import java.util.Arrays; -import java.util.List; - -import org.eclipse.jetty.monitor.jmx.EventState; -import org.eclipse.jetty.monitor.jmx.EventTrigger; - - -/* ------------------------------------------------------------ */ -/** - * AndEventTrigger - * - * EventTrigger aggregation using logical AND operation - * that executes matching of the aggregated event triggers - * in left to right order - */ -public class AndEventTrigger extends EventTrigger -{ - protected final List<EventTrigger> _triggers; - - /* ------------------------------------------------------------ */ - /** - * Construct an event trigger and associate the list - * of event triggers to be aggregated by this trigger - * - * @param triggers list of event triggers to add - */ - public AndEventTrigger(List<EventTrigger> triggers) - { - _triggers = triggers; - } - - /* ------------------------------------------------------------ */ - /** - * Construct an event trigger and associate the array - * of event triggers to be aggregated by this trigger - * - * @param triggers array of event triggers to add - */ - public AndEventTrigger(EventTrigger... triggers) - { - _triggers = Arrays.asList(triggers); - } - - /* ------------------------------------------------------------ */ - /** - * Verify if the event trigger conditions are in the - * appropriate state for an event to be triggered. - * This event trigger will match if all aggregated - * event triggers would return a match. - * - * @see org.eclipse.jetty.monitor.jmx.EventTrigger#match(long) - */ - public boolean match(long timestamp) - throws Exception - { - for(EventTrigger trigger : _triggers) - { - if (!trigger.match(timestamp)) - return false; - } - return true; - } - - /* ------------------------------------------------------------ */ - /** - * Retrieve the event state associated with specified invocation - * of the event trigger match method. This event trigger retrieves - * the combined event state of all aggregated event triggers. - * - * @param timestamp time stamp associated with invocation - * @return event state or null if not found - * - * @see org.eclipse.jetty.monitor.jmx.EventTrigger#getState(long) - */ - @Override - public EventState getState(long timestamp) - { - EventState state = new EventState(); - - for (EventTrigger trigger : _triggers) - { - EventState subState = trigger.getState(timestamp); - state.addAll(subState.values()); - } - - return state; - } - - /* ------------------------------------------------------------ */ - /** - * Returns the string representation of this event trigger - * in the format "AND(triger1,trigger2,...)". - * - * @return string representation of the event trigger - * - * @see java.lang.Object#toString() - */ - public String toString() - { - int cnt = 0; - StringBuilder result = new StringBuilder(); - - result.append("AND("); - for (EventTrigger trigger : _triggers) - { - result.append(cnt++ > 0 ? "," : ""); - result.append(trigger); - } - result.append(')'); - - return result.toString(); - } -} diff --git a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/triggers/AttrEventTrigger.java b/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/triggers/AttrEventTrigger.java deleted file mode 100644 index 5efece65a0..0000000000 --- a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/triggers/AttrEventTrigger.java +++ /dev/null @@ -1,240 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2012 Mort Bay Consulting Pty. Ltd. -// ------------------------------------------------------------------------ -// All rights reserved. This program and the accompanying materials -// are made available under the terms of the Eclipse Public License v1.0 -// and Apache License v2.0 which accompanies this distribution. -// -// The Eclipse Public License is available at -// http://www.eclipse.org/legal/epl-v10.html -// -// The Apache License v2.0 is available at -// http://www.opensource.org/licenses/apache2.0.php -// -// You may elect to redistribute this code under either of these licenses. -// ======================================================================== -// - - -package org.eclipse.jetty.monitor.triggers; - -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -import javax.management.MBeanServerConnection; -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; -import javax.management.openmbean.CompositeData; - -import org.eclipse.jetty.monitor.JMXMonitor; -import org.eclipse.jetty.monitor.jmx.EventState; -import org.eclipse.jetty.monitor.jmx.EventTrigger; -import org.eclipse.jetty.util.log.Log; -import org.eclipse.jetty.util.log.Logger; - - -/* ------------------------------------------------------------ */ -/** - * AttrEventTrigger - * - * Event trigger that polls a value of an MXBean attribute - * and matches every invocation of this trigger. It can be - * used to send notifications of the value of an attribute - * of the MXBean being polled at a certain interval, or as - * a base class for the event triggers that match the - * value of an attribute of the MXBean being polled against - * some specified criteria. - */ -public class AttrEventTrigger<TYPE extends Comparable<TYPE>> - extends EventTrigger -{ - private static final Logger LOG = Log.getLogger(AttrEventTrigger.class); - - private final ObjectName _nameObject; - - protected final String _objectName; - protected final String _attributeName; - protected Map<Long, EventState<TYPE>> _states; - - /* ------------------------------------------------------------ */ - /** - * Construct event trigger and specify the MXBean attribute - * that will be polled by this event trigger. - * - * @param objectName object name of an MBean to be polled - * @param attributeName name of an MBean attribute to be polled - * - * @throws MalformedObjectNameException - * @throws IllegalArgumentException - */ - public AttrEventTrigger(String objectName, String attributeName) - throws MalformedObjectNameException, IllegalArgumentException - { - if (objectName == null) - throw new IllegalArgumentException("Object name cannot be null"); - if (attributeName == null) - throw new IllegalArgumentException("Attribute name cannot be null"); - - _states = new ConcurrentHashMap<Long,EventState<TYPE>>(); - - _objectName = objectName; - _attributeName = attributeName; - - _nameObject = new ObjectName(_objectName); - } - - /* ------------------------------------------------------------ */ - /** - * Construct event trigger and specify the MXBean attribute - * that will be polled by this event trigger. - * - * @param nameObject object name of an MBean to be polled - * @param attributeName name of an MBean attribute to be polled - * - * @throws IllegalArgumentException - */ - public AttrEventTrigger(ObjectName nameObject, String attributeName) - throws IllegalArgumentException - { - if (nameObject == null) - throw new IllegalArgumentException("Object name cannot be null"); - if (attributeName == null) - throw new IllegalArgumentException("Attribute name cannot be null"); - - _states = new ConcurrentHashMap<Long,EventState<TYPE>>(); - - _objectName = nameObject.toString(); - _attributeName = attributeName; - - _nameObject = nameObject; - } - - /* ------------------------------------------------------------ */ - /** - * Verify if the event trigger conditions are in the - * appropriate state for an event to be triggered. - * This event trigger uses the match(Comparable<TYPE>) - * method to compare the value of the MXBean attribute - * to the conditions specified by the subclasses. - * - * @see org.eclipse.jetty.monitor.jmx.EventTrigger#match(long) - */ - @SuppressWarnings("unchecked") - public final boolean match(long timestamp) - throws Exception - { - MBeanServerConnection serverConnection = JMXMonitor.getServiceConnection(); - - TYPE value = null; - try - { - int pos = _attributeName.indexOf('.'); - if (pos < 0) - value = (TYPE)serverConnection.getAttribute(_nameObject,_attributeName); - else - value = getValue((CompositeData)serverConnection.getAttribute(_nameObject, _attributeName.substring(0, pos)), - _attributeName.substring(pos+1)); - } - catch (Exception ex) - { - LOG.debug(ex); - } - - boolean result = false; - if (value != null) - { - result = match(value); - - if (result || getSaveAll()) - { - _states.put(timestamp, - new EventState<TYPE>(this.getID(), this.getNameString(), value)); - } - } - - return result; - } - - - /* ------------------------------------------------------------ */ - /** - * Verify if the event trigger conditions are in the - * appropriate state for an event to be triggered. - * Allows subclasses to override the default behavior - * that matches every invocation of this trigger - */ - public boolean match(Comparable<TYPE> value) - { - return true; - } - - /* ------------------------------------------------------------ */ - /** - * Retrieve the event state associated with specified invocation - * of the event trigger match method. - * - * @param timestamp time stamp associated with invocation - * @return event state or null if not found - * - * @see org.eclipse.jetty.monitor.jmx.EventTrigger#getState(long) - */ - @Override - public final EventState<TYPE> getState(long timestamp) - { - return _states.get(timestamp); - } - - /* ------------------------------------------------------------ */ - /** - * Returns the string representation of this event trigger - * in the format "[object_name:attribute_name]". - * - * @return string representation of the event trigger - * - * @see java.lang.Object#toString() - */ - public String toString() - { - return getNameString(); - } - - /* ------------------------------------------------------------ */ - /** - * Returns the string representation of this event trigger - * in the format "[object_name:attribute_name]". Allows - * subclasses to override the name string used to identify - * this event trigger in the event state object as well as - * string representation of the subclasses. - * - * @return string representation of the event trigger - */ - protected String getNameString() - { - StringBuilder result = new StringBuilder(); - - result.append('['); - result.append(_objectName); - result.append(":"); - result.append(_attributeName); - result.append("]"); - - return result.toString(); - } - - protected boolean getSaveAll() - { - return true; - } - - protected TYPE getValue(CompositeData compValue, String fieldName) - { - int pos = fieldName.indexOf('.'); - if (pos < 0) - return (TYPE)compValue.get(fieldName); - else - return getValue((CompositeData)compValue.get(fieldName.substring(0, pos)), - fieldName.substring(pos+1)); - - } -} diff --git a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/triggers/EqualToAttrEventTrigger.java b/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/triggers/EqualToAttrEventTrigger.java deleted file mode 100644 index 34a39efc2d..0000000000 --- a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/triggers/EqualToAttrEventTrigger.java +++ /dev/null @@ -1,90 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2012 Mort Bay Consulting Pty. Ltd. -// ------------------------------------------------------------------------ -// All rights reserved. This program and the accompanying materials -// are made available under the terms of the Eclipse Public License v1.0 -// and Apache License v2.0 which accompanies this distribution. -// -// The Eclipse Public License is available at -// http://www.eclipse.org/legal/epl-v10.html -// -// The Apache License v2.0 is available at -// http://www.opensource.org/licenses/apache2.0.php -// -// You may elect to redistribute this code under either of these licenses. -// ======================================================================== -// - - -package org.eclipse.jetty.monitor.triggers; - -import javax.management.MalformedObjectNameException; - - -/* ------------------------------------------------------------ */ -/** - * EqualToAttrEventTrigger - * - * Event trigger that polls a value of an MXBean attribute and - * checks if it is equal to specified value. - */ -public class EqualToAttrEventTrigger<TYPE extends Comparable<TYPE>> extends AttrEventTrigger<TYPE> -{ - protected final TYPE _value; - - /* ------------------------------------------------------------ */ - /** - * Construct event trigger and specify the MXBean attribute - * that will be polled by this event trigger as well as the - * target value of the attribute. - * - * @param objectName object name of an MBean to be polled - * @param attributeName name of an MBean attribute to be polled - * @param value target value of the attribute - * - * @throws MalformedObjectNameException - * @throws IllegalArgumentException - */ - public EqualToAttrEventTrigger(String objectName, String attributeName, TYPE value) - throws MalformedObjectNameException, IllegalArgumentException - { - super(objectName,attributeName); - - if (value == null) - throw new IllegalArgumentException("Value cannot be null"); - - _value = value; - } - - /* ------------------------------------------------------------ */ - /** - * Compare the value of the MXBean attribute being polling - * to check if it is equal to the specified value. - */ - @Override - public boolean match(Comparable<TYPE> value) - { - return (value.compareTo(_value) == 0); - } - - /* ------------------------------------------------------------ */ - /** - * Returns the string representation of this event trigger - * in the format "name=value". - * - * @return string representation of the event trigger - * - * @see java.lang.Object#toString() - */ - public String toString() - { - StringBuilder result = new StringBuilder(); - - result.append(getNameString()); - result.append("=="); - result.append(_value); - - return result.toString(); - } -} diff --git a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/triggers/GreaterThanAttrEventTrigger.java b/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/triggers/GreaterThanAttrEventTrigger.java deleted file mode 100644 index d7a33f5f79..0000000000 --- a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/triggers/GreaterThanAttrEventTrigger.java +++ /dev/null @@ -1,92 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2012 Mort Bay Consulting Pty. Ltd. -// ------------------------------------------------------------------------ -// All rights reserved. This program and the accompanying materials -// are made available under the terms of the Eclipse Public License v1.0 -// and Apache License v2.0 which accompanies this distribution. -// -// The Eclipse Public License is available at -// http://www.eclipse.org/legal/epl-v10.html -// -// The Apache License v2.0 is available at -// http://www.opensource.org/licenses/apache2.0.php -// -// You may elect to redistribute this code under either of these licenses. -// ======================================================================== -// - - -package org.eclipse.jetty.monitor.triggers; - -import javax.management.MalformedObjectNameException; - - -/* ------------------------------------------------------------ */ -/** - * GreaterThanAttrEventTrigger - * - * Event trigger that polls a value of an MXBean attribute and - * checks if it is greater than specified min value. - */ -public class GreaterThanAttrEventTrigger<TYPE extends Comparable<TYPE>> extends AttrEventTrigger<TYPE> -{ - protected final TYPE _min; - - /* ------------------------------------------------------------ */ - /** - * Construct event trigger and specify the MXBean attribute - * that will be polled by this event trigger as well as min - * value of the attribute. - * - * @param objectName object name of an MBean to be polled - * @param attributeName name of an MBean attribute to be polled - * @param min minimum value of the attribute - * - * @throws MalformedObjectNameException - * @throws IllegalArgumentException - */ - public GreaterThanAttrEventTrigger(String objectName, String attributeName, TYPE min) - throws MalformedObjectNameException, IllegalArgumentException - { - super(objectName,attributeName); - - if (min == null) - throw new IllegalArgumentException("Value cannot be null"); - - _min = min; - } - - /* ------------------------------------------------------------ */ - /** - * Compare the value of the MXBean attribute being polling - * to check if it is greater than the min value. - * - * @see org.eclipse.jetty.monitor.triggers.AttrEventTrigger#match(java.lang.Comparable) - */ - @Override - public boolean match(Comparable<TYPE> value) - { - return (value.compareTo(_min) > 0); - } - - /* ------------------------------------------------------------ */ - /** - * Returns the string representation of this event trigger - * in the format "min<name". - * - * @return string representation of the event trigger - * - * @see java.lang.Object#toString() - */ - public String toString() - { - StringBuilder result = new StringBuilder(); - - result.append(_min); - result.append("<"); - result.append(getNameString()); - - return result.toString(); - } -} diff --git a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/triggers/GreaterThanOrEqualToAttrEventTrigger.java b/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/triggers/GreaterThanOrEqualToAttrEventTrigger.java deleted file mode 100644 index 72161648ff..0000000000 --- a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/triggers/GreaterThanOrEqualToAttrEventTrigger.java +++ /dev/null @@ -1,92 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2012 Mort Bay Consulting Pty. Ltd. -// ------------------------------------------------------------------------ -// All rights reserved. This program and the accompanying materials -// are made available under the terms of the Eclipse Public License v1.0 -// and Apache License v2.0 which accompanies this distribution. -// -// The Eclipse Public License is available at -// http://www.eclipse.org/legal/epl-v10.html -// -// The Apache License v2.0 is available at -// http://www.opensource.org/licenses/apache2.0.php -// -// You may elect to redistribute this code under either of these licenses. -// ======================================================================== -// - - -package org.eclipse.jetty.monitor.triggers; - -import javax.management.MalformedObjectNameException; - - -/* ------------------------------------------------------------ */ -/** - * GreaterThanOrEqualToAttrEventTrigger - * - * Event trigger that polls a value of an MXBean attribute and - * checks if it is greater than or equal to specified min value. - */ -public class GreaterThanOrEqualToAttrEventTrigger<TYPE extends Comparable<TYPE>> extends AttrEventTrigger<TYPE> -{ - protected final TYPE _min; - - /* ------------------------------------------------------------ */ - /** - * Construct event trigger and specify the MXBean attribute - * that will be polled by this event trigger as well as min - * value of the attribute. - * - * @param objectName object name of an MBean to be polled - * @param attributeName name of an MBean attribute to be polled - * @param min minimum value of the attribute - * - * @throws MalformedObjectNameException - * @throws IllegalArgumentException - */ - public GreaterThanOrEqualToAttrEventTrigger(String objectName, String attributeName, TYPE min) - throws MalformedObjectNameException, IllegalArgumentException - { - super(objectName,attributeName); - - if (min == null) - throw new IllegalArgumentException("Value cannot be null"); - - _min = min; - } - - /* ------------------------------------------------------------ */ - /** - * Compare the value of the MXBean attribute being polling - * to check if it is greater than or equal to the min value. - * - * @see org.eclipse.jetty.monitor.triggers.AttrEventTrigger#match(java.lang.Comparable) - */ - @Override - public boolean match(Comparable<TYPE> value) - { - return (value.compareTo(_min) >= 0); - } - - /* ------------------------------------------------------------ */ - /** - * Returns the string representation of this event trigger - * in the format "min<=name". - * - * @return string representation of the event trigger - * - * @see java.lang.Object#toString() - */ - public String toString() - { - StringBuilder result = new StringBuilder(); - - result.append(_min); - result.append("<="); - result.append(getNameString()); - - return result.toString(); - } -} diff --git a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/triggers/LessThanAttrEventTrigger.java b/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/triggers/LessThanAttrEventTrigger.java deleted file mode 100644 index 1fbbad1dd6..0000000000 --- a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/triggers/LessThanAttrEventTrigger.java +++ /dev/null @@ -1,92 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2012 Mort Bay Consulting Pty. Ltd. -// ------------------------------------------------------------------------ -// All rights reserved. This program and the accompanying materials -// are made available under the terms of the Eclipse Public License v1.0 -// and Apache License v2.0 which accompanies this distribution. -// -// The Eclipse Public License is available at -// http://www.eclipse.org/legal/epl-v10.html -// -// The Apache License v2.0 is available at -// http://www.opensource.org/licenses/apache2.0.php -// -// You may elect to redistribute this code under either of these licenses. -// ======================================================================== -// - - -package org.eclipse.jetty.monitor.triggers; - -import javax.management.MalformedObjectNameException; - - -/* ------------------------------------------------------------ */ -/** - * LessThanAttrEventTrigger - * - * Event trigger that polls a value of an MXBean attribute and - * checks if it is greater than specified max value. - */ -public class LessThanAttrEventTrigger<TYPE extends Comparable<TYPE>> extends AttrEventTrigger<TYPE> -{ - protected final TYPE _max; - - /* ------------------------------------------------------------ */ - /** - * Construct event trigger and specify the MXBean attribute - * that will be polled by this event trigger as well as max - * value of the attribute. - * - * @param objectName object name of an MBean to be polled - * @param attributeName name of an MBean attribute to be polled - * @param max maximum value of the attribute - * - * @throws MalformedObjectNameException - * @throws IllegalArgumentException - */ - public LessThanAttrEventTrigger(String objectName, String attributeName, TYPE max) - throws MalformedObjectNameException, IllegalArgumentException - { - super(objectName,attributeName); - - if (max == null) - throw new IllegalArgumentException("Value cannot be null"); - - _max = max; - } - - /* ------------------------------------------------------------ */ - /** - * Compare the value of the MXBean attribute being polling - * to check if it is less than the min value. - * - * @see org.eclipse.jetty.monitor.triggers.AttrEventTrigger#match(java.lang.Comparable) - */ - @Override - public boolean match(Comparable<TYPE> value) - { - return (value.compareTo(_max) < 0); - } - - /* ------------------------------------------------------------ */ - /** - * Returns the string representation of this event trigger - * in the format "name<max". - * - * @return string representation of the event trigger - * - * @see java.lang.Object#toString() - */ - public String toString() - { - StringBuilder result = new StringBuilder(); - - result.append(getNameString()); - result.append("<"); - result.append(_max); - - return result.toString(); - } -} diff --git a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/triggers/LessThanOrEqualToAttrEventTrigger.java b/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/triggers/LessThanOrEqualToAttrEventTrigger.java deleted file mode 100644 index bc01369e24..0000000000 --- a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/triggers/LessThanOrEqualToAttrEventTrigger.java +++ /dev/null @@ -1,92 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2012 Mort Bay Consulting Pty. Ltd. -// ------------------------------------------------------------------------ -// All rights reserved. This program and the accompanying materials -// are made available under the terms of the Eclipse Public License v1.0 -// and Apache License v2.0 which accompanies this distribution. -// -// The Eclipse Public License is available at -// http://www.eclipse.org/legal/epl-v10.html -// -// The Apache License v2.0 is available at -// http://www.opensource.org/licenses/apache2.0.php -// -// You may elect to redistribute this code under either of these licenses. -// ======================================================================== -// - - -package org.eclipse.jetty.monitor.triggers; - -import javax.management.MalformedObjectNameException; - - -/* ------------------------------------------------------------ */ -/** - * LessThanOrEqualToAttrEventTrigger - * - * Event trigger that polls a value of an MXBean attribute and - * checks if it is less than or equal to specified max value. - */ -public class LessThanOrEqualToAttrEventTrigger<TYPE extends Comparable<TYPE>> extends AttrEventTrigger<TYPE> -{ - protected final TYPE _max; - - /* ------------------------------------------------------------ */ - /** - * Construct event trigger and specify the MXBean attribute - * that will be polled by this event trigger as well as max - * value of the attribute. - * - * @param objectName object name of an MBean to be polled - * @param attributeName name of an MBean attribute to be polled - * @param max maximum value of the attribute - * - * @throws MalformedObjectNameException - * @throws IllegalArgumentException - */ - public LessThanOrEqualToAttrEventTrigger(String objectName, String attributeName, TYPE max) - throws MalformedObjectNameException, IllegalArgumentException - { - super(objectName,attributeName); - - if (max == null) - throw new IllegalArgumentException("Value cannot be null"); - - _max = max; - } - - /* ------------------------------------------------------------ */ - /** - * Compare the value of the MXBean attribute being polling - * to check if it is less than or equal to the max value. - * - * @see org.eclipse.jetty.monitor.triggers.AttrEventTrigger#match(java.lang.Comparable) - */ - @Override - public boolean match(Comparable<TYPE> value) - { - return (value.compareTo(_max) <= 0); - } - - /* ------------------------------------------------------------ */ - /** - * Returns the string representation of this event trigger - * in the format "name<=max". - * - * @return string representation of the event trigger - * - * @see java.lang.Object#toString() - */ - public String toString() - { - StringBuilder result = new StringBuilder(); - - result.append(getNameString()); - result.append("<="); - result.append(_max); - - return result.toString(); - } -} diff --git a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/triggers/OrEventTrigger.java b/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/triggers/OrEventTrigger.java deleted file mode 100644 index 2f7d3b3ea1..0000000000 --- a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/triggers/OrEventTrigger.java +++ /dev/null @@ -1,138 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2012 Mort Bay Consulting Pty. Ltd. -// ------------------------------------------------------------------------ -// All rights reserved. This program and the accompanying materials -// are made available under the terms of the Eclipse Public License v1.0 -// and Apache License v2.0 which accompanies this distribution. -// -// The Eclipse Public License is available at -// http://www.eclipse.org/legal/epl-v10.html -// -// The Apache License v2.0 is available at -// http://www.opensource.org/licenses/apache2.0.php -// -// You may elect to redistribute this code under either of these licenses. -// ======================================================================== -// - -package org.eclipse.jetty.monitor.triggers; - -import java.util.Arrays; -import java.util.List; - -import org.eclipse.jetty.monitor.jmx.EventState; -import org.eclipse.jetty.monitor.jmx.EventTrigger; - - -/* ------------------------------------------------------------ */ -/** - * AndEventTrigger - * - * EventTrigger aggregation using logical OR operation - * that executes matching of the aggregated event triggers - * in left to right order - */ -public class OrEventTrigger - extends EventTrigger -{ - private final List<EventTrigger> _triggers; - - /* ------------------------------------------------------------ */ - /** - * Construct an event trigger and associate the list - * of event triggers to be aggregated by this trigger - * - * @param triggers list of event triggers to add - */ - public OrEventTrigger(List<EventTrigger> triggers) - { - _triggers = triggers; - } - - /* ------------------------------------------------------------ */ - /** - * Construct an event trigger and associate the array - * of event triggers to be aggregated by this trigger - * - * @param triggers array of event triggers to add - */ - public OrEventTrigger(EventTrigger... triggers) - { - _triggers = Arrays.asList(triggers); - } - - /* ------------------------------------------------------------ */ - /** - * Verify if the event trigger conditions are in the - * appropriate state for an event to be triggered. - * This event trigger will match if any of aggregated - * event triggers would return a match. - * - * @see org.eclipse.jetty.monitor.jmx.EventTrigger#match(long) - */ - public boolean match(long timestamp) - throws Exception - { - for(EventTrigger trigger : _triggers) - { - if (trigger.match(timestamp)) - return true; - } - return false; - } - - /* ------------------------------------------------------------ */ - /** - * Retrieve the event state associated with specified invocation - * of the event trigger match method. This event trigger retrieves - * the combined event state of all aggregated event triggers. - * - * @param timestamp time stamp associated with invocation - * @return event state or null if not found - * - * @see org.eclipse.jetty.monitor.jmx.EventTrigger#getState(long) - */ - @Override - @SuppressWarnings("unchecked") - public EventState getState(long timestamp) - { - EventState state = new EventState(); - - for (EventTrigger trigger : _triggers) - { - EventState subState = trigger.getState(timestamp); - if (subState!=null) - { - state.addAll(subState.values()); - } - } - - return state; - } - - /* ------------------------------------------------------------ */ - /** - * Returns the string representation of this event trigger - * in the format "OR(triger1,trigger2,...)". - * - * @return string representation of the event trigger - * - * @see java.lang.Object#toString() - */ - public String toString() - { - int cnt = 0; - StringBuilder result = new StringBuilder(); - - result.append("OR("); - for (EventTrigger trigger : _triggers) - { - result.append(cnt++ > 0 ? "," : ""); - result.append(trigger); - } - result.append(')'); - - return result.toString(); - } -} diff --git a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/triggers/RangeAttrEventTrigger.java b/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/triggers/RangeAttrEventTrigger.java deleted file mode 100644 index b4ae413faa..0000000000 --- a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/triggers/RangeAttrEventTrigger.java +++ /dev/null @@ -1,101 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2012 Mort Bay Consulting Pty. Ltd. -// ------------------------------------------------------------------------ -// All rights reserved. This program and the accompanying materials -// are made available under the terms of the Eclipse Public License v1.0 -// and Apache License v2.0 which accompanies this distribution. -// -// The Eclipse Public License is available at -// http://www.eclipse.org/legal/epl-v10.html -// -// The Apache License v2.0 is available at -// http://www.opensource.org/licenses/apache2.0.php -// -// You may elect to redistribute this code under either of these licenses. -// ======================================================================== -// - - -package org.eclipse.jetty.monitor.triggers; - -import javax.management.MalformedObjectNameException; - - -/* ------------------------------------------------------------ */ -/** - * RangeAttrEventTrigger - * - * Event trigger that polls a value of an MXBean attribute and - * checks if it is in a range from specified min value to - * specified max value. - */ -public class RangeAttrEventTrigger<TYPE extends Comparable<TYPE>> extends AttrEventTrigger<TYPE> -{ - protected final TYPE _min; - protected final TYPE _max; - - /* ------------------------------------------------------------ */ - /** - * Construct event trigger and specify the MXBean attribute - * that will be polled by this event trigger as well as min - * and max value of the attribute. - * - * @param objectName object name of an MBean to be polled - * @param attributeName name of an MBean attribute to be polled - * @param min minimum value of the attribute - * @param max maximum value of the attribute - * - * @throws MalformedObjectNameException - * @throws IllegalArgumentException - */ - public RangeAttrEventTrigger(String objectName, String attributeName,TYPE min, TYPE max) - throws MalformedObjectNameException, IllegalArgumentException - { - super(objectName,attributeName); - - if (min == null) - throw new IllegalArgumentException("Value cannot be null"); - if (max == null) - throw new IllegalArgumentException("Value cannot be null"); - - _min = min; - _max = max; - } - - /* ------------------------------------------------------------ */ - /** - * Compare the value of the MXBean attribute being polling - * to check if it is in a range from specified min value to - * specified max value. - * - * @see org.eclipse.jetty.monitor.triggers.AttrEventTrigger#match(java.lang.Comparable) - */ - @Override - public boolean match(Comparable<TYPE> value) - { - return (value.compareTo(_min) > 0) &&(value.compareTo(_max) < 0); - } - - /* ------------------------------------------------------------ */ - /** - * Returns the string representation of this event trigger - * in the format "min<name<max". - * - * @return string representation of the event trigger - * - * @see java.lang.Object#toString() - */ - public String toString() - { - StringBuilder result = new StringBuilder(); - - result.append(_min); - result.append("<"); - result.append(getNameString()); - result.append("<"); - result.append(_max); - - return result.toString(); - } -} diff --git a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/triggers/RangeInclAttrEventTrigger.java b/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/triggers/RangeInclAttrEventTrigger.java deleted file mode 100644 index d5b744fb80..0000000000 --- a/jetty-monitor/src/main/java/org/eclipse/jetty/monitor/triggers/RangeInclAttrEventTrigger.java +++ /dev/null @@ -1,101 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2012 Mort Bay Consulting Pty. Ltd. -// ------------------------------------------------------------------------ -// All rights reserved. This program and the accompanying materials -// are made available under the terms of the Eclipse Public License v1.0 -// and Apache License v2.0 which accompanies this distribution. -// -// The Eclipse Public License is available at -// http://www.eclipse.org/legal/epl-v10.html -// -// The Apache License v2.0 is available at -// http://www.opensource.org/licenses/apache2.0.php -// -// You may elect to redistribute this code under either of these licenses. -// ======================================================================== -// - - -package org.eclipse.jetty.monitor.triggers; - -import javax.management.MalformedObjectNameException; - - -/* ------------------------------------------------------------ */ -/** - * RangeInclAttrEventTrigger - * - * Event trigger that polls a value of an MXBean attribute and - * checks if it is in a range from specified min value to - * specified max value including the range bounds. - */ -public class RangeInclAttrEventTrigger<TYPE extends Comparable<TYPE>> extends AttrEventTrigger<TYPE> -{ - protected final TYPE _min; - protected final TYPE _max; - - /* ------------------------------------------------------------ */ - /** - * Construct event trigger and specify the MXBean attribute - * that will be polled by this event trigger as well as min - * and max value of the attribute. - * - * @param objectName object name of an MBean to be polled - * @param attributeName name of an MBean attribute to be polled - * @param min minimum value of the attribute - * @param max maximum value of the attribute - * - * @throws MalformedObjectNameException - * @throws IllegalArgumentException - */ - public RangeInclAttrEventTrigger(String objectName, String attributeName,TYPE min, TYPE max) - throws MalformedObjectNameException, IllegalArgumentException - { - super(objectName,attributeName); - - if (min == null) - throw new IllegalArgumentException("Value cannot be null"); - if (max == null) - throw new IllegalArgumentException("Value cannot be null"); - - _min = min; - _max = max; - } - - /* ------------------------------------------------------------ */ - /** - * Compare the value of the MXBean attribute being polling - * to check if it is in a range from specified min value to - * specified max value including the range bounds. - * - * @see org.eclipse.jetty.monitor.triggers.AttrEventTrigger#match(java.lang.Comparable) - */ - @Override - public boolean match(Comparable<TYPE> value) - { - return (value.compareTo(_min) >= 0) &&(value.compareTo(_max) <= 0); - } - - /* ------------------------------------------------------------ */ - /** - * Returns the string representation of this event trigger - * in the format "min<=name<=max". - * - * @return string representation of the event trigger - * - * @see java.lang.Object#toString() - */ - public String toString() - { - StringBuilder result = new StringBuilder(); - - result.append(_min); - result.append("<="); - result.append(getNameString()); - result.append("<="); - result.append(_max); - - return result.toString(); - } -} diff --git a/jetty-monitor/src/test/java/org/eclipse/jetty/monitor/AttrEventTriggerTest.java b/jetty-monitor/src/test/java/org/eclipse/jetty/monitor/AttrEventTriggerTest.java deleted file mode 100644 index 875097c544..0000000000 --- a/jetty-monitor/src/test/java/org/eclipse/jetty/monitor/AttrEventTriggerTest.java +++ /dev/null @@ -1,502 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2012 Mort Bay Consulting Pty. Ltd. -// ------------------------------------------------------------------------ -// All rights reserved. This program and the accompanying materials -// are made available under the terms of the Eclipse Public License v1.0 -// and Apache License v2.0 which accompanies this distribution. -// -// The Eclipse Public License is available at -// http://www.eclipse.org/legal/epl-v10.html -// -// The Apache License v2.0 is available at -// http://www.opensource.org/licenses/apache2.0.php -// -// You may elect to redistribute this code under either of these licenses. -// ======================================================================== -// - -package org.eclipse.jetty.monitor; - -import java.io.File; -import java.io.IOException; -import java.io.PrintWriter; -import java.lang.management.ManagementFactory; -import java.util.Collection; -import java.util.Iterator; -import java.util.TreeSet; -import javax.management.MBeanServer; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.eclipse.jetty.client.ContentExchange; -import org.eclipse.jetty.client.HttpClient; -import org.eclipse.jetty.client.api.ContentResponse; -import org.eclipse.jetty.client.security.Realm; -import org.eclipse.jetty.client.security.SimpleRealmResolver; -import org.eclipse.jetty.http.HttpMethods; -import org.eclipse.jetty.http.HttpStatus; -import org.eclipse.jetty.jmx.MBeanContainer; -import org.eclipse.jetty.monitor.jmx.ConsoleNotifier; -import org.eclipse.jetty.monitor.jmx.EventNotifier; -import org.eclipse.jetty.monitor.jmx.EventState; -import org.eclipse.jetty.monitor.jmx.EventState.TriggerState; -import org.eclipse.jetty.monitor.jmx.EventTrigger; -import org.eclipse.jetty.monitor.jmx.MonitorAction; -import org.eclipse.jetty.monitor.triggers.AndEventTrigger; -import org.eclipse.jetty.monitor.triggers.AttrEventTrigger; -import org.eclipse.jetty.monitor.triggers.EqualToAttrEventTrigger; -import org.eclipse.jetty.monitor.triggers.GreaterThanAttrEventTrigger; -import org.eclipse.jetty.monitor.triggers.GreaterThanOrEqualToAttrEventTrigger; -import org.eclipse.jetty.monitor.triggers.LessThanAttrEventTrigger; -import org.eclipse.jetty.monitor.triggers.LessThanOrEqualToAttrEventTrigger; -import org.eclipse.jetty.monitor.triggers.OrEventTrigger; -import org.eclipse.jetty.monitor.triggers.RangeAttrEventTrigger; -import org.eclipse.jetty.monitor.triggers.RangeInclAttrEventTrigger; -import org.eclipse.jetty.server.Request; -import org.eclipse.jetty.server.Server; -import org.eclipse.jetty.server.ServerConnector; -import org.eclipse.jetty.server.handler.AbstractHandler; -import org.eclipse.jetty.server.nio.SelectChannelConnector; -import org.eclipse.jetty.util.log.Log; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - - -/* ------------------------------------------------------------ */ -/** - */ -public class AttrEventTriggerTest -{ - private Server _server; - private TestHandler _handler; - private RequestCounter _counter; - private JMXMonitor _monitor; - private HttpClient _client; - private String _requestUrl; - - @Before - public void setUp() - throws Exception - { - File docRoot = new File("target/test-output/docroot/"); - docRoot.mkdirs(); - docRoot.deleteOnExit(); - - System.setProperty("org.eclipse.jetty.util.log.DEBUG",""); - _server = new Server(); - - ServerConnector connector = new ServerConnector(_server); - _server.addConnector(connector); - - _handler = new TestHandler(); - _server.setHandler(_handler); - - MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer(); - MBeanContainer mBeanContainer = new MBeanContainer(mBeanServer); - mBeanContainer.addBean(Log.getLog()); - - _counter = _handler.getRequestCounter(); - mBeanContainer.addBean(_counter); - - _server.addBean(mBeanContainer, true); - _server.getContainer().addEventListener(mBeanContainer); - _server.start(); - - startClient(null); - - _monitor = new JMXMonitor(); - - int port = connector.getLocalPort(); - _requestUrl = "http://localhost:"+port+ "/"; - } - - @After - public void tearDown() - throws Exception - { - stopClient(); - - if (_server != null) - { - _server.stop(); - _server = null; - } - } - - @Test - public void testNoCondition() - throws Exception - { - long requestCount = 10; - - AttrEventTrigger<Long> trigger = - new AttrEventTrigger<Long>("org.eclipse.jetty.monitor:type=requestcounter,id=0", "counter"); - - EventNotifier notifier = new ConsoleNotifier("%s"); - CounterAction action = new CounterAction(trigger, notifier, 500, 100); - - performTest(action, requestCount, 1000); - - ResultSet result = new ResultSet(1,requestCount); - assertEquals(result, action.getHits()); - } - - @Test - public void testEqual_TRUE() - throws Exception - { - long requestCount = 10; - long testValue = 5; - - EqualToAttrEventTrigger<Long> trigger = - new EqualToAttrEventTrigger<Long>("org.eclipse.jetty.monitor:type=requestcounter,id=0", "counter",testValue); - - EventNotifier notifier = new ConsoleNotifier("%s"); - CounterAction action = new CounterAction(trigger, notifier, 500, 100); - - performTest(action, requestCount, 1000); - - ResultSet result = new ResultSet(testValue); - assertEquals(result, action.getHits()); - } - - @Test - public void testEqual_FALSE() - throws Exception - { - long requestCount = 10; - long testValue = 11; - - EqualToAttrEventTrigger<Long> trigger = - new EqualToAttrEventTrigger<Long>("org.eclipse.jetty.monitor:type=requestcounter,id=0", "counter", - testValue); - - EventNotifier notifier = new ConsoleNotifier("%s"); - CounterAction action = new CounterAction(trigger, notifier, 500, 100); - - performTest(action, requestCount, 1000); - - ResultSet result = new ResultSet(); - assertEquals(result, action.getHits()); - } - - @Test - public void testLowerLimit() - throws Exception - { - long requestCount = 10; - long testRangeLow = 5; - - GreaterThanAttrEventTrigger<Long> trigger = - new GreaterThanAttrEventTrigger<Long>("org.eclipse.jetty.monitor:type=requestcounter,id=0", "counter", - testRangeLow); - - EventNotifier notifier = new ConsoleNotifier("%s"); - CounterAction action = new CounterAction(trigger, notifier, 500, 100); - - performTest(action, requestCount, 1000); - - ResultSet result = new ResultSet(6,10); - assertEquals(result, action.getHits()); - } - - @Test - public void testLowerLimitIncl() - throws Exception - { - long requestCount = 10; - long testRangeLow = 5; - - GreaterThanOrEqualToAttrEventTrigger<Long> trigger = - new GreaterThanOrEqualToAttrEventTrigger<Long>("org.eclipse.jetty.monitor:type=requestcounter,id=0", "counter", - testRangeLow); - - EventNotifier notifier = new ConsoleNotifier("%s"); - CounterAction action = new CounterAction(trigger, notifier, 500, 100); - - performTest(action, requestCount, 1000); - - ResultSet result = new ResultSet(5,10); - assertEquals(result, action.getHits()); - } - - @Test - public void testUpperLimit() - throws Exception - { - long requestCount = 10; - long testRangeHigh = 5; - - LessThanAttrEventTrigger<Long> trigger = - new LessThanAttrEventTrigger<Long>("org.eclipse.jetty.monitor:type=requestcounter,id=0", "counter", - testRangeHigh); - - EventNotifier notifier = new ConsoleNotifier("%s"); - CounterAction action = new CounterAction(trigger, notifier, 500, 100); - - performTest(action, requestCount, 1000); - - ResultSet result = new ResultSet(1,4); - assertEquals(result, action.getHits()); - } - - - @Test - public void testUpperLimitIncl() - throws Exception - { - long requestCount = 10; - long testRangeHigh = 5; - - LessThanOrEqualToAttrEventTrigger<Long> trigger = - new LessThanOrEqualToAttrEventTrigger<Long>("org.eclipse.jetty.monitor:type=requestcounter,id=0", "counter", - testRangeHigh); - - EventNotifier notifier = new ConsoleNotifier("%s"); - CounterAction action = new CounterAction(trigger, notifier, 500, 100); - - performTest(action, requestCount, 1000); - - ResultSet result = new ResultSet(1,5); - assertEquals(result, action.getHits()); - } - - @Test - public void testRangeInclusive() - throws Exception - { - long requestCount = 10; - long testRangeLow = 3; - long testRangeHigh = 8; - - RangeInclAttrEventTrigger<Long> trigger = - new RangeInclAttrEventTrigger<Long>("org.eclipse.jetty.monitor:type=requestcounter,id=0", "counter", - testRangeLow, testRangeHigh); - - EventNotifier notifier = new ConsoleNotifier("%s"); - CounterAction action = new CounterAction(trigger, notifier, 500, 100); - - performTest(action, requestCount, 1000); - - ResultSet result = new ResultSet(testRangeLow,testRangeHigh); - assertEquals(result, action.getHits()); - } - - @Test - public void testInsideRangeExclusive() - throws Exception - { - long requestCount = 10; - long testRangeLow = 3; - long testRangeHigh = 8; - - RangeAttrEventTrigger<Long> trigger = - new RangeAttrEventTrigger<Long>("org.eclipse.jetty.monitor:type=requestcounter,id=0", "counter", - testRangeLow, testRangeHigh); - - EventNotifier notifier = new ConsoleNotifier("%s"); - CounterAction action = new CounterAction(trigger, notifier, 500, 100); - - performTest(action, requestCount, 1000); - - ResultSet result = new ResultSet(testRangeLow+1,testRangeHigh-1); - assertEquals(result, action.getHits()); - } - - @Test - public void testRangeComposite() - throws Exception - { - long requestCount = 10; - long testRangeLow = 4; - long testRangeHigh = 7; - - GreaterThanAttrEventTrigger<Long> trigger1 = - new GreaterThanAttrEventTrigger<Long>("org.eclipse.jetty.monitor:type=requestcounter,id=0", "counter", - testRangeLow); - LessThanOrEqualToAttrEventTrigger<Long> trigger2 = - new LessThanOrEqualToAttrEventTrigger<Long>("org.eclipse.jetty.monitor:type=requestcounter,id=0", "counter", - testRangeHigh); - AndEventTrigger trigger = new AndEventTrigger(trigger1, trigger2); - EventNotifier notifier = new ConsoleNotifier("%s"); - CounterAction action = new CounterAction(trigger, notifier, 500, 100); - - performTest(action, requestCount, 1000); - - ResultSet result = new ResultSet(testRangeLow+1,testRangeHigh); - assertEquals(result, action.getHits()); - } - - @Test - public void testRangeOuter() - throws Exception - { - long requestCount = 10; - long testRangeLow = 4; - long testRangeHigh = 7; - - LessThanOrEqualToAttrEventTrigger<Long> trigger1 = - new LessThanOrEqualToAttrEventTrigger<Long>("org.eclipse.jetty.monitor:type=requestcounter,id=0", "counter", - testRangeLow); - GreaterThanAttrEventTrigger<Long> trigger2 = - new GreaterThanAttrEventTrigger<Long>("org.eclipse.jetty.monitor:type=requestcounter,id=0", "counter", - testRangeHigh); - OrEventTrigger trigger = new OrEventTrigger(trigger1, trigger2); - EventNotifier notifier = new ConsoleNotifier("%s"); - CounterAction action = new CounterAction(trigger, notifier, 500, 100); - - performTest(action, requestCount, 1000); - - ResultSet result = new ResultSet(1,testRangeLow,testRangeHigh+1, requestCount); - assertEquals(result, action.getHits()); - } - - protected void performTest(MonitorAction action, long count, long interval) - throws Exception - { - _monitor.addActions(action); - - for (long cnt=0; cnt < count; cnt++) - { - try - { - ContentResponse response = _client.GET(_requestUrl).get(); - - assertEquals(HttpStatus.OK_200,response.getStatus()); - Thread.sleep(interval); - } - catch (InterruptedException ex) - { - break; - } - } - - Thread.sleep(interval); - - _monitor.removeActions(action); - } - - protected void startClient(Realm realm) - throws Exception - { - _client = new HttpClient(); - _client.setConnectorType(HttpClient.CONNECTOR_SELECT_CHANNEL); - if (realm != null) - _client.setRealmResolver(new SimpleRealmResolver(realm)); - _client.start(); - } - - protected void stopClient() - throws Exception - { - if (_client != null) - { - _client.stop(); - _client = null; - } - } - - protected static class TestHandler - extends AbstractHandler - { - private RequestCounter _counter = new RequestCounter(); - - public void handle(String target, Request baseRequest, - HttpServletRequest request, HttpServletResponse response) - throws IOException, ServletException - { - if (baseRequest.isHandled()) { - return; - } - _counter.increment(); - - response.setContentType("text/plain"); - response.setStatus(HttpServletResponse.SC_OK); - PrintWriter writer = response.getWriter(); - writer.println("===TEST RESPONSE==="); - baseRequest.setHandled(true); - } - - public RequestCounter getRequestCounter() - { - return _counter; - } - } - - protected static class ResultSet extends TreeSet<Long> - { - public ResultSet() {} - - public ResultSet(long value) - { - add(value); - } - - public ResultSet(long start, long end) - { - addEntries(start, end); - } - - public ResultSet(long start, long pause, long resume, long end) - { - addEntries(start, pause); - addEntries(resume, end); - } - - public void addEntries(long start, long stop) - { - if (start > 0 && stop > 0) - { - for(long idx=start; idx <= stop; idx++) - { - add(idx); - } - } - } - - public boolean equals(ResultSet set) - { - return (this.size() == set.size()) && containsAll(set); - } - } - - protected static class CounterAction - extends MonitorAction - { - private ResultSet _hits = new ResultSet(); - - public CounterAction(EventTrigger trigger, EventNotifier notifier, long interval, long delay) - { - super(trigger, notifier, interval, delay); - } - - public void execute(EventTrigger trigger, EventState<?> state, long timestamp) - { - if (trigger != null && state != null) - { - Collection<?> values = state.values(); - - Iterator<?> it = values.iterator(); - while(it.hasNext()) - { - TriggerState<?> entry = (TriggerState<?>)it.next(); - Object value = entry.getValue(); - if (value != null) - { - _hits.add((Long)value); - } - } - } - } - - public ResultSet getHits() - { - return _hits; - } - } -} diff --git a/jetty-monitor/src/test/java/org/eclipse/jetty/monitor/RequestCounter.java b/jetty-monitor/src/test/java/org/eclipse/jetty/monitor/RequestCounter.java deleted file mode 100644 index 4987792643..0000000000 --- a/jetty-monitor/src/test/java/org/eclipse/jetty/monitor/RequestCounter.java +++ /dev/null @@ -1,46 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2012 Mort Bay Consulting Pty. Ltd. -// ------------------------------------------------------------------------ -// All rights reserved. This program and the accompanying materials -// are made available under the terms of the Eclipse Public License v1.0 -// and Apache License v2.0 which accompanies this distribution. -// -// The Eclipse Public License is available at -// http://www.eclipse.org/legal/epl-v10.html -// -// The Apache License v2.0 is available at -// http://www.opensource.org/licenses/apache2.0.php -// -// You may elect to redistribute this code under either of these licenses. -// ======================================================================== -// - -package org.eclipse.jetty.monitor; - -import org.eclipse.jetty.util.annotation.ManagedAttribute; -import org.eclipse.jetty.util.annotation.ManagedObject; -import org.eclipse.jetty.util.annotation.ManagedOperation; - -@ManagedObject("Request Counter") -public class RequestCounter -{ - public long _counter; - - @ManagedAttribute("current value of the counter") - public synchronized long getCounter() - { - return _counter; - } - - @ManagedOperation("increment the counter") - public synchronized void increment() - { - _counter++; - } - - public synchronized void reset() - { - _counter = 0; - } -} diff --git a/jetty-monitor/src/test/java/org/eclipse/jetty/monitor/ThreadMonitorTest.java b/jetty-monitor/src/test/java/org/eclipse/jetty/monitor/ThreadMonitorTest.java deleted file mode 100644 index 31d539d521..0000000000 --- a/jetty-monitor/src/test/java/org/eclipse/jetty/monitor/ThreadMonitorTest.java +++ /dev/null @@ -1,164 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2012 Mort Bay Consulting Pty. Ltd. -// ------------------------------------------------------------------------ -// All rights reserved. This program and the accompanying materials -// are made available under the terms of the Eclipse Public License v1.0 -// and Apache License v2.0 which accompanies this distribution. -// -// The Eclipse Public License is available at -// http://www.eclipse.org/legal/epl-v10.html -// -// The Apache License v2.0 is available at -// http://www.opensource.org/licenses/apache2.0.php -// -// You may elect to redistribute this code under either of these licenses. -// ======================================================================== -// - - -package org.eclipse.jetty.monitor; - -import static org.junit.Assert.assertTrue; - -import java.io.IOException; -import java.util.Random; -import java.util.concurrent.atomic.AtomicInteger; - -import org.eclipse.jetty.util.component.Dumpable; -import org.eclipse.jetty.util.log.Log; -import org.eclipse.jetty.util.log.StdErrLog; -import org.junit.Test; - - -/* ------------------------------------------------------------ */ -/** - */ -public class ThreadMonitorTest -{ - public final static int DURATION=4000; - - @Test - public void monitorTest() throws Exception - { - ((StdErrLog)Log.getLogger(ThreadMonitor.class.getName())).setHideStacks(true); - ((StdErrLog)Log.getLogger(ThreadMonitor.class.getName())).setSource(false); - - final AtomicInteger countLogs=new AtomicInteger(0); - final AtomicInteger countSpin=new AtomicInteger(0); - - ThreadMonitor monitor = new ThreadMonitor(1000,50,1,1) - { - @Override - protected void logThreadInfo(boolean logAll) - { - if (logAll) - countLogs.incrementAndGet(); - else - countSpin.incrementAndGet(); - super.logThreadInfo(logAll); - } - }; - monitor.setDumpable(new Dumpable() - { - public void dump(Appendable out, String indent) throws IOException - { - out.append(dump()); - } - - public String dump() - { - return "Dump Spinning"; - } - }); - - monitor.logCpuUsage(2000,0); - monitor.start(); - - Random rnd = new Random(); - for (long cnt=0; cnt<100; cnt++) - { - long value = rnd.nextLong() % 50 + 50; - Sleeper sleeper = new Sleeper(value); - Thread runner = new Thread(sleeper); - runner.setDaemon(true); - runner.start(); - } - - Spinner spinner = new Spinner(); - Thread runner = new Thread(spinner); - runner.start(); - - Thread.sleep(DURATION); - - spinner.setDone(); - monitor.stop(); - - assertTrue(countLogs.get() >= 1); - assertTrue(countSpin.get() >= 2); - } - - - private class Spinner implements Runnable - { - private volatile boolean done = false; - - /* ------------------------------------------------------------ */ - public void setDone() - { - done = true; - } - - /* ------------------------------------------------------------ */ - public void run() - { - spin(); - } - - /* ------------------------------------------------------------ */ - public void spin() - { - long result=-1; - long end=System.currentTimeMillis()+DURATION+1000; - while (!done && System.currentTimeMillis()<end) - { - for (int i=0;i<1000000000;i++) - result^=i; - } - - if (result==42) - System.err.println("Bingo!"); - } - } - - private class Sleeper implements Runnable - { - private long _value; - - /* ------------------------------------------------------------ */ - public Sleeper(long value) - { - _value = value; - } - - /* ------------------------------------------------------------ */ - public void run() - { - try - { - fn(_value); - } - catch (InterruptedException e) {} - } - - /* ------------------------------------------------------------ */ - public long fn(long value) throws InterruptedException - { - long result = value > 1 ? fn(value-1) : 1; - - Thread.sleep(50); - - return result; - } - } -} |