You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by ch...@apache.org on 2014/08/28 19:35:03 UTC
svn commit: r1621168 - in
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak:
api/jmx/CacheStatsMBean.java api/jmx/ConsolidatedCacheStatsMBean.java
cache/CacheStats.java cache/ConsolidatedCacheStats.java
Author: chetanm
Date: Thu Aug 28 17:35:03 2014
New Revision: 1621168
URL: http://svn.apache.org/r1621168
Log:
OAK-2060 - MBean to provide consolidated cache stats
Added:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/ConsolidatedCacheStatsMBean.java (with props)
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/cache/ConsolidatedCacheStats.java (with props)
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/CacheStatsMBean.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/cache/CacheStats.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/CacheStatsMBean.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/CacheStatsMBean.java?rev=1621168&r1=1621167&r2=1621168&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/CacheStatsMBean.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/CacheStatsMBean.java Thu Aug 28 17:35:03 2014
@@ -19,6 +19,8 @@ package org.apache.jackrabbit.oak.api.jm
public interface CacheStatsMBean {
String TYPE = "CacheStats";
+ String getName();
+
/**
* Returns the number of times {@link com.google.common.cache.Cache} lookup methods have returned either a cached or
* uncached value. This is defined as {@code getHitCount + getMissCount}.
Added: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/ConsolidatedCacheStatsMBean.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/ConsolidatedCacheStatsMBean.java?rev=1621168&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/ConsolidatedCacheStatsMBean.java (added)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/ConsolidatedCacheStatsMBean.java Thu Aug 28 17:35:03 2014
@@ -0,0 +1,28 @@
+/*
+ * 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.jackrabbit.oak.api.jmx;
+
+import javax.management.openmbean.TabularData;
+
+public interface ConsolidatedCacheStatsMBean {
+ String TYPE = "ConsolidatedCacheStats";
+
+ TabularData getCacheStats();
+}
Propchange: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/ConsolidatedCacheStatsMBean.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/cache/CacheStats.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/cache/CacheStats.java?rev=1621168&r1=1621167&r2=1621168&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/cache/CacheStats.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/cache/CacheStats.java Thu Aug 28 17:35:03 2014
@@ -166,7 +166,7 @@ public class CacheStats implements Cache
return cache.stats().minus(lastSnapshot);
}
- private static String timeInWords(long nanos) {
+ static String timeInWords(long nanos) {
long millis = TimeUnit.NANOSECONDS.toMillis(nanos);
return String.format("%d min, %d sec",
TimeUnit.MILLISECONDS.toMinutes(millis),
@@ -178,7 +178,7 @@ public class CacheStats implements Cache
/**
* Based on http://stackoverflow.com/a/3758880/1035417
*/
- private static String humanReadableByteCount(long bytes, boolean si) {
+ static String humanReadableByteCount(long bytes, boolean si) {
if (bytes < 0) {
return "0";
}
Added: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/cache/ConsolidatedCacheStats.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/cache/ConsolidatedCacheStats.java?rev=1621168&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/cache/ConsolidatedCacheStats.java (added)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/cache/ConsolidatedCacheStats.java Thu Aug 28 17:35:03 2014
@@ -0,0 +1,182 @@
+/*
+ * 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.jackrabbit.oak.cache;
+
+import java.math.BigDecimal;
+import java.math.MathContext;
+import java.util.concurrent.TimeUnit;
+
+import javax.management.openmbean.CompositeDataSupport;
+import javax.management.openmbean.CompositeType;
+import javax.management.openmbean.OpenDataException;
+import javax.management.openmbean.OpenType;
+import javax.management.openmbean.SimpleType;
+import javax.management.openmbean.TabularData;
+import javax.management.openmbean.TabularDataSupport;
+import javax.management.openmbean.TabularType;
+
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Deactivate;
+import org.apache.jackrabbit.oak.api.jmx.CacheStatsMBean;
+import org.apache.jackrabbit.oak.api.jmx.ConsolidatedCacheStatsMBean;
+import org.apache.jackrabbit.oak.osgi.OsgiWhiteboard;
+import org.apache.jackrabbit.oak.spi.whiteboard.Registration;
+import org.apache.jackrabbit.oak.spi.whiteboard.Tracker;
+import org.apache.jackrabbit.oak.spi.whiteboard.Whiteboard;
+import org.osgi.framework.BundleContext;
+
+import static org.apache.jackrabbit.oak.cache.CacheStats.humanReadableByteCount;
+import static org.apache.jackrabbit.oak.cache.CacheStats.timeInWords;
+import static org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils.registerMBean;
+
+@Component
+public class ConsolidatedCacheStats implements ConsolidatedCacheStatsMBean {
+
+ private Tracker<CacheStatsMBean> cacheStats;
+
+ private Registration mbeanReg;
+
+ @Override
+ public TabularData getCacheStats() {
+ TabularDataSupport tds;
+ try {
+ TabularType tt = new TabularType(CacheStatsData.class.getName(),
+ "Consolidated Cache Stats", CacheStatsData.TYPE, new String[]{"name"});
+ tds = new TabularDataSupport(tt);
+ for(CacheStatsMBean stats : cacheStats.getServices()){
+ tds.put(new CacheStatsData(stats).toCompositeData());
+ }
+ } catch (OpenDataException e) {
+ throw new IllegalStateException(e);
+ }
+ return tds;
+ }
+
+ @Activate
+ private void activate(BundleContext context){
+ Whiteboard wb = new OsgiWhiteboard(context);
+ cacheStats = wb.track(CacheStatsMBean.class);
+ mbeanReg = registerMBean(wb,
+ ConsolidatedCacheStatsMBean.class,
+ this,
+ ConsolidatedCacheStatsMBean.TYPE,
+ "Consolidated Cache statistics");
+ }
+
+ @Deactivate
+ private void deactivate(){
+ if(mbeanReg != null){
+ mbeanReg.unregister();
+ }
+
+ if(cacheStats != null){
+ cacheStats.stop();
+ }
+ }
+
+ private static class CacheStatsData {
+ static final String[] FIELD_NAMES = new String[]{
+ "name",
+ "requestCount",
+ "hitCount",
+ "hitRate",
+ "missCount",
+ "missRate",
+ "loadCount",
+ "loadSuccessCount",
+ "loadExceptionCount",
+ "totalLoadTime",
+ "averageLoadPenalty",
+ "evictionCount",
+ "elementCount",
+ "totalWeight",
+ "maxWeight",
+ };
+
+ static final String[] FIELD_DESCRIPTIONS = FIELD_NAMES;
+
+ @SuppressWarnings("rawtypes")
+ static final OpenType[] FIELD_TYPES = new OpenType[]{
+ SimpleType.STRING,
+ SimpleType.LONG,
+ SimpleType.LONG,
+ SimpleType.BIGDECIMAL,
+ SimpleType.LONG,
+ SimpleType.BIGDECIMAL,
+ SimpleType.LONG,
+ SimpleType.LONG,
+ SimpleType.LONG,
+ SimpleType.STRING,
+ SimpleType.STRING,
+ SimpleType.LONG,
+ SimpleType.LONG,
+ SimpleType.STRING,
+ SimpleType.STRING,
+ };
+
+ static final CompositeType TYPE = createCompositeType();
+
+ static CompositeType createCompositeType() {
+ try {
+ return new CompositeType(
+ CacheStatsData.class.getName(),
+ "Composite data type for Cache statistics",
+ CacheStatsData.FIELD_NAMES,
+ CacheStatsData.FIELD_DESCRIPTIONS,
+ CacheStatsData.FIELD_TYPES);
+ } catch (OpenDataException e) {
+ throw new IllegalStateException(e);
+ }
+ }
+
+ private final CacheStatsMBean stats;
+
+ public CacheStatsData(CacheStatsMBean stats){
+ this.stats = stats;
+ }
+
+ CompositeDataSupport toCompositeData() {
+ Object[] values = new Object[]{
+ stats.getName(),
+ stats.getRequestCount(),
+ stats.getHitCount(),
+ new BigDecimal(stats.getHitRate(),new MathContext(2)),
+ stats.getMissCount(),
+ new BigDecimal(stats.getMissRate(), new MathContext(2)),
+ stats.getLoadCount(),
+ stats.getLoadSuccessCount(),
+ stats.getLoadExceptionCount(),
+ timeInWords(stats.getTotalLoadTime()),
+ TimeUnit.NANOSECONDS.toMillis((long) stats.getAverageLoadPenalty()) + "ms",
+ stats.getEvictionCount(),
+ stats.getElementCount(),
+ humanReadableByteCount(stats.estimateCurrentWeight(), true),
+ humanReadableByteCount(stats.getMaxTotalWeight(), true),
+ };
+ try {
+ return new CompositeDataSupport(TYPE, FIELD_NAMES, values);
+ } catch (OpenDataException e) {
+ throw new IllegalStateException(e);
+ }
+ }
+ }
+
+}
Propchange: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/cache/ConsolidatedCacheStats.java
------------------------------------------------------------------------------
svn:eol-style = native