You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ie...@apache.org on 2013/03/01 08:13:45 UTC
svn commit: r1451503 - in /sling/whiteboard/ieb: log/
log/src/main/java/org/apache/sling/commons/log/internal/
log/src/main/java/org/apache/sling/commons/log/internal/config/
log/src/main/java/org/apache/sling/commons/log/internal/monitor/
log/src/main...
Author: ieb
Date: Fri Mar 1 07:13:44 2013
New Revision: 1451503
URL: http://svn.apache.org/r1451503
Log:
Replaced the Log based implementation of statistics monitoring with a simple service based on atomic longs.
Added:
sling/whiteboard/ieb/monitor/
sling/whiteboard/ieb/monitor/pom.xml (contents, props changed)
- copied, changed from r1450722, sling/whiteboard/ieb/log/pom.xml
sling/whiteboard/ieb/monitor/src/
sling/whiteboard/ieb/monitor/src/main/
sling/whiteboard/ieb/monitor/src/main/java/
sling/whiteboard/ieb/monitor/src/main/java/org/
sling/whiteboard/ieb/monitor/src/main/java/org/apache/
sling/whiteboard/ieb/monitor/src/main/java/org/apache/sling/
sling/whiteboard/ieb/monitor/src/main/java/org/apache/sling/commons/
sling/whiteboard/ieb/monitor/src/main/java/org/apache/sling/commons/monitor/
sling/whiteboard/ieb/monitor/src/main/java/org/apache/sling/commons/monitor/Statistics.java (with props)
sling/whiteboard/ieb/monitor/src/main/java/org/apache/sling/commons/monitor/StatisticsFactory.java (with props)
sling/whiteboard/ieb/monitor/src/main/java/org/apache/sling/commons/monitor/impl/
sling/whiteboard/ieb/monitor/src/main/java/org/apache/sling/commons/monitor/impl/StatisticsImpl.java (with props)
sling/whiteboard/ieb/monitor/src/main/java/org/apache/sling/commons/monitor/impl/StatisticsServlet.java (contents, props changed)
- copied, changed from r1450722, sling/whiteboard/ieb/log/src/main/java/org/apache/sling/commons/log/internal/monitor/CounterServlet.java
sling/whiteboard/ieb/monitor/src/main/java/org/apache/sling/commons/monitor/package-info.java (with props)
sling/whiteboard/ieb/monitor/src/test/
sling/whiteboard/ieb/monitor/src/test/java/
sling/whiteboard/ieb/monitor/src/test/java/org/
sling/whiteboard/ieb/monitor/src/test/java/org/apache/
sling/whiteboard/ieb/monitor/src/test/java/org/apache/sling/
sling/whiteboard/ieb/monitor/src/test/java/org/apache/sling/commons/
sling/whiteboard/ieb/monitor/src/test/java/org/apache/sling/commons/monitor/
sling/whiteboard/ieb/monitor/src/test/java/org/apache/sling/commons/monitor/impl/
sling/whiteboard/ieb/monitor/src/test/java/org/apache/sling/commons/monitor/impl/CounterTest.java (contents, props changed)
- copied, changed from r1450722, sling/whiteboard/ieb/log/src/test/java/org/apache/sling/commons/log/internal/monitor/CounterTest.java
sling/whiteboard/ieb/monitor/src/test/java/org/apache/sling/commons/monitor/impl/StatisticsServletTest.java (with props)
Removed:
sling/whiteboard/ieb/log/README.txt
sling/whiteboard/ieb/log/pom.xml
sling/whiteboard/ieb/log/src/main/java/org/apache/sling/commons/log/internal/Activator.java
sling/whiteboard/ieb/log/src/main/java/org/apache/sling/commons/log/internal/LogManager.java
sling/whiteboard/ieb/log/src/main/java/org/apache/sling/commons/log/internal/config/ConfigurationException.java
sling/whiteboard/ieb/log/src/main/java/org/apache/sling/commons/log/internal/config/ConfigurationServiceFactory.java
sling/whiteboard/ieb/log/src/main/java/org/apache/sling/commons/log/internal/config/GlobalConfigurator.java
sling/whiteboard/ieb/log/src/main/java/org/apache/sling/commons/log/internal/config/LogConfigurator.java
sling/whiteboard/ieb/log/src/main/java/org/apache/sling/commons/log/internal/config/LogWriterManagedServiceFactory.java
sling/whiteboard/ieb/log/src/main/java/org/apache/sling/commons/log/internal/config/LoggerManagedServiceFactory.java
sling/whiteboard/ieb/log/src/main/java/org/apache/sling/commons/log/internal/monitor/Counter.java
sling/whiteboard/ieb/log/src/main/java/org/apache/sling/commons/log/internal/monitor/CounterServlet.java
sling/whiteboard/ieb/log/src/main/java/org/apache/sling/commons/log/internal/slf4j/FileRotator.java
sling/whiteboard/ieb/log/src/main/java/org/apache/sling/commons/log/internal/slf4j/LogConfigManager.java
sling/whiteboard/ieb/log/src/main/java/org/apache/sling/commons/log/internal/slf4j/PrivilegedWriter.java
sling/whiteboard/ieb/log/src/main/java/org/apache/sling/commons/log/internal/slf4j/ScheduledFileRotator.java
sling/whiteboard/ieb/log/src/main/java/org/apache/sling/commons/log/internal/slf4j/SizeLimitedFileRotator.java
sling/whiteboard/ieb/log/src/main/java/org/apache/sling/commons/log/internal/slf4j/SlingConfigurationPrinter.java
sling/whiteboard/ieb/log/src/main/java/org/apache/sling/commons/log/internal/slf4j/SlingLogPanel.java
sling/whiteboard/ieb/log/src/main/java/org/apache/sling/commons/log/internal/slf4j/SlingLogger.java
sling/whiteboard/ieb/log/src/main/java/org/apache/sling/commons/log/internal/slf4j/SlingLoggerConfig.java
sling/whiteboard/ieb/log/src/main/java/org/apache/sling/commons/log/internal/slf4j/SlingLoggerLevel.java
sling/whiteboard/ieb/log/src/main/java/org/apache/sling/commons/log/internal/slf4j/SlingLoggerWriter.java
sling/whiteboard/ieb/log/src/main/java/org/slf4j/impl/StaticLoggerBinder.java
sling/whiteboard/ieb/log/src/main/java/org/slf4j/impl/StaticMarkerBinder.java
sling/whiteboard/ieb/log/src/main/resources/OSGI-INF/metatype/metatype.properties
sling/whiteboard/ieb/log/src/main/resources/OSGI-INF/metatype/metatype.xml
sling/whiteboard/ieb/log/src/test/java/org/apache/sling/commons/log/internal/ActivatorTest.java
sling/whiteboard/ieb/log/src/test/java/org/apache/sling/commons/log/internal/config/AbstractSlingConfigTest.java
sling/whiteboard/ieb/log/src/test/java/org/apache/sling/commons/log/internal/config/GlobalConfigurationTest.java
sling/whiteboard/ieb/log/src/test/java/org/apache/sling/commons/log/internal/config/LogWriterManagedServiceFactoryTest.java
sling/whiteboard/ieb/log/src/test/java/org/apache/sling/commons/log/internal/monitor/CounterTest.java
sling/whiteboard/ieb/log/src/test/java/org/apache/sling/commons/log/internal/slf4j/AbstractSlingLogTest.java
sling/whiteboard/ieb/log/src/test/java/org/apache/sling/commons/log/internal/slf4j/PrivilegedWriterTest.java
sling/whiteboard/ieb/log/src/test/java/org/apache/sling/commons/log/internal/slf4j/SizeLimitedFileRotatorTest.java
sling/whiteboard/ieb/log/src/test/java/org/apache/sling/commons/log/internal/slf4j/SlingConfigurationPrinterTest.java
sling/whiteboard/ieb/log/src/test/java/org/apache/sling/commons/log/internal/slf4j/SlingLogPanelTest.java
sling/whiteboard/ieb/log/src/test/java/org/apache/sling/commons/log/internal/slf4j/SlingLogWriterTest.java
sling/whiteboard/ieb/log/src/test/java/org/apache/sling/commons/log/internal/slf4j/SlingLoggerLevelTest.java
sling/whiteboard/ieb/log/src/test/java/org/apache/sling/commons/log/internal/slf4j/SlingLoggerTest.java
Copied: sling/whiteboard/ieb/monitor/pom.xml (from r1450722, sling/whiteboard/ieb/log/pom.xml)
URL: http://svn.apache.org/viewvc/sling/whiteboard/ieb/monitor/pom.xml?p2=sling/whiteboard/ieb/monitor/pom.xml&p1=sling/whiteboard/ieb/log/pom.xml&r1=1450722&r2=1451503&rev=1451503&view=diff
==============================================================================
--- sling/whiteboard/ieb/log/pom.xml (original)
+++ sling/whiteboard/ieb/monitor/pom.xml Fri Mar 1 07:13:44 2013
@@ -27,121 +27,74 @@
<relativePath>../../../parent/pom.xml</relativePath>
</parent>
- <artifactId>org.apache.sling.commons.log</artifactId>
- <version>3.0.1-SNAPSHOT</version>
+ <artifactId>org.apache.sling.commons.monitor</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
<packaging>bundle</packaging>
<name>Apache Sling SLF4J Implementation</name>
<description>
- This bundle implements the SLF4J API with support for dynamic
- configuration through OSGi Configuration Admin Service.
+ This bundle provides a monitoring service to allow components to record statistics, which may be queried by clients.
</description>
<scm>
- <connection>scm:svn:http://svn.apache.org/repos/asf/sling/trunk/bundles/commons/log</connection>
- <developerConnection>scm:svn:https://svn.apache.org/repos/asf/sling/trunk/bundles/commons/log</developerConnection>
- <url>http://svn.apache.org/viewvc/sling/trunk/bundles/commons/log</url>
+ <connection>scm:svn:http://svn.apache.org/repos/asf/sling/whiteboard/ieb/monitor</connection>
+ <developerConnection>scm:svn:https://svn.apache.org/repos/asf/sling/whiteboard/ieb/monitor</developerConnection>
+ <url>http://svn.apache.org/viewvc/sling/whiteboard/ieb/monitor</url>
</scm>
- <properties>
- <slf4j.version>1.6.4</slf4j.version>
- </properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
+ <artifactId>maven-scr-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
- <version>2.3.6</version>
<extensions>true</extensions>
<configuration>
<instructions>
- <Bundle-Activator>
- org.apache.sling.commons.log.internal.Activator
- </Bundle-Activator>
- <Bundle-DocURL>
- http://sling.apache.org/site/logging.html
- </Bundle-DocURL>
- <Export-Package>
- org.slf4j.impl;version=${slf4j.version}
- </Export-Package>
- <Private-Package>
- org.apache.sling.commons.log.*,
- </Private-Package>
<Import-Package>
- !org.slf4j.impl,
- org.osgi.framework;version=1.3,
- org.slf4j;provide:=true,
- org.slf4j.spi;provide:=true,
- *
+ *
</Import-Package>
- <DynamicImport-Package>
- org.osgi.service.cm;version=1.2,
- javax.servlet;javax.servlet.http;version=2.3
- </DynamicImport-Package>
- <Embed-Dependency>
- jul-to-slf4j;inline="org/slf4j/bridge/SLF4JBridgeHandler.class"
- </Embed-Dependency>
</instructions>
- </configuration>
+ </configuration>
</plugin>
</plugins>
</build>
- <reporting>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-javadoc-plugin</artifactId>
- <configuration>
- <!-- No javadocs at all -->
- <skip>true</skip>
- </configuration>
- </plugin>
- </plugins>
- </reporting>
-
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
- <version>${slf4j.version}</version>
<scope>provided</scope>
</dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>jul-to-slf4j</artifactId>
- <version>${slf4j.version}</version>
- <scope>compile</scope>
- <optional>true</optional>
- </dependency>
<!-- OSGi Libraries not included here -->
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.core</artifactId>
- <version>4.0.0</version>
</dependency>
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.compendium</artifactId>
- <version>4.0.0</version>
</dependency>
<!-- servlet API for the web console plugin -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
- <version>2.3</version>
</dependency>
-
- <!-- OSGi Command Line Shell support -->
<dependency>
<groupId>org.apache.felix</groupId>
- <artifactId>org.apache.felix.gogo.runtime</artifactId>
- <version>0.6.1</version>
- <scope>provided</scope>
+ <artifactId>org.apache.felix.scr.annotations</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>biz.aQute</groupId>
+ <artifactId>bndlib</artifactId>
</dependency>
+
<!-- testing -->
<!-- using mockito because its a bit more relaxed and makes it easier to maintain
the test cases if dependencies change -->
@@ -152,6 +105,17 @@
<scope>test</scope>
</dependency>
<dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-simple</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.commons.json</artifactId>
+ <version>2.0.6</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
Propchange: sling/whiteboard/ieb/monitor/pom.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: sling/whiteboard/ieb/monitor/pom.xml
------------------------------------------------------------------------------
svn:mime-type = text/xml
Added: sling/whiteboard/ieb/monitor/src/main/java/org/apache/sling/commons/monitor/Statistics.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/ieb/monitor/src/main/java/org/apache/sling/commons/monitor/Statistics.java?rev=1451503&view=auto
==============================================================================
--- sling/whiteboard/ieb/monitor/src/main/java/org/apache/sling/commons/monitor/Statistics.java (added)
+++ sling/whiteboard/ieb/monitor/src/main/java/org/apache/sling/commons/monitor/Statistics.java Fri Mar 1 07:13:44 2013
@@ -0,0 +1,37 @@
+/*
+ * 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 SF 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.sling.commons.monitor;
+
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicLong;
+
+/**
+ * A Collection of statistics registered by the user of the interface.
+ */
+public interface Statistics {
+ /**
+ * Get a statistic by name of type T. Type is not checked.
+ * @param name the name of the statistic
+ * @return return the statistic.
+ */
+ <T> AtomicLong get(String name);
+ /**
+ * @return an read only map of all statistics at the time the call method was invoked.
+ */
+ Map<String, AtomicLong> all();
+}
Propchange: sling/whiteboard/ieb/monitor/src/main/java/org/apache/sling/commons/monitor/Statistics.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: sling/whiteboard/ieb/monitor/src/main/java/org/apache/sling/commons/monitor/StatisticsFactory.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/ieb/monitor/src/main/java/org/apache/sling/commons/monitor/StatisticsFactory.java?rev=1451503&view=auto
==============================================================================
--- sling/whiteboard/ieb/monitor/src/main/java/org/apache/sling/commons/monitor/StatisticsFactory.java (added)
+++ sling/whiteboard/ieb/monitor/src/main/java/org/apache/sling/commons/monitor/StatisticsFactory.java Fri Mar 1 07:13:44 2013
@@ -0,0 +1,40 @@
+/*
+ * 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 SF 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.sling.commons.monitor;
+
+import org.apache.sling.commons.monitor.impl.StatisticsImpl;
+
+
+/**
+ * A statistics factory that manages a singleton collection of statistics.
+ */
+public abstract class StatisticsFactory {
+
+ public static final Statistics statisticsSingleton = new StatisticsImpl();
+
+ private StatisticsFactory() {
+ // cant create a factory class.
+ }
+ /**
+ * @return the singleton instance of the collection of statistics.
+ */
+ public static Statistics instance() {
+ return statisticsSingleton;
+ }
+
+}
Propchange: sling/whiteboard/ieb/monitor/src/main/java/org/apache/sling/commons/monitor/StatisticsFactory.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: sling/whiteboard/ieb/monitor/src/main/java/org/apache/sling/commons/monitor/impl/StatisticsImpl.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/ieb/monitor/src/main/java/org/apache/sling/commons/monitor/impl/StatisticsImpl.java?rev=1451503&view=auto
==============================================================================
--- sling/whiteboard/ieb/monitor/src/main/java/org/apache/sling/commons/monitor/impl/StatisticsImpl.java (added)
+++ sling/whiteboard/ieb/monitor/src/main/java/org/apache/sling/commons/monitor/impl/StatisticsImpl.java Fri Mar 1 07:13:44 2013
@@ -0,0 +1,83 @@
+/*
+ * 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 SF 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.sling.commons.monitor.impl;
+
+import java.util.Collections;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.atomic.AtomicLong;
+
+import org.apache.sling.commons.monitor.Statistics;
+
+/**
+ * Simple implementation using a ConcurrentHashMap to store the statistics.
+ */
+public class StatisticsImpl implements Statistics {
+
+
+ // setup for 100 counters initially.
+ private static final int NCOUNTERS = 100;
+ // not likely to meet a machine with > 32 cores and see all trying to
+ // update a counter within the same few ms.
+ private static final int CONCURRENCY = 32;
+ // not expecting much map growth, so up the occupancy factor a bit.
+ private float LOAD_FACTOR = 0.80F;
+
+ private Map<String, AtomicLong> statisticsMap = new ConcurrentHashMap<String, AtomicLong>(NCOUNTERS, LOAD_FACTOR, CONCURRENCY);
+ private int lastSize = 100;
+
+
+ public AtomicLong get(String name) {
+ AtomicLong statistic = statisticsMap.get(name);
+ if ( statistic == null ) {
+ statistic = new AtomicLong();
+ statisticsMap.put(name,statistic);
+ }
+ return statistic;
+ }
+
+ public Map<String, AtomicLong> all() {
+ return Collections.unmodifiableMap(statisticsMap);
+ }
+
+
+ public String toJson() {
+ // create a string buffer every time a bit larger than the last time
+ // Each response is new as _timenanos must be updated.
+ StringBuilder sb = new StringBuilder(lastSize + 10);
+ sb.append("{");
+ Set<Entry<String, AtomicLong>> es = statisticsMap.entrySet();
+ sb.append("\"_timenanos\":").append(System.nanoTime());
+ for (Entry<String, AtomicLong> e : es) {
+ sb.append(",\"").append(e.getKey()).append("\":").append(e.getValue().get());
+ }
+ sb.append("}");
+ // save the last size so next time we can make the StringBuffer about
+ // the right size.
+ lastSize = sb.length();
+ return sb.toString();
+ }
+
+ protected void clear() {
+ statisticsMap.clear();
+ }
+
+
+}
Propchange: sling/whiteboard/ieb/monitor/src/main/java/org/apache/sling/commons/monitor/impl/StatisticsImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Copied: sling/whiteboard/ieb/monitor/src/main/java/org/apache/sling/commons/monitor/impl/StatisticsServlet.java (from r1450722, sling/whiteboard/ieb/log/src/main/java/org/apache/sling/commons/log/internal/monitor/CounterServlet.java)
URL: http://svn.apache.org/viewvc/sling/whiteboard/ieb/monitor/src/main/java/org/apache/sling/commons/monitor/impl/StatisticsServlet.java?p2=sling/whiteboard/ieb/monitor/src/main/java/org/apache/sling/commons/monitor/impl/StatisticsServlet.java&p1=sling/whiteboard/ieb/log/src/main/java/org/apache/sling/commons/log/internal/monitor/CounterServlet.java&r1=1450722&r2=1451503&rev=1451503&view=diff
==============================================================================
--- sling/whiteboard/ieb/log/src/main/java/org/apache/sling/commons/log/internal/monitor/CounterServlet.java (original)
+++ sling/whiteboard/ieb/monitor/src/main/java/org/apache/sling/commons/monitor/impl/StatisticsServlet.java Fri Mar 1 07:13:44 2013
@@ -15,7 +15,7 @@
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
-package org.apache.sling.commons.log.internal.monitor;
+package org.apache.sling.commons.monitor.impl;
import java.io.IOException;
@@ -24,19 +24,26 @@ import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import org.apache.felix.scr.annotations.sling.SlingServlet;
+import org.apache.sling.commons.monitor.StatisticsFactory;
-public class CounterServlet extends HttpServlet {
+@SlingServlet(methods={"GET"},paths={"/system/stats"})
+public class StatisticsServlet extends HttpServlet {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 6822640315530691809L;
/**
*
*/
- private static final long serialVersionUID = 4824982332082956436L;
+ private StatisticsImpl statisticsImpl = (StatisticsImpl) StatisticsFactory.instance();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
-
- String response = Counter.getInstance().toJson();
+ String response = statisticsImpl.toJson();
resp.setContentType("application/json; charset=utf-8");
resp.setHeader("Cache-control", "no-cache");
resp.setContentLength(response.length());
Propchange: sling/whiteboard/ieb/monitor/src/main/java/org/apache/sling/commons/monitor/impl/StatisticsServlet.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: sling/whiteboard/ieb/monitor/src/main/java/org/apache/sling/commons/monitor/package-info.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/ieb/monitor/src/main/java/org/apache/sling/commons/monitor/package-info.java?rev=1451503&view=auto
==============================================================================
--- sling/whiteboard/ieb/monitor/src/main/java/org/apache/sling/commons/monitor/package-info.java (added)
+++ sling/whiteboard/ieb/monitor/src/main/java/org/apache/sling/commons/monitor/package-info.java Fri Mar 1 07:13:44 2013
@@ -0,0 +1,22 @@
+/*
+ * 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 SF 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.
+ */
+
+@Version("1.0.0")
+package org.apache.sling.commons.monitor;
+
+import aQute.bnd.annotation.Version;
Propchange: sling/whiteboard/ieb/monitor/src/main/java/org/apache/sling/commons/monitor/package-info.java
------------------------------------------------------------------------------
svn:eol-style = native
Copied: sling/whiteboard/ieb/monitor/src/test/java/org/apache/sling/commons/monitor/impl/CounterTest.java (from r1450722, sling/whiteboard/ieb/log/src/test/java/org/apache/sling/commons/log/internal/monitor/CounterTest.java)
URL: http://svn.apache.org/viewvc/sling/whiteboard/ieb/monitor/src/test/java/org/apache/sling/commons/monitor/impl/CounterTest.java?p2=sling/whiteboard/ieb/monitor/src/test/java/org/apache/sling/commons/monitor/impl/CounterTest.java&p1=sling/whiteboard/ieb/log/src/test/java/org/apache/sling/commons/log/internal/monitor/CounterTest.java&r1=1450722&r2=1451503&rev=1451503&view=diff
==============================================================================
--- sling/whiteboard/ieb/log/src/test/java/org/apache/sling/commons/log/internal/monitor/CounterTest.java (original)
+++ sling/whiteboard/ieb/monitor/src/test/java/org/apache/sling/commons/monitor/impl/CounterTest.java Fri Mar 1 07:13:44 2013
@@ -15,14 +15,12 @@
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
-package org.apache.sling.commons.log.internal.monitor;
+package org.apache.sling.commons.monitor.impl;
import java.lang.management.ManagementFactory;
import java.lang.management.ThreadInfo;
-import java.lang.management.ThreadMXBean;
import java.text.MessageFormat;
import java.util.concurrent.atomic.AtomicInteger;
-import java.util.concurrent.atomic.AtomicLong;
import javax.management.Attribute;
import javax.management.AttributeNotFoundException;
@@ -30,7 +28,6 @@ import javax.management.InstanceNotFound
import javax.management.InvalidAttributeValueException;
import javax.management.MBeanException;
import javax.management.MBeanServer;
-import javax.management.MBeanServerFactory;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
import javax.management.ReflectionException;
@@ -38,70 +35,46 @@ import javax.management.openmbean.Compos
import junit.framework.Assert;
-import org.apache.sling.commons.log.internal.Activator.DummyLogManagerConfiguration;
+import org.apache.sling.commons.monitor.Statistics;
+import org.apache.sling.commons.monitor.StatisticsFactory;
import org.junit.Test;
-import org.osgi.service.cm.ManagedServiceFactory;
-import org.slf4j.Marker;
-import org.slf4j.MarkerFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public class CounterTest {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(CounterTest.class);
private long lastBlockedTime;
private long lastBlockedCount;
private long lastCheck;
- /**
- * Give a very rough idea of performance single threaded. NB: This is a
- * totally unscientific benchmark.
- */
- @Test
- public void testCounter() {
- Marker m = MarkerFactory.getMarker("count");
- Counter counter = Counter.getInstance();
- int loops = 100000;
- int counters = 100;
- long ncounts = loops * counters;
- // attemt to warm up hotspot by causing the code to be executed > 10k
- // times.
- for (int j = 0; j < loops + 1; j++) {
- for (int i = 0; i < counters + 1; i++) {
- counter.increment(m, "cou\"nter" + i);
- }
- }
-
- long l = System.nanoTime();
- for (int j = 0; j < loops; j++) {
- for (int i = 0; i < counters; i++) {
- counter.increment(m, "cou\"nter" + i);
- }
- }
- l = System.nanoTime() - l;
- System.err.println("Time Taken for 1 count operation is "
- + (l / ncounts) + " nanoseconds");
- String json = counter.toJson();
- Assert.assertNotNull(json);
- }
@Test
- public void testCounterMultiThreaded() throws InterruptedException,
+ public void testLongCounterMultiThreaded() throws InterruptedException,
MalformedObjectNameException, InstanceNotFoundException,
NullPointerException, ReflectionException, MBeanException,
InvalidAttributeValueException, AttributeNotFoundException {
- doMulti(Runtime.getRuntime().availableProcessors(), 10000000, 100, Runtime.getRuntime().availableProcessors());
+ Statistics statistics = (StatisticsImpl) StatisticsFactory.instance();
+ int counters = 100;
+ doMulti(Runtime.getRuntime().availableProcessors(), 100000, counters, Runtime.getRuntime().availableProcessors());
+ String json = ((StatisticsImpl) statistics).toJson();
+ Assert.assertNotNull(json);
+ LOGGER.info(json);
}
- public void doMulti(int threads, final int loops, final int counters,
+
+ public <T> void doMulti(int threads, final int loops, final int counters,
int cores) throws InterruptedException,
MalformedObjectNameException, InstanceNotFoundException,
NullPointerException, ReflectionException, MBeanException,
InvalidAttributeValueException, AttributeNotFoundException {
- final Marker m = MarkerFactory.getMarker("count");
- final Counter counter = Counter.getInstance();
+ final Statistics statistics = StatisticsFactory.instance();
// attemt to warm up hotspot by causing the code to be executed > 10k
// times.
for (int j = 0; j < 10000 + 1; j++) {
for (int i = 0; i < counters + 1; i++) {
- counter.increment(m, "cou\"nter" + i);
- }
+ statistics.get("counter"+i).incrementAndGet();
+ }
}
final int ncounts = loops * counters;
final int tcounts = ncounts * threads;
@@ -116,7 +89,7 @@ public class CounterTest {
l[threadn] = System.nanoTime();
for (int j = 0; j < loops; j++) {
for (int i = 0; i < counters; i++) {
- counter.increment(m, "cou\"nter" + i);
+ statistics.get("counter"+i).incrementAndGet();
}
}
l[threadn] = System.nanoTime() - l[threadn];
@@ -133,7 +106,7 @@ public class CounterTest {
while (running.get() > 0) {
dumpThreadWaits(mbeanServer);
- Thread.sleep(10000);
+ Thread.sleep(1000);
}
for (int i = 0; i < t.length; i++) {
@@ -149,7 +122,7 @@ public class CounterTest {
// this number should remain constant if no threads block other threads
// and both cores on the box are
// fully utilized.
- System.err.println("Time Taken for 1 count operation over " + t.length
+ LOGGER.info("Time Taken for 1 count operation over " + t.length
+ " threads is " + (overall / tcounts) + " ns ");
}
@@ -189,7 +162,7 @@ public class CounterTest {
lastBlockedTime = blockedTime;
lastBlockedCount = blockedCount;
lastCheck = System.currentTimeMillis();
- System.err.println(MessageFormat.format("Total Blocked time over all threads {0,number} ms in {1,number} ms threads blocked for {2,number,#.###}% of the time or on average {3,number,#.##} ms ",deltaTime,deltaRealTime,((double)deltaTime*100)/((double)deltaRealTime),((deltaCount==0)?0:((double)deltaTime)/((double)deltaCount))));
+ LOGGER.info(MessageFormat.format("Total Blocked time over all threads {0,number} ms in {1,number} ms threads blocked for {2,number,#.###}% of the time or on average {3,number,#.##} ms ",deltaTime,deltaRealTime,((double)deltaTime*100)/((double)deltaRealTime),((deltaCount==0)?0:((double)deltaTime)/((double)deltaCount))));
}
}
Propchange: sling/whiteboard/ieb/monitor/src/test/java/org/apache/sling/commons/monitor/impl/CounterTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: sling/whiteboard/ieb/monitor/src/test/java/org/apache/sling/commons/monitor/impl/StatisticsServletTest.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/ieb/monitor/src/test/java/org/apache/sling/commons/monitor/impl/StatisticsServletTest.java?rev=1451503&view=auto
==============================================================================
--- sling/whiteboard/ieb/monitor/src/test/java/org/apache/sling/commons/monitor/impl/StatisticsServletTest.java (added)
+++ sling/whiteboard/ieb/monitor/src/test/java/org/apache/sling/commons/monitor/impl/StatisticsServletTest.java Fri Mar 1 07:13:44 2013
@@ -0,0 +1,81 @@
+/*
+ * 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 SF 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.sling.commons.monitor.impl;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.io.Writer;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import junit.framework.Assert;
+
+import org.apache.sling.commons.json.JSONException;
+import org.apache.sling.commons.json.JSONObject;
+import org.apache.sling.commons.monitor.Statistics;
+import org.apache.sling.commons.monitor.StatisticsFactory;
+import org.junit.Test;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mockito;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class StatisticsServletTest {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(StatisticsServletTest.class);
+
+ @Test
+ public void testGet() throws ServletException, IOException, JSONException {
+ StatisticsServlet statisticsServlet = new StatisticsServlet();
+
+ Statistics statistics = StatisticsFactory.instance();
+ statistics.get("counter").incrementAndGet();
+ statistics.get("setvalue").set(System.currentTimeMillis());
+
+
+ HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
+ HttpServletResponse response = Mockito.mock(HttpServletResponse.class);
+ StringWriter stringWriter = new StringWriter();
+ PrintWriter printer = new PrintWriter(stringWriter);
+ Mockito.when(response.getWriter()).thenReturn(printer);
+ Mockito.when(request.getMethod()).thenReturn("GET");
+ statisticsServlet.service(request, response);
+ Assert.assertNotNull(stringWriter.toString());
+ JSONObject json = new JSONObject(stringWriter.toString());
+
+ LOGGER.info(json.toString(4));
+
+ }
+
+ @Test
+ public void testPost() throws ServletException, IOException {
+ StatisticsServlet statisticsServlet = new StatisticsServlet();
+ HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
+ HttpServletResponse response = Mockito.mock(HttpServletResponse.class);
+ Mockito.when(request.getMethod()).thenReturn("POST");
+ statisticsServlet.service(request, response);
+ ArgumentCaptor<Integer> status = ArgumentCaptor.forClass(Integer.class);
+ Mockito.verify(response).sendError(status.capture());
+ Assert.assertEquals((Integer)HttpServletResponse.SC_METHOD_NOT_ALLOWED, status.getValue());
+
+ }
+
+}
Propchange: sling/whiteboard/ieb/monitor/src/test/java/org/apache/sling/commons/monitor/impl/StatisticsServletTest.java
------------------------------------------------------------------------------
svn:eol-style = native