Return-Path: Delivered-To: apmail-geronimo-scm-archive@www.apache.org Received: (qmail 4751 invoked from network); 4 Oct 2007 14:47:43 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 4 Oct 2007 14:47:43 -0000 Received: (qmail 72058 invoked by uid 500); 4 Oct 2007 14:47:32 -0000 Delivered-To: apmail-geronimo-scm-archive@geronimo.apache.org Received: (qmail 72025 invoked by uid 500); 4 Oct 2007 14:47:32 -0000 Mailing-List: contact scm-help@geronimo.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: List-Post: Reply-To: dev@geronimo.apache.org List-Id: Delivered-To: mailing list scm@geronimo.apache.org Received: (qmail 71766 invoked by uid 99); 4 Oct 2007 14:47:31 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 04 Oct 2007 07:47:31 -0700 X-ASF-Spam-Status: No, hits=-100.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 04 Oct 2007 14:47:40 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 6A81A1A9832; Thu, 4 Oct 2007 07:47:20 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r581936 - in /geronimo/server/trunk/modules: geronimo-jetty6/src/main/java/org/apache/geronimo/jetty6/ geronimo-jetty6/src/main/java/org/apache/geronimo/jetty6/connector/ geronimo-jetty6/src/test/java/org/apache/geronimo/jetty6/ geronimo-ma... Date: Thu, 04 Oct 2007 14:47:01 -0000 To: scm@geronimo.apache.org From: akulshreshtha@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20071004144720.6A81A1A9832@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: akulshreshtha Date: Thu Oct 4 07:46:56 2007 New Revision: 581936 URL: http://svn.apache.org/viewvc?rev=581936&view=rev Log: GERONIMO-3490 Adding JSR77 stats for Jetty connectors. This a substantially modified version of the patch submitted by Viet H. N. Added: geronimo/server/trunk/modules/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty6/JettyWebConnectorStats.java (with props) geronimo/server/trunk/modules/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty6/JettyWebConnectorStatsImpl.java (with props) geronimo/server/trunk/modules/geronimo-jetty6/src/test/java/org/apache/geronimo/jetty6/StatTest.java (with props) geronimo/server/trunk/modules/geronimo-management/src/main/java/org/apache/geronimo/management/geronimo/stats/TomcatWebConnectorStats.java (with props) geronimo/server/trunk/modules/geronimo-management/src/main/java/org/apache/geronimo/management/geronimo/stats/TomcatWebConnectorStatsImpl.java - copied, changed from r581647, geronimo/server/trunk/modules/geronimo-management/src/main/java/org/apache/geronimo/management/stats/WebConnectorStatsImpl.java Modified: geronimo/server/trunk/modules/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty6/connector/JettyConnector.java geronimo/server/trunk/modules/geronimo-jetty6/src/test/java/org/apache/geronimo/jetty6/AbstractWebModuleTest.java geronimo/server/trunk/modules/geronimo-management/src/main/java/org/apache/geronimo/management/geronimo/stats/WebConnectorStats.java geronimo/server/trunk/modules/geronimo-management/src/main/java/org/apache/geronimo/management/stats/StatsImpl.java geronimo/server/trunk/modules/geronimo-management/src/main/java/org/apache/geronimo/management/stats/WebConnectorStatsImpl.java geronimo/server/trunk/modules/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/stats/ConnectorStats.java Added: geronimo/server/trunk/modules/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty6/JettyWebConnectorStats.java URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty6/JettyWebConnectorStats.java?rev=581936&view=auto ============================================================================== --- geronimo/server/trunk/modules/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty6/JettyWebConnectorStats.java (added) +++ geronimo/server/trunk/modules/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty6/JettyWebConnectorStats.java Thu Oct 4 07:46:56 2007 @@ -0,0 +1,47 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.geronimo.jetty6; + +import org.apache.geronimo.management.geronimo.stats.WebConnectorStats; + +import javax.management.j2ee.statistics.RangeStatistic; +import javax.management.j2ee.statistics.TimeStatistic; +import javax.management.j2ee.statistics.CountStatistic; + +public interface JettyWebConnectorStats extends WebConnectorStats { + /** + * Gets the number of connections since statistics gathering started. + */ + CountStatistic getConnectionsCount(); + + /** + * Gets the number of request count since statistics gathering started. + */ + CountStatistic getRequestCount(); + + /** + * Gets the avg, min, max, and total connection duration time since + * statistics gathering started. + */ + TimeStatistic getConnectionsDuration(); + + /** + * Gets the min, max, current number of connection requests since statistics gathering started. + */ + RangeStatistic getConnectionsRequest(); +} Propchange: geronimo/server/trunk/modules/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty6/JettyWebConnectorStats.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: geronimo/server/trunk/modules/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty6/JettyWebConnectorStats.java ------------------------------------------------------------------------------ svn:keywords = Date Revision Propchange: geronimo/server/trunk/modules/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty6/JettyWebConnectorStats.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: geronimo/server/trunk/modules/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty6/JettyWebConnectorStatsImpl.java URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty6/JettyWebConnectorStatsImpl.java?rev=581936&view=auto ============================================================================== --- geronimo/server/trunk/modules/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty6/JettyWebConnectorStatsImpl.java (added) +++ geronimo/server/trunk/modules/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty6/JettyWebConnectorStatsImpl.java Thu Oct 4 07:46:56 2007 @@ -0,0 +1,116 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +package org.apache.geronimo.jetty6; + +import org.apache.geronimo.management.stats.CountStatisticImpl; +import org.apache.geronimo.management.stats.RangeStatisticImpl; +import org.apache.geronimo.management.stats.StatisticImpl; +import org.apache.geronimo.management.stats.TimeStatisticImpl; +import org.apache.geronimo.management.stats.StatsImpl; +import org.apache.geronimo.management.stats.WebConnectorStatsImpl; + +import javax.management.j2ee.statistics.RangeStatistic; +import javax.management.j2ee.statistics.TimeStatistic; +import javax.management.j2ee.statistics.CountStatistic; + +/** + * Jetty Web Connector class for JSR-77 stats. + */ +public class JettyWebConnectorStatsImpl extends WebConnectorStatsImpl implements JettyWebConnectorStats { + private CountStatisticImpl connectionsCount; + private CountStatisticImpl requestCount; + private TimeStatisticImpl connectionsDuration; + private RangeStatisticImpl connectionsRequest; + + public JettyWebConnectorStatsImpl() { + connectionsCount = new CountStatisticImpl("Connections Count", StatisticImpl.UNIT_COUNT, + "Total number of connections made to server", 0); + requestCount = new CountStatisticImpl("Request Count", StatisticImpl.UNIT_COUNT, + "Total number of requests made to server", 0); + connectionsDuration = new TimeStatisticImpl("Connections Duration", StatisticImpl.UNIT_TIME_MILLISECOND, + "Duration of a connection"); + connectionsRequest = new RangeStatisticImpl("Connections Request", StatisticImpl.UNIT_COUNT, + "Range for connections requested during the observed period", 0); // all 0's + + addStat("ConnectionsCount", connectionsCount); + addStat("RequestCount", requestCount); + addStat("ConnectionsDuration", connectionsDuration); + addStat("ConnectionsRequest", connectionsRequest); + } + + /** + * Gets the number of connections since statistics gathering started. + */ + public CountStatistic getConnectionsCount() { + return connectionsCount; + } + + /** + * Gets the number of request count since statistics gathering started. + */ + public CountStatistic getRequestCount() { + return requestCount; + } + + /** + * Gets the avg, min, max, and total connection duration time since + * statistics gathering started. + */ + public TimeStatistic getConnectionsDuration() { + return connectionsDuration; + } + + /** + * Gets the min, max, current number of connection requests since statistics gathering started. + */ + public RangeStatistic getConnectionsRequest() { + return connectionsRequest; + } + + /** + * Gets the number of connections since statistics gathering started. + */ + public CountStatisticImpl getConnectionsCountImpl() { + return connectionsCount; + } + + /** + * Gets the number of request count since statistics gathering started. + */ + public CountStatisticImpl getRequestCountImpl() { + return requestCount; + } + + /** + * Gets the avg, min, max, and total connection duration time since + * statistics gathering started. + */ + public TimeStatisticImpl getConnectionsDurationImpl() { + return connectionsDuration; + } + + /** + * Gets the min, max, current number of connection requests since statistics gathering started. + */ + public RangeStatisticImpl getConnectionsRequestImpl() { + return connectionsRequest; + } +} Propchange: geronimo/server/trunk/modules/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty6/JettyWebConnectorStatsImpl.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: geronimo/server/trunk/modules/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty6/JettyWebConnectorStatsImpl.java ------------------------------------------------------------------------------ svn:keywords = Date Revision Propchange: geronimo/server/trunk/modules/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty6/JettyWebConnectorStatsImpl.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Modified: geronimo/server/trunk/modules/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty6/connector/JettyConnector.java URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty6/connector/JettyConnector.java?rev=581936&r1=581935&r2=581936&view=diff ============================================================================== --- geronimo/server/trunk/modules/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty6/connector/JettyConnector.java (original) +++ geronimo/server/trunk/modules/geronimo-jetty6/src/main/java/org/apache/geronimo/jetty6/connector/JettyConnector.java Thu Oct 4 07:46:56 2007 @@ -21,12 +21,16 @@ import java.net.InetSocketAddress; import java.net.UnknownHostException; +import javax.management.j2ee.statistics.Stats; + import org.apache.geronimo.gbean.GBeanInfo; import org.apache.geronimo.gbean.GBeanInfoBuilder; import org.apache.geronimo.gbean.GBeanLifecycle; import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory; import org.apache.geronimo.jetty6.JettyContainer; import org.apache.geronimo.jetty6.JettyWebConnector; +import org.apache.geronimo.jetty6.JettyWebConnectorStatsImpl; +import org.apache.geronimo.management.StatisticsProvider; import org.apache.geronimo.system.threads.ThreadPool; import org.mortbay.jetty.AbstractConnector; @@ -35,10 +39,11 @@ * * @version $Rev$ $Date$ */ -public abstract class JettyConnector implements GBeanLifecycle, JettyWebConnector { +public abstract class JettyConnector implements GBeanLifecycle, JettyWebConnector, StatisticsProvider { public final static String CONNECTOR_CONTAINER_REFERENCE = "JettyContainer"; private final JettyContainer container; protected final AbstractConnector listener; + private JettyWebConnectorStatsImpl stats; // data structure for jsr77 stats private String connectHost; /** @@ -61,6 +66,7 @@ JettyThreadPool jettyThreadPool = new JettyThreadPool(threadPool, name); listener.setThreadPool(jettyThreadPool); } + stats = new JettyWebConnectorStatsImpl(); } //TODO: support the jetty6 specific methods @@ -173,7 +179,6 @@ } } - public void setRedirectPort(int port) { throw new UnsupportedOperationException("No redirect port on " + this.getClass().getName()); } @@ -208,6 +213,58 @@ } } } + + public void statsOn(Boolean on) { + listener.setStatsOn(on); + if (on) stats.setStartTime(); + } + + /** + * Gets the statistics collected for this class. + * The first call to this method initializes the startTime for + * all statistics. + * + * @return gets collected for this class + */ + public Stats getStats() { + if(listener.getStatsOn()) { + stats.setLastSampleTime(); + // connections open + stats.getOpenConnectionCountImpl().setCurrent(listener.getConnectionsOpen()); + stats.getOpenConnectionCountImpl().setHighWaterMark(listener.getConnectionsOpenMax()); + stats.getOpenConnectionCountImpl().setLowWaterMark(listener.getConnectionsOpenMin()); + // connections count + stats.getConnectionsCountImpl().setCount(listener.getConnections()); + // request count + stats.getRequestCountImpl().setCount(listener.getRequests()); + // connections durations + stats.getConnectionsDurationImpl().setCount(listener.getConnectionsDurationAve()); + stats.getConnectionsDurationImpl().setMaxTime(listener.getConnectionsDurationMax()); + stats.getConnectionsDurationImpl().setMinTime(listener.getConnectionsDurationMin()); + stats.getConnectionsDurationImpl().setTotalTime(listener.getConnectionsDurationTotal()); + // requests per connection (connection requests) + stats.getConnectionsRequestImpl().setCurrent(listener.getConnectionsRequestsAve()); + stats.getConnectionsRequestImpl().setHighWaterMark(listener.getConnectionsRequestsMax()); + stats.getConnectionsRequestImpl().setLowWaterMark(listener.getConnectionsRequestsMin()); + } + return stats; + } + + /** + * Reset the startTime for all statistics + */ + public void resetStats() { + listener.statsReset(); + stats.setStartTime(); // sets atartTime for all stats to Now + } + + public boolean isStateManageable() { + return true; + } + + public boolean isStatisticsProvider() { + return listener.getStatsOn(); + } public static final GBeanInfo GBEAN_INFO; @@ -215,6 +272,7 @@ GBeanInfoBuilder infoFactory = GBeanInfoBuilder.createStatic("Jetty HTTP Connector", JettyConnector.class); infoFactory.addReference(CONNECTOR_CONTAINER_REFERENCE, JettyContainer.class, NameFactory.GERONIMO_SERVICE); infoFactory.addReference("ThreadPool", ThreadPool.class, NameFactory.GERONIMO_SERVICE); + // infoFactory.addOperation("statsOn", new Class[] { Boolean.class }, "void"); // removed 'minThreads' from persistent and manageable String[] // removed 'tcpNoDelay' from persistent String[] // added 'protocol' to persistent and manageable String[] Modified: geronimo/server/trunk/modules/geronimo-jetty6/src/test/java/org/apache/geronimo/jetty6/AbstractWebModuleTest.java URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-jetty6/src/test/java/org/apache/geronimo/jetty6/AbstractWebModuleTest.java?rev=581936&r1=581935&r2=581936&view=diff ============================================================================== --- geronimo/server/trunk/modules/geronimo-jetty6/src/test/java/org/apache/geronimo/jetty6/AbstractWebModuleTest.java (original) +++ geronimo/server/trunk/modules/geronimo-jetty6/src/test/java/org/apache/geronimo/jetty6/AbstractWebModuleTest.java Thu Oct 4 07:46:56 2007 @@ -57,7 +57,7 @@ public class AbstractWebModuleTest extends TestSupport { protected ClassLoader cl; protected final static String securityRealmName = "demo-properties-realm"; - private HTTPSocketConnector connector; + protected HTTPSocketConnector connector; protected JettyContainerImpl container; private TransactionManager transactionManager; private ConnectionTrackingCoordinator connectionTrackingCoordinator; Added: geronimo/server/trunk/modules/geronimo-jetty6/src/test/java/org/apache/geronimo/jetty6/StatTest.java URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-jetty6/src/test/java/org/apache/geronimo/jetty6/StatTest.java?rev=581936&view=auto ============================================================================== --- geronimo/server/trunk/modules/geronimo-jetty6/src/test/java/org/apache/geronimo/jetty6/StatTest.java (added) +++ geronimo/server/trunk/modules/geronimo-jetty6/src/test/java/org/apache/geronimo/jetty6/StatTest.java Thu Oct 4 07:46:56 2007 @@ -0,0 +1,88 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.geronimo.jetty6; + +import java.io.BufferedReader; +import java.io.File; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; + +import javax.management.ObjectName; +import javax.management.j2ee.statistics.Statistic; +import javax.management.j2ee.statistics.Stats; + +/** + * @version $Rev$ $Date$ + */ +public class StatTest extends AbstractWebModuleTest { + + private ObjectName webModuleName; + + public void testStats() throws Exception { + JettyWebAppContext app; + app = setUpAppContext(null, null, null, null, null, null, null, "war1/"); + + setUpStaticContentServlet(app); + + // start statistics collection + assertTrue("Stats should be off initially", !connector.isStatisticsProvider()); + connector.statsOn(true); + container.setCollectStatistics(true); + + int n = 4; // no of connections + for (int k = 0; k < n; k++) { + HttpURLConnection connection = (HttpURLConnection) new URL(connector.getConnectUrl() + "/test/hello.txt") + .openConnection(); + BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); + assertEquals(HttpURLConnection.HTTP_OK, connection.getResponseCode()); + assertEquals("Hello World", reader.readLine()); + + Stats[] allStats = {connector.getStats()}; + Stats stats; + for (int j = 0; j < allStats.length; j++) { + stats = allStats[j]; + Statistic[] stts = stats.getStatistics(); + Statistic aStts; + String[] sttsNames = stats.getStatisticNames(); + for (int i = 0; i < sttsNames.length; i++) { + // check that the names match the getter methods + String sttsName = sttsNames[i]; + assertFalse(sttsName.equals(stts[i].getName())); + try { + stats.getClass().getMethod("get" + sttsName, new Class[0]); + } catch (NoSuchMethodException e) { + continue; // ignore this statistics JSR77.6.10.1.1 + } + aStts = stats.getStatistic(sttsName); + assertTrue("startTime was not set for " + sttsName, aStts.getStartTime() != 0); + assertTrue("lastSampleTime was not set for " + sttsName, aStts.getLastSampleTime() != 0); + /* System.out.println(" lastSampleTime = " + aStts.getLastSampleTime() + + " startTime = " + aStts.getStartTime()); + System.out.println(aStts);*/ + } + } + if (k == n-2) connector.resetStats(); // test reset + connection.disconnect(); + Thread.sleep(1000); // connection interval + } + } + + protected void setUp() throws Exception { + super.setUp(); + } +} Propchange: geronimo/server/trunk/modules/geronimo-jetty6/src/test/java/org/apache/geronimo/jetty6/StatTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: geronimo/server/trunk/modules/geronimo-jetty6/src/test/java/org/apache/geronimo/jetty6/StatTest.java ------------------------------------------------------------------------------ svn:keywords = Date Revision Propchange: geronimo/server/trunk/modules/geronimo-jetty6/src/test/java/org/apache/geronimo/jetty6/StatTest.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: geronimo/server/trunk/modules/geronimo-management/src/main/java/org/apache/geronimo/management/geronimo/stats/TomcatWebConnectorStats.java URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-management/src/main/java/org/apache/geronimo/management/geronimo/stats/TomcatWebConnectorStats.java?rev=581936&view=auto ============================================================================== --- geronimo/server/trunk/modules/geronimo-management/src/main/java/org/apache/geronimo/management/geronimo/stats/TomcatWebConnectorStats.java (added) +++ geronimo/server/trunk/modules/geronimo-management/src/main/java/org/apache/geronimo/management/geronimo/stats/TomcatWebConnectorStats.java Thu Oct 4 07:46:56 2007 @@ -0,0 +1,62 @@ +/** + * + * Copyright 2006 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.geronimo.management.geronimo.stats; + +import javax.management.j2ee.statistics.Stats; +import javax.management.j2ee.statistics.RangeStatistic; +import javax.management.j2ee.statistics.TimeStatistic; +import javax.management.j2ee.statistics.CountStatistic; + +/** + * Statistics exposed by a Tomcat web connector (http, https) + * + * @version $Rev$ $Date$ + */ +public interface TomcatWebConnectorStats extends WebConnectorStats { + + /** + * Gets the Time statistics (count, total, Max, Min) for requests (includes + * figures across all requests since statistics gathering started) + */ + TimeStatistic getRequestTime(); + + /** + * Gets the number of errors that have been returned since statistics + * gathering started. + */ + CountStatistic getErrorCount(); + + /** + * Gets the number of requests being processed concurrently (as well as the + * min and max since statistics gathering started). + */ + RangeStatistic getActiveRequestCount(); + + /** + * Gets the number of threads currently available (as well as min and max + * since statistics gathering started. + * current - The number of threads currently in the pool (currentThreadCount) + * - the number of threads currently serving requests (currentThreadBusy) + * HiMark - The maximum number of unused threads that will be allowed to exist + * until the thread pool starts stopping the unnecessary threads(maxSpareThread) + * UpperBound - The max number of threads created by the connector (maxThreads) + * LowerBound - The number of threads created by the connector in the begining (minSpareThread) + */ + // This could be a container statistics + RangeStatistic getSpareThreadCount(); +} Propchange: geronimo/server/trunk/modules/geronimo-management/src/main/java/org/apache/geronimo/management/geronimo/stats/TomcatWebConnectorStats.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: geronimo/server/trunk/modules/geronimo-management/src/main/java/org/apache/geronimo/management/geronimo/stats/TomcatWebConnectorStats.java ------------------------------------------------------------------------------ svn:keywords = Date Revision Propchange: geronimo/server/trunk/modules/geronimo-management/src/main/java/org/apache/geronimo/management/geronimo/stats/TomcatWebConnectorStats.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Copied: geronimo/server/trunk/modules/geronimo-management/src/main/java/org/apache/geronimo/management/geronimo/stats/TomcatWebConnectorStatsImpl.java (from r581647, geronimo/server/trunk/modules/geronimo-management/src/main/java/org/apache/geronimo/management/stats/WebConnectorStatsImpl.java) URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-management/src/main/java/org/apache/geronimo/management/geronimo/stats/TomcatWebConnectorStatsImpl.java?p2=geronimo/server/trunk/modules/geronimo-management/src/main/java/org/apache/geronimo/management/geronimo/stats/TomcatWebConnectorStatsImpl.java&p1=geronimo/server/trunk/modules/geronimo-management/src/main/java/org/apache/geronimo/management/stats/WebConnectorStatsImpl.java&r1=581647&r2=581936&rev=581936&view=diff ============================================================================== --- geronimo/server/trunk/modules/geronimo-management/src/main/java/org/apache/geronimo/management/stats/WebConnectorStatsImpl.java (original) +++ geronimo/server/trunk/modules/geronimo-management/src/main/java/org/apache/geronimo/management/geronimo/stats/TomcatWebConnectorStatsImpl.java Thu Oct 4 07:46:56 2007 @@ -15,13 +15,18 @@ * limitations under the License. */ -package org.apache.geronimo.management.stats; +package org.apache.geronimo.management.geronimo.stats; import javax.management.j2ee.statistics.CountStatistic; import javax.management.j2ee.statistics.RangeStatistic; import javax.management.j2ee.statistics.TimeStatistic; -import org.apache.geronimo.management.geronimo.stats.WebConnectorStats; +import org.apache.geronimo.management.stats.StatsImpl; +import org.apache.geronimo.management.stats.StatisticImpl; +import org.apache.geronimo.management.stats.CountStatisticImpl; +import org.apache.geronimo.management.stats.RangeStatisticImpl; +import org.apache.geronimo.management.stats.BoundedRangeStatisticImpl; +import org.apache.geronimo.management.stats.TimeStatisticImpl; /** * Geronimo implementation of the JSR-77 style WebConnectorStats interface. This @@ -31,7 +36,7 @@ * @version $Revision$ $Date$ */ -public class WebConnectorStatsImpl extends StatsImpl implements WebConnectorStats { +public class TomcatWebConnectorStatsImpl extends StatsImpl implements TomcatWebConnectorStats { private TimeStatisticImpl requestTime; // total, max, count private CountStatisticImpl activeRequestCount; @@ -45,13 +50,13 @@ // these come from ThreadPool private RangeStatisticImpl openConnectionCount; - private CountStatistic busyThreadCount; + private CountStatisticImpl busyThreadCount; // TODO - change the name to BoundedRangeStatisticsImpl private BoundedRangeStatisticImpl busyThreads; // TODO - spareThreads metrics = current - busy, maxSpareThreads, minSpareThreads - public WebConnectorStatsImpl() { + public TomcatWebConnectorStatsImpl() { requestTime = new TimeStatisticImpl("Request Time", StatisticImpl.UNIT_TIME_MILLISECOND, "The time to process all requests"); activeRequestCount = new CountStatisticImpl("Active Request Count", StatisticImpl.UNIT_COUNT, Modified: geronimo/server/trunk/modules/geronimo-management/src/main/java/org/apache/geronimo/management/geronimo/stats/WebConnectorStats.java URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-management/src/main/java/org/apache/geronimo/management/geronimo/stats/WebConnectorStats.java?rev=581936&r1=581935&r2=581936&view=diff ============================================================================== --- geronimo/server/trunk/modules/geronimo-management/src/main/java/org/apache/geronimo/management/geronimo/stats/WebConnectorStats.java (original) +++ geronimo/server/trunk/modules/geronimo-management/src/main/java/org/apache/geronimo/management/geronimo/stats/WebConnectorStats.java Thu Oct 4 07:46:56 2007 @@ -17,10 +17,8 @@ package org.apache.geronimo.management.geronimo.stats; -import javax.management.j2ee.statistics.Stats; import javax.management.j2ee.statistics.RangeStatistic; -import javax.management.j2ee.statistics.TimeStatistic; -import javax.management.j2ee.statistics.CountStatistic; +import javax.management.j2ee.statistics.Stats; /** * Statistics exposed by a Tomcat web connector (http, https) @@ -29,52 +27,10 @@ */ public interface WebConnectorStats extends Stats { - /** - * Gets the Time statistics (count, total, Max, Min) for requests (includes - * figures across all requests since statistics gathering started) - */ - TimeStatistic getRequestTime(); - - /** - * Gets the number of errors that have been returned since statistics - * gathering started. - */ - CountStatistic getErrorCount(); - - /** - * Gets the number of requests being processed concurrently (as well as the - * min and max since statistics gathering started). - */ - RangeStatistic getActiveRequestCount(); - + // TODO - check if some other stats can be merged /** * Gets the number of connections currently open (as well as the min and max * since statistics gathering started). */ RangeStatistic getOpenConnectionCount(); - - /** - * Gets the number of threads currently available (as well as min and max - * since statistics gathering started. - * current - The number of threads currently in the pool (currentThreadCount) - * - the number of threads currently serving requests (currentThreadBusy) - * HiMark - The maximum number of unused threads that will be allowed to exist - * until the thread pool starts stopping the unnecessary threads(maxSpareThread) - * UpperBound - The max number of threads created by the connector (maxThreads) - * LowerBound - The number of threads created by the connector in the begining (minSpareThread) - */ - // This could be a container statistics - RangeStatistic getSpareThreadCount(); - - /** - * Gets the number of requests handled by a particular connection (as well - * as the min(?) and max since statistics gathering started). - */ - // RangeStatistic getConnectionRequestCount(); - - /** - * Gets the legnth of time that connections have been open (includes figures - * across all connections open at present) - */ - // TimeStatistic getConnectionDuration(); } Modified: geronimo/server/trunk/modules/geronimo-management/src/main/java/org/apache/geronimo/management/stats/StatsImpl.java URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-management/src/main/java/org/apache/geronimo/management/stats/StatsImpl.java?rev=581936&r1=581935&r2=581936&view=diff ============================================================================== --- geronimo/server/trunk/modules/geronimo-management/src/main/java/org/apache/geronimo/management/stats/StatsImpl.java (original) +++ geronimo/server/trunk/modules/geronimo-management/src/main/java/org/apache/geronimo/management/stats/StatsImpl.java Thu Oct 4 07:46:56 2007 @@ -26,10 +26,11 @@ * Geronimo implementation of the JSR-77 Stats interface. Dynamically tracks * available statistics for its subclasses, to make it easy to iterate * available statistics without knowing exactly what kind of class you're - * looking at. Not sure when you'd want to do that, but hey. + * looking at. * * @version $Rev$ $Date$ */ + public class StatsImpl implements Stats, Serializable { private final Map stats = new HashMap(); @@ -50,6 +51,9 @@ stats.remove(name); } + /** + * Set the startTime for all statistics to System.currentTimeMillis() + */ public void setStartTime() { long now = System.currentTimeMillis(); for (StatisticImpl item : stats.values()) { @@ -57,6 +61,19 @@ } } + /** + * Set the startTime for all statistics to the given value + * @param time + */ + public void setStartTime(long time) { + for (StatisticImpl item : stats.values()) { + item.setStartTime(time); + } + } + + /** + * Set the lastSampleTime for all statistics to System.currentTimeMillis() + */ public void setLastSampleTime() { long now = System.currentTimeMillis(); for (StatisticImpl item : stats.values()) { @@ -64,14 +81,26 @@ } } + /* + * Gets a Statistic by name + * @see javax.management.j2ee.statistics.Stats#getStatistic(java.lang.String) + */ public Statistic getStatistic(String statisticName) { return (Statistic)stats.get(statisticName); } + /* + * Returns a list of names of statistics + * @see javax.management.j2ee.statistics.Stats#getStatisticNames() + */ public String[] getStatisticNames() { return (String[]) stats.keySet().toArray(new String[stats.size()]); } + /* + * Returns a list of all the Statistic objects supported by this Stats object + * @see javax.management.j2ee.statistics.Stats#getStatistics() + */ public Statistic[] getStatistics() { String[] names = getStatisticNames(); Statistic[] result = new Statistic[names.length]; Modified: geronimo/server/trunk/modules/geronimo-management/src/main/java/org/apache/geronimo/management/stats/WebConnectorStatsImpl.java URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-management/src/main/java/org/apache/geronimo/management/stats/WebConnectorStatsImpl.java?rev=581936&r1=581935&r2=581936&view=diff ============================================================================== --- geronimo/server/trunk/modules/geronimo-management/src/main/java/org/apache/geronimo/management/stats/WebConnectorStatsImpl.java (original) +++ geronimo/server/trunk/modules/geronimo-management/src/main/java/org/apache/geronimo/management/stats/WebConnectorStatsImpl.java Thu Oct 4 07:46:56 2007 @@ -17,9 +17,7 @@ package org.apache.geronimo.management.stats; -import javax.management.j2ee.statistics.CountStatistic; import javax.management.j2ee.statistics.RangeStatistic; -import javax.management.j2ee.statistics.TimeStatistic; import org.apache.geronimo.management.geronimo.stats.WebConnectorStats; @@ -31,105 +29,20 @@ * @version $Revision$ $Date$ */ -public class WebConnectorStatsImpl extends StatsImpl implements WebConnectorStats { - private TimeStatisticImpl requestTime; // total, max, count - - private CountStatisticImpl activeRequestCount; - - private CountStatisticImpl errorCount; - - private CountStatisticImpl bytesSentCount; - - private CountStatisticImpl bytesReceivedCount; - +public class WebConnectorStatsImpl extends StatsImpl implements WebConnectorStats { // these come from ThreadPool private RangeStatisticImpl openConnectionCount; - private CountStatistic busyThreadCount; - - // TODO - change the name to BoundedRangeStatisticsImpl - private BoundedRangeStatisticImpl busyThreads; - // TODO - spareThreads metrics = current - busy, maxSpareThreads, minSpareThreads - public WebConnectorStatsImpl() { - requestTime = new TimeStatisticImpl("Request Time", StatisticImpl.UNIT_TIME_MILLISECOND, - "The time to process all requests"); - activeRequestCount = new CountStatisticImpl("Active Request Count", StatisticImpl.UNIT_COUNT, - "currently active requests ", 0); - errorCount = new CountStatisticImpl("Error Count", StatisticImpl.UNIT_COUNT, - "The numbet of Errors during the observed period", 0); - bytesSentCount = new CountStatisticImpl("Bytes Sent", StatisticImpl.UNIT_COUNT, - "The number of bytes sent during the observerd period", 0); - bytesReceivedCount = new CountStatisticImpl("Bytes Received", StatisticImpl.UNIT_COUNT, - "The number of bytes received during the observerd period", 0); openConnectionCount = new RangeStatisticImpl("" + "Open Connections", StatisticImpl.UNIT_COUNT, "Range for connections opened during the observed period", 0); // all 0's - busyThreads = new BoundedRangeStatisticImpl("Busy Threads", StatisticImpl.UNIT_COUNT, - "BoundedRange for Threads currently busy serving requests", 0, 0, 0); - addStat("RequestTime", requestTime); // better name - addStat("activeRequestCount", activeRequestCount); - addStat("errorCount", errorCount); - addStat("bytesSent", bytesSentCount); - addStat("bytesReceived", bytesReceivedCount); - addStat("openConnectionCount", openConnectionCount); - addStat("busyThreads", busyThreads); - } - - public RangeStatistic getActiveRequestCount() { - // TODO - return null; - } - - public TimeStatistic getRequestTime() { - return requestTime; - } - - public CountStatistic getErrorCount() { - return errorCount; - } - - public CountStatistic getBytesSentCount() { - return bytesSentCount; + addStat("OpenConnectionCount", openConnectionCount); } - public CountStatistic getBytesReceivedCount() { - return bytesReceivedCount; - } public RangeStatistic getOpenConnectionCount() { return openConnectionCount; } - - // TODO - Move this to container statistics - public RangeStatistic getSpareThreadCount() { - return null; - } - - /** - * These setters are used by native implementation - */ - public void setBytesReceivedCount(long bytesReceived) { - this.bytesReceivedCount.setCount(bytesReceived); - } - - public void setBytesSentCount(long bytesSent) { - this.bytesSentCount.setCount(bytesSent); - } - - public void setActiveRequestCount(int activeRequestCount) { - this.activeRequestCount.setCount(activeRequestCount); - } - - public void setErrorCount(int errorCount) { - this.errorCount.setCount(errorCount); - } - - public void setRequestTime(int count, long minTime, long maxTime, long totalTime) { - this.requestTime.setCount(count); - this.requestTime.setMinTime(minTime); - this.requestTime.setMaxTime(maxTime); - this.requestTime.setTotalTime(totalTime); - } public void setOpenConnection(long current, long highMark, long lowMark) { openConnectionCount.setCurrent(current); @@ -137,33 +50,11 @@ openConnectionCount.setLowWaterMark(lowMark); } - public void setBusyThreads(long current, long highWaterMark, long lowWaterMark, - long upperBound, long lowerBound) { - busyThreads.setCurrent(current); - busyThreads.setHighWaterMark(highWaterMark); - busyThreads.setLowWaterMark(lowWaterMark); //0? - busyThreads.setLowerBound(lowerBound); //0? - busyThreads.setUpperBound(upperBound); // always maxThreads - } - /** * Used to access the native implementation in order to call setters * TODO implement these if needed by console */ - public RangeStatisticImpl getActiveRequestCountImpl() { - return null; - } - - public TimeStatisticImpl getRequestDurationImpl() { - return null; - } - - public CountStatisticImpl getTotalErrorCountImpl() { - return null; - } - - public CountStatistic getTotalRequestCountImpl() { - return null; + public RangeStatisticImpl getOpenConnectionCountImpl() { + return openConnectionCount; } - } Modified: geronimo/server/trunk/modules/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/stats/ConnectorStats.java URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/stats/ConnectorStats.java?rev=581936&r1=581935&r2=581936&view=diff ============================================================================== --- geronimo/server/trunk/modules/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/stats/ConnectorStats.java (original) +++ geronimo/server/trunk/modules/geronimo-tomcat6/src/main/java/org/apache/geronimo/tomcat/stats/ConnectorStats.java Thu Oct 4 07:46:56 2007 @@ -24,11 +24,11 @@ import javax.management.ObjectInstance; import javax.management.ObjectName; import javax.management.j2ee.statistics.Stats; +import org.apache.geronimo.management.geronimo.stats.TomcatWebConnectorStatsImpl; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.tomcat.util.modeler.Registry; -import org.apache.geronimo.management.stats.WebConnectorStatsImpl; /** * This will query MBeanServer and provide jsr77 Stats for connectors. @@ -45,7 +45,7 @@ private ObjectName tpName; - private WebConnectorStatsImpl stats = new WebConnectorStatsImpl(); + private TomcatWebConnectorStatsImpl stats = new TomcatWebConnectorStatsImpl(); public ConnectorStats() { // Retrieve the MBean server @@ -72,7 +72,7 @@ } - private void updateStats(WebConnectorStatsImpl stats, String port) { + private void updateStats(TomcatWebConnectorStatsImpl stats, String port) { Iterator iterator; Set set; ObjectName objectName;