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 2015/12/23 07:24:46 UTC
svn commit: r1721498 - in /jackrabbit/oak/trunk/oak-core/src:
main/java/org/apache/jackrabbit/oak/plugins/blob/
main/java/org/apache/jackrabbit/oak/plugins/metric/
main/java/org/apache/jackrabbit/oak/stats/
test/java/org/apache/jackrabbit/oak/plugins/m...
Author: chetanm
Date: Wed Dec 23 06:24:45 2015
New Revision: 1721498
URL: http://svn.apache.org/viewvc?rev=1721498&view=rev
Log:
OAK-3791 - StatisticsProvider should provide a way to disable TimeSeries for certain metrics
Introducing StatsOptions which can be passed as part of metric creation call to control the various options.
Added:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/CounterImpl.java (with props)
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/HistogramImpl.java (with props)
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/MeterImpl.java (with props)
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/TimerImpl.java (with props)
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/StatsOptions.java (with props)
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/metric/MetricImplTest.java (with props)
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/BlobStoreStats.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/MetricStatisticsProvider.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/DefaultStatisticsProvider.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/StatisticManager.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/StatisticsProvider.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/metric/MetricStatisticsProviderTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/stats/DefaultStatisticsProviderTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/stats/StatisticManagerTest.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/BlobStoreStats.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/BlobStoreStats.java?rev=1721498&r1=1721497&r2=1721498&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/BlobStoreStats.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/BlobStoreStats.java Wed Dec 23 06:24:45 2015
@@ -28,6 +28,7 @@ import org.apache.jackrabbit.oak.spi.blo
import org.apache.jackrabbit.oak.stats.HistogramStats;
import org.apache.jackrabbit.oak.stats.MeterStats;
import org.apache.jackrabbit.oak.stats.StatisticsProvider;
+import org.apache.jackrabbit.oak.stats.StatsOptions;
import org.apache.jackrabbit.stats.TimeSeriesStatsUtil;
import static org.apache.jackrabbit.oak.commons.IOUtils.humanReadableByteCount;
@@ -49,15 +50,15 @@ public class BlobStoreStats implements B
public BlobStoreStats(StatisticsProvider sp) {
this.statisticsProvider = sp;
- this.uploadHisto = sp.getHistogram(BLOB_UPLOADS);
+ this.uploadHisto = sp.getHistogram(BLOB_UPLOADS, StatsOptions.DEFAULT);
//TODO Need to expose an API in StatisticsProvider to register for avg
//That would give us upload and download *rate*
- this.uploadSizeMeter = sp.getMeter("BLOB_UPLOAD_SIZE");
- this.uploadTimeMeter = sp.getMeter("BLOB_UPLOAD_TIME");
+ this.uploadSizeMeter = sp.getMeter("BLOB_UPLOAD_SIZE", StatsOptions.DEFAULT);
+ this.uploadTimeMeter = sp.getMeter("BLOB_UPLOAD_TIME", StatsOptions.DEFAULT);
- this.downloadHisto = sp.getHistogram(BLOB_DOWNLOADS);
- this.downloadSizeMeter = sp.getMeter("BLOB_DOWNLOAD_SIZE");
- this.downloadTimeMeter = sp.getMeter("BLOB_DOWNLOAD_TIME");
+ this.downloadHisto = sp.getHistogram(BLOB_DOWNLOADS, StatsOptions.DEFAULT);
+ this.downloadSizeMeter = sp.getMeter("BLOB_DOWNLOAD_SIZE", StatsOptions.DEFAULT);
+ this.downloadTimeMeter = sp.getMeter("BLOB_DOWNLOAD_TIME", StatsOptions.DEFAULT);
}
@Override
Added: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/CounterImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/CounterImpl.java?rev=1721498&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/CounterImpl.java (added)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/CounterImpl.java Wed Dec 23 06:24:45 2015
@@ -0,0 +1,56 @@
+/*
+ * 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.plugins.metric;
+
+import com.codahale.metrics.Counter;
+import org.apache.jackrabbit.oak.stats.CounterStats;
+
+final class CounterImpl implements CounterStats {
+ private final Counter counter;
+
+ CounterImpl(Counter counter) {
+ this.counter = counter;
+ }
+
+ @Override
+ public void inc() {
+ counter.inc();
+ }
+
+ @Override
+ public void dec() {
+ counter.dec();
+ }
+
+ @Override
+ public void inc(long n) {
+ counter.inc(n);
+ }
+
+ @Override
+ public void dec(long n) {
+ counter.dec(n);
+ }
+
+ @Override
+ public long getCount() {
+ return counter.getCount();
+ }
+}
Propchange: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/CounterImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/HistogramImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/HistogramImpl.java?rev=1721498&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/HistogramImpl.java (added)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/HistogramImpl.java Wed Dec 23 06:24:45 2015
@@ -0,0 +1,41 @@
+/*
+ * 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.plugins.metric;
+
+import com.codahale.metrics.Histogram;
+import org.apache.jackrabbit.oak.stats.HistogramStats;
+
+final class HistogramImpl implements HistogramStats {
+ private final Histogram histogram;
+
+ HistogramImpl(Histogram histogram) {
+ this.histogram = histogram;
+ }
+
+ @Override
+ public void update(long value) {
+ histogram.update(value);
+ }
+
+ @Override
+ public long getCount() {
+ return histogram.getCount();
+ }
+}
Propchange: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/HistogramImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/MeterImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/MeterImpl.java?rev=1721498&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/MeterImpl.java (added)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/MeterImpl.java Wed Dec 23 06:24:45 2015
@@ -0,0 +1,46 @@
+/*
+ * 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.plugins.metric;
+
+import com.codahale.metrics.Meter;
+import org.apache.jackrabbit.oak.stats.MeterStats;
+
+final class MeterImpl implements MeterStats {
+ private final Meter meter;
+
+ MeterImpl(Meter meter) {
+ this.meter = meter;
+ }
+
+ @Override
+ public void mark() {
+ meter.mark();
+ }
+
+ @Override
+ public void mark(long n) {
+ meter.mark(n);
+ }
+
+ @Override
+ public long getCount() {
+ return meter.getCount();
+ }
+}
Propchange: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/MeterImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/MetricStatisticsProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/MetricStatisticsProvider.java?rev=1721498&r1=1721497&r2=1721498&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/MetricStatisticsProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/MetricStatisticsProvider.java Wed Dec 23 06:24:45 2015
@@ -22,9 +22,9 @@ package org.apache.jackrabbit.oak.plugin
import java.io.Closeable;
import java.util.Hashtable;
import java.util.Map;
-import java.util.Set;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicLong;
import javax.management.MBeanServer;
import javax.management.MalformedObjectNameException;
@@ -36,7 +36,6 @@ import com.codahale.metrics.MetricRegist
import com.codahale.metrics.ObjectNameFactory;
import com.codahale.metrics.RatioGauge;
import com.codahale.metrics.Timer;
-import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Maps;
import org.apache.jackrabbit.api.stats.RepositoryStatistics;
import org.apache.jackrabbit.api.stats.RepositoryStatistics.Type;
@@ -49,6 +48,7 @@ import org.apache.jackrabbit.oak.stats.M
import org.apache.jackrabbit.oak.stats.SimpleStats;
import org.apache.jackrabbit.oak.stats.StatisticsProvider;
import org.apache.jackrabbit.oak.stats.Stats;
+import org.apache.jackrabbit.oak.stats.StatsOptions;
import org.apache.jackrabbit.oak.stats.TimerStats;
import org.apache.jackrabbit.stats.RepositoryStatisticsImpl;
import org.slf4j.Logger;
@@ -59,17 +59,6 @@ public class MetricStatisticsProvider im
private static final String JMX_TYPE_METRICS = "Metrics";
- /**
- * Types for which Metrics based stats would not be collected
- * and only default stats would be collected
- */
- private static final Set<String> NOOP_METRIC_TYPES = ImmutableSet.of(
- Type.SESSION_READ_COUNTER.name(),
- Type.SESSION_READ_DURATION.name(),
- Type.SESSION_WRITE_DURATION.name(),
- Type.QUERY_COUNT.name()
- );
-
private final Map<String, Stats> statsRegistry = Maps.newHashMap();
private final MetricRegistry registry;
private final JmxReporter reporter;
@@ -109,23 +98,23 @@ public class MetricStatisticsProvider im
}
@Override
- public MeterStats getMeter(String name) {
- return getStats(name, StatsBuilder.METERS);
+ public MeterStats getMeter(String name, StatsOptions options) {
+ return getStats(name, StatsBuilder.METERS, options);
}
@Override
- public CounterStats getCounterStats(String name) {
- return getStats(name, StatsBuilder.COUNTERS);
+ public CounterStats getCounterStats(String name, StatsOptions options) {
+ return getStats(name, StatsBuilder.COUNTERS, options);
}
@Override
- public TimerStats getTimer(String name) {
- return getStats(name, StatsBuilder.TIMERS);
+ public TimerStats getTimer(String name, StatsOptions options) {
+ return getStats(name, StatsBuilder.TIMERS, options);
}
@Override
- public HistogramStats getHistogram(String name) {
- return getStats(name, StatsBuilder.HISTOGRAMS);
+ public HistogramStats getHistogram(String name, StatsOptions options) {
+ return getStats(name, StatsBuilder.HISTOGRAMS, options);
}
public MetricRegistry getRegistry() {
@@ -136,27 +125,17 @@ public class MetricStatisticsProvider im
return repoStats;
}
- private synchronized <T extends Stats> T getStats(String type, StatsBuilder<T> builder) {
- String name = type;
- Type enumType = Type.getType(type);
- Stats stats = statsRegistry.get(type);
+ private synchronized <T extends Stats> T getStats(String name, StatsBuilder<T> builder, StatsOptions options) {
+ Stats stats = statsRegistry.get(name);
if (stats == null) {
- SimpleStats delegate;
- if (enumType != null) {
- delegate = new SimpleStats(repoStats.getCounter(enumType), builder.getType());
- name = typeToName(enumType);
- } else {
- boolean resetValueEachSecond = builder != StatsBuilder.COUNTERS;
- delegate = new SimpleStats(repoStats.getCounter(type, resetValueEachSecond), builder.getType());
- }
-
- if (NOOP_METRIC_TYPES.contains(name)) {
- stats = delegate;
+ if (options.isOnlyMetricEnabled()) {
+ stats = builder.newMetric(this, name);
+ } else if (options.isOnlyTimeSeriesEnabled()){
+ stats = getTimerSeriesStats(name, builder);
} else {
- stats = builder.newComposite(delegate, this, name);
+ stats = builder.newComposite(getTimerSeriesStats(name, builder), this, name);
}
-
- statsRegistry.put(type, stats);
+ statsRegistry.put(name, stats);
}
if (builder.isInstance(stats)) {
@@ -167,6 +146,18 @@ public class MetricStatisticsProvider im
throw new IllegalStateException();
}
+ private SimpleStats getTimerSeriesStats(String name, StatsBuilder builder){
+ AtomicLong counter;
+ Type enumType = Type.getType(name);
+ if (enumType != null) {
+ counter = repoStats.getCounter(enumType);
+ } else {
+ boolean resetValueEachSecond = builder != StatsBuilder.COUNTERS;
+ counter = repoStats.getCounter(name, resetValueEachSecond);
+ }
+ return new SimpleStats(counter, builder.getType());
+ }
+
private void registerAverages() {
registry.register(typeToName(Type.OBSERVATION_EVENT_AVERAGE),
new AvgGauge(compStats(Type.OBSERVATION_EVENT_COUNTER, StatsBuilder.METERS).getMeter(),
@@ -174,7 +165,7 @@ public class MetricStatisticsProvider im
}
private CompositeStats compStats(Type type, StatsBuilder builder){
- Stats stats = getStats(typeToName(type), builder);
+ Stats stats = getStats(typeToName(type), builder, StatsOptions.DEFAULT);
return (CompositeStats) stats;
}
@@ -187,6 +178,11 @@ public class MetricStatisticsProvider im
}
@Override
+ public Stats newMetric(MetricStatisticsProvider provider, String name) {
+ return new CounterImpl(provider.registry.counter(name));
+ }
+
+ @Override
public boolean isInstance(Stats metric) {
return CounterStats.class.isInstance(metric);
}
@@ -200,9 +196,12 @@ public class MetricStatisticsProvider im
StatsBuilder<MeterStats> METERS = new StatsBuilder<MeterStats>() {
@Override
public CompositeStats newComposite(SimpleStats delegate, MetricStatisticsProvider provider,String name) {
- Meter meter = new Meter(provider.metricsClock);
- provider.registry.register(name, meter);
- return new CompositeStats(delegate, meter);
+ return new CompositeStats(delegate, getMeter(provider, name));
+ }
+
+ @Override
+ public Stats newMetric(MetricStatisticsProvider provider, String name) {
+ return new MeterImpl(getMeter(provider, name));
}
@Override
@@ -214,6 +213,12 @@ public class MetricStatisticsProvider im
public SimpleStats.Type getType() {
return SimpleStats.Type.METER;
}
+
+ private Meter getMeter(MetricStatisticsProvider provider, String name) {
+ Meter meter = new Meter(provider.metricsClock);
+ provider.registry.register(name, meter);
+ return meter;
+ }
};
StatsBuilder<TimerStats> TIMERS = new StatsBuilder<TimerStats>() {
@@ -224,6 +229,11 @@ public class MetricStatisticsProvider im
}
@Override
+ public Stats newMetric(MetricStatisticsProvider provider, String name) {
+ return new TimerImpl(provider.registry.timer(name));
+ }
+
+ @Override
public boolean isInstance(Stats metric) {
return TimerStats.class.isInstance(metric);
}
@@ -242,6 +252,11 @@ public class MetricStatisticsProvider im
}
@Override
+ public Stats newMetric(MetricStatisticsProvider provider, String name) {
+ return new HistogramImpl(provider.registry.histogram(name));
+ }
+
+ @Override
public boolean isInstance(Stats metric) {
return HistogramStats.class.isInstance(metric);
}
@@ -254,6 +269,8 @@ public class MetricStatisticsProvider im
CompositeStats newComposite(SimpleStats delegate, MetricStatisticsProvider provider,String name);
+ Stats newMetric(MetricStatisticsProvider provider,String name);
+
boolean isInstance(Stats stats);
SimpleStats.Type getType();
Added: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/TimerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/TimerImpl.java?rev=1721498&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/TimerImpl.java (added)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/TimerImpl.java Wed Dec 23 06:24:45 2015
@@ -0,0 +1,66 @@
+/*
+ * 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.plugins.metric;
+
+import java.util.concurrent.TimeUnit;
+
+import com.codahale.metrics.Timer;
+import org.apache.jackrabbit.oak.stats.TimerStats;
+
+final class TimerImpl implements TimerStats{
+ private final Timer timer;
+
+ TimerImpl(Timer timer) {
+ this.timer = timer;
+ }
+
+ @Override
+ public void update(long duration, TimeUnit unit) {
+ timer.update(duration, unit);
+ }
+
+ @Override
+ public Context time() {
+ return new ContextImpl(timer.time());
+ }
+
+ @Override
+ public long getCount() {
+ return timer.getCount();
+ }
+
+ private static final class ContextImpl implements Context {
+ private final Timer.Context context ;
+
+ private ContextImpl(Timer.Context context) {
+ this.context = context;
+ }
+
+ public long stop() {
+ return context.stop();
+ }
+
+ /** Equivalent to calling {@link #stop()}. */
+ @Override
+ public void close() {
+ stop();
+ }
+ }
+}
Propchange: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/TimerImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/DefaultStatisticsProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/DefaultStatisticsProvider.java?rev=1721498&r1=1721497&r2=1721498&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/DefaultStatisticsProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/DefaultStatisticsProvider.java Wed Dec 23 06:24:45 2015
@@ -21,6 +21,7 @@ package org.apache.jackrabbit.oak.stats;
import java.util.Map;
import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.atomic.AtomicLong;
import com.google.common.collect.Maps;
import org.apache.jackrabbit.api.stats.RepositoryStatistics;
@@ -41,33 +42,36 @@ public final class DefaultStatisticsProv
}
@Override
- public MeterStats getMeter(String name) {
- return getStats(name, true, SimpleStats.Type.METER);
+ public MeterStats getMeter(String name, StatsOptions options) {
+ return getStats(name, true, SimpleStats.Type.METER, options);
}
@Override
- public CounterStats getCounterStats(String name) {
- return getStats(name, false, SimpleStats.Type.COUNTER);
+ public CounterStats getCounterStats(String name, StatsOptions options) {
+ return getStats(name, false, SimpleStats.Type.COUNTER, options);
}
@Override
- public TimerStats getTimer(String name) {
- return getStats(name, true, SimpleStats.Type.TIMER);
+ public TimerStats getTimer(String name, StatsOptions options) {
+ return getStats(name, true, SimpleStats.Type.TIMER, options);
}
@Override
- public HistogramStats getHistogram(String name) {
- return getStats(name, true, SimpleStats.Type.HISTOGRAM);
+ public HistogramStats getHistogram(String name, StatsOptions options) {
+ return getStats(name, true, SimpleStats.Type.HISTOGRAM, options);
}
- private synchronized SimpleStats getStats(String type, boolean resetValueEachSecond, SimpleStats.Type statsType){
+ private synchronized SimpleStats getStats(String type, boolean resetValueEachSecond, SimpleStats.Type statsType,
+ StatsOptions options){
Type enumType = Type.getType(type);
SimpleStats stats = statsMeters.get(type);
if (stats == null){
if (enumType != null) {
stats = new SimpleStats(repoStats.getCounter(enumType), statsType);
- } else {
+ } else if (options.isTimeSeriesEnabled()) {
stats = new SimpleStats(repoStats.getCounter(type, resetValueEachSecond), statsType);
+ } else {
+ stats = new SimpleStats(new AtomicLong(), statsType);
}
statsMeters.put(type, stats);
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/StatisticManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/StatisticManager.java?rev=1721498&r1=1721497&r2=1721498&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/StatisticManager.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/StatisticManager.java Wed Dec 23 06:24:45 2015
@@ -22,8 +22,9 @@ package org.apache.jackrabbit.oak.stats;
import static org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils.registerMBean;
import static org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils.scheduleWithFixedDelay;
+import java.util.EnumSet;
+import java.util.Set;
import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.atomic.AtomicLong;
import org.apache.jackrabbit.api.jmx.QueryStatManagerMBean;
import org.apache.jackrabbit.api.stats.RepositoryStatistics.Type;
@@ -47,6 +48,17 @@ public class StatisticManager {
private final CompositeRegistration registration;
/**
+ * Types for which Metrics based stats would not be collected
+ * and only default stats would be collected
+ */
+ private static final EnumSet<Type> NOOP_METRIC_TYPES = EnumSet.of(
+ Type.SESSION_READ_COUNTER,
+ Type.SESSION_READ_DURATION,
+ Type.SESSION_WRITE_DURATION,
+ Type.QUERY_COUNT
+ );
+
+ /**
* Create a new instance of this class registering all repository wide
* statistics with the passed {@code whiteboard}.
* @param whiteboard whiteboard for registering the individual statistics with
@@ -80,15 +92,15 @@ public class StatisticManager {
}
public MeterStats getMeter(Type type){
- return repoStats.getMeter(type.name());
+ return repoStats.getMeter(type.name(), getOption(type));
}
public CounterStats getStatsCounter(Type type){
- return repoStats.getCounterStats(type.name());
+ return repoStats.getCounterStats(type.name(), getOption(type));
}
public TimerStats getTimer(Type type){
- return repoStats.getTimer(type.name());
+ return repoStats.getTimer(type.name(), getOption(type));
}
@@ -113,4 +125,11 @@ public class StatisticManager {
return provider;
}
+ private static StatsOptions getOption(Type type){
+ if (NOOP_METRIC_TYPES.contains(type)){
+ return StatsOptions.TIME_SERIES_ONLY;
+ }
+ return StatsOptions.DEFAULT;
+ }
+
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/StatisticsProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/StatisticsProvider.java?rev=1721498&r1=1721497&r2=1721498&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/StatisticsProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/StatisticsProvider.java Wed Dec 23 06:24:45 2015
@@ -24,7 +24,6 @@ import org.apache.jackrabbit.api.stats.R
@ProviderType
public interface StatisticsProvider {
-
StatisticsProvider NOOP = new StatisticsProvider() {
@Override
public RepositoryStatistics getStats() {
@@ -32,22 +31,22 @@ public interface StatisticsProvider {
}
@Override
- public MeterStats getMeter(String name) {
+ public MeterStats getMeter(String name, StatsOptions options) {
return NoopStats.INSTANCE;
}
@Override
- public CounterStats getCounterStats(String name) {
+ public CounterStats getCounterStats(String name, StatsOptions options) {
return NoopStats.INSTANCE;
}
@Override
- public TimerStats getTimer(String name) {
+ public TimerStats getTimer(String name, StatsOptions options) {
return NoopStats.INSTANCE;
}
@Override
- public HistogramStats getHistogram(String name) {
+ public HistogramStats getHistogram(String name, StatsOptions options) {
return NoopStats.INSTANCE;
}
};
@@ -55,11 +54,11 @@ public interface StatisticsProvider {
RepositoryStatistics getStats();
- MeterStats getMeter(String name);
+ MeterStats getMeter(String name, StatsOptions options);
- CounterStats getCounterStats(String name);
+ CounterStats getCounterStats(String name, StatsOptions options);
- TimerStats getTimer(String name);
+ TimerStats getTimer(String name, StatsOptions options);
- HistogramStats getHistogram(String name);
+ HistogramStats getHistogram(String name, StatsOptions options);
}
Added: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/StatsOptions.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/StatsOptions.java?rev=1721498&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/StatsOptions.java (added)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/StatsOptions.java Wed Dec 23 06:24:45 2015
@@ -0,0 +1,61 @@
+/*
+ * 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.stats;
+
+public final class StatsOptions {
+ /**
+ * Default mode where both TimeSeries data and other statistical data
+ * would be collected
+ */
+ public static final StatsOptions DEFAULT = new StatsOptions(true, true);
+ /**
+ * In this mode only TimeSeries data would be collected.
+ */
+ public static final StatsOptions TIME_SERIES_ONLY = new StatsOptions(true, false);
+ /**
+ * In this mode only statistical data would be collected.
+ */
+ public static final StatsOptions METRICS_ONLY = new StatsOptions(false, true);
+
+ private final boolean timeSeriesEnabled;
+ private final boolean metricsEnabled;
+
+ private StatsOptions(boolean timeSeriesEnabled, boolean metricsEnabled) {
+ this.metricsEnabled = metricsEnabled;
+ this.timeSeriesEnabled = timeSeriesEnabled;
+ }
+
+ public boolean isTimeSeriesEnabled() {
+ return timeSeriesEnabled;
+ }
+
+ public boolean isMetricsEnabled() {
+ return metricsEnabled;
+ }
+
+ public boolean isOnlyMetricEnabled() {
+ return !timeSeriesEnabled && metricsEnabled;
+ }
+
+ public boolean isOnlyTimeSeriesEnabled() {
+ return timeSeriesEnabled && !metricsEnabled;
+ }
+
+}
Propchange: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/StatsOptions.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/metric/MetricImplTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/metric/MetricImplTest.java?rev=1721498&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/metric/MetricImplTest.java (added)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/metric/MetricImplTest.java Wed Dec 23 06:24:45 2015
@@ -0,0 +1,121 @@
+/*
+ * 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.plugins.metric;
+
+import java.util.concurrent.TimeUnit;
+
+import com.codahale.metrics.Counter;
+import com.codahale.metrics.ExponentiallyDecayingReservoir;
+import com.codahale.metrics.Histogram;
+import com.codahale.metrics.Meter;
+import com.codahale.metrics.MetricRegistry;
+import com.codahale.metrics.Timer;
+import org.apache.jackrabbit.oak.stats.TimerStats;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class MetricImplTest {
+ private MetricRegistry registry = new MetricRegistry();
+
+
+ @Test
+ public void counter() throws Exception {
+ Counter counter = registry.counter("test");
+ CounterImpl counterStats = new CounterImpl(counter);
+
+ counterStats.inc();
+ assertEquals(1, counter.getCount());
+ assertEquals(1, counterStats.getCount());
+
+ counterStats.inc();
+ counterStats.inc();
+
+ counterStats.dec();
+ assertEquals(2, counter.getCount());
+
+ counterStats.inc(7);
+ assertEquals(9, counter.getCount());
+
+ counterStats.dec(5);
+ assertEquals(4, counter.getCount());
+ assertEquals(4, counterStats.getCount());
+ }
+
+ @Test
+ public void meter() throws Exception {
+ Meter meter = registry.meter("test");
+ MeterImpl meterStats = new MeterImpl(meter);
+
+ meterStats.mark();
+ assertEquals(1, meter.getCount());
+
+ meterStats.mark(5);
+ assertEquals(6, meter.getCount());
+ assertEquals(6, meterStats.getCount());
+ }
+
+ @Test
+ public void timer() throws Exception {
+ Timer time = registry.timer("test");
+ TimerImpl timerStats = new TimerImpl(time);
+
+ timerStats.update(100, TimeUnit.SECONDS);
+ assertEquals(1, time.getCount());
+ assertEquals(TimeUnit.SECONDS.toNanos(100), time.getSnapshot().getMax());
+
+ timerStats.update(100, TimeUnit.SECONDS);
+ assertEquals(2, time.getCount());
+ assertEquals(2, timerStats.getCount());
+ }
+
+ @Test
+ public void histogram() throws Exception {
+ Histogram histo = registry.histogram("test");
+ HistogramImpl histoStats = new HistogramImpl(histo);
+
+ histoStats.update(100);
+ assertEquals(1, histo.getCount());
+ assertEquals(100, histo.getSnapshot().getMax());
+ }
+
+ @Test
+ public void timerContext() throws Exception{
+ VirtualClock clock = new VirtualClock();
+ Timer time = new Timer(new ExponentiallyDecayingReservoir(), clock);
+
+ TimerStats timerStats = new TimerImpl(time);
+ TimerStats.Context context = timerStats.time();
+
+ clock.tick = TimeUnit.SECONDS.toNanos(314);
+ context.close();
+
+ assertEquals(1, time.getCount());
+ assertEquals(TimeUnit.SECONDS.toNanos(314), time.getSnapshot().getMax());
+ }
+
+ private static class VirtualClock extends com.codahale.metrics.Clock {
+ long tick;
+ @Override
+ public long getTick() {
+ return tick;
+ }
+ }
+}
Propchange: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/metric/MetricImplTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/metric/MetricStatisticsProviderTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/metric/MetricStatisticsProviderTest.java?rev=1721498&r1=1721497&r2=1721498&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/metric/MetricStatisticsProviderTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/metric/MetricStatisticsProviderTest.java Wed Dec 23 06:24:45 2015
@@ -38,6 +38,7 @@ import org.apache.jackrabbit.oak.stats.H
import org.apache.jackrabbit.oak.stats.MeterStats;
import org.apache.jackrabbit.oak.stats.NoopStats;
import org.apache.jackrabbit.oak.stats.SimpleStats;
+import org.apache.jackrabbit.oak.stats.StatsOptions;
import org.apache.jackrabbit.oak.stats.TimerStats;
import org.junit.After;
import org.junit.Test;
@@ -46,16 +47,15 @@ import static org.junit.Assert.assertEqu
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
public class MetricStatisticsProviderTest {
private MBeanServer server = ManagementFactory.getPlatformMBeanServer();
private ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
- private MetricStatisticsProvider statsProvider;
+ private MetricStatisticsProvider statsProvider = new MetricStatisticsProvider(server, executorService);
@Test
public void basicSetup() throws Exception {
- statsProvider = new MetricStatisticsProvider(server, executorService);
-
//By default avg counters would be configured. So check if they are
//configured
assertEquals(1, statsProvider.getRegistry().getMeters().size());
@@ -70,8 +70,7 @@ public class MetricStatisticsProviderTes
@Test
public void meter() throws Exception {
- statsProvider = new MetricStatisticsProvider(server, executorService);
- MeterStats meterStats = statsProvider.getMeter("test");
+ MeterStats meterStats = statsProvider.getMeter("test", StatsOptions.DEFAULT);
assertNotNull(meterStats);
assertNotNull(statsProvider.getRegistry().getMeters().containsKey("test"));
@@ -80,8 +79,7 @@ public class MetricStatisticsProviderTes
@Test
public void counter() throws Exception {
- statsProvider = new MetricStatisticsProvider(server, executorService);
- CounterStats counterStats = statsProvider.getCounterStats("test");
+ CounterStats counterStats = statsProvider.getCounterStats("test", StatsOptions.DEFAULT);
assertNotNull(counterStats);
assertNotNull(statsProvider.getRegistry().getCounters().containsKey("test"));
@@ -90,8 +88,7 @@ public class MetricStatisticsProviderTes
@Test
public void timer() throws Exception {
- statsProvider = new MetricStatisticsProvider(server, executorService);
- TimerStats timerStats = statsProvider.getTimer("test");
+ TimerStats timerStats = statsProvider.getTimer("test", StatsOptions.DEFAULT);
assertNotNull(timerStats);
assertNotNull(statsProvider.getRegistry().getTimers().containsKey("test"));
@@ -100,8 +97,7 @@ public class MetricStatisticsProviderTes
@Test
public void histogram() throws Exception {
- statsProvider = new MetricStatisticsProvider(server, executorService);
- HistogramStats histoStats = statsProvider.getHistogram("test");
+ HistogramStats histoStats = statsProvider.getHistogram("test", StatsOptions.DEFAULT);
assertNotNull(histoStats);
assertNotNull(statsProvider.getRegistry().getHistograms().containsKey("test"));
@@ -110,8 +106,7 @@ public class MetricStatisticsProviderTes
@Test
public void timeSeriesIntegration() throws Exception {
- statsProvider = new MetricStatisticsProvider(server, executorService);
- MeterStats meterStats = statsProvider.getMeter(Type.SESSION_COUNT.name());
+ MeterStats meterStats = statsProvider.getMeter(Type.SESSION_COUNT.name(), StatsOptions.DEFAULT);
meterStats.mark(5);
assertEquals(5, statsProvider.getRepoStats().getCounter(Type.SESSION_COUNT).get());
@@ -119,18 +114,32 @@ public class MetricStatisticsProviderTes
@Test
public void jmxNaming() throws Exception {
- statsProvider = new MetricStatisticsProvider(server, executorService);
- TimerStats timerStats = statsProvider.getTimer("hello");
+ TimerStats timerStats = statsProvider.getTimer("hello", StatsOptions.DEFAULT);
assertNotNull(server.getObjectInstance(new ObjectName("org.apache.jackrabbit.oak:type=Metrics,name=hello")));
}
@Test
public void noopMeter() throws Exception {
- statsProvider = new MetricStatisticsProvider(server, executorService);
- assertTrue(statsProvider.getTimer(Type.SESSION_READ_DURATION.name()) instanceof SimpleStats);
- assertTrue(statsProvider.getTimer(Type.SESSION_WRITE_DURATION.name()) instanceof SimpleStats);
- assertTrue(statsProvider.getTimer(Type.QUERY_COUNT.name()) instanceof SimpleStats);
- assertNotEquals(statsProvider.getMeter(Type.OBSERVATION_EVENT_COUNTER.name()), NoopStats.INSTANCE);
+ assertInstanceOf(statsProvider.getTimer(Type.SESSION_READ_DURATION.name(), StatsOptions.TIME_SERIES_ONLY), SimpleStats.class);
+ assertNotEquals(statsProvider.getMeter(Type.OBSERVATION_EVENT_COUNTER.name(), StatsOptions.TIME_SERIES_ONLY), NoopStats.INSTANCE);
+ }
+
+ @Test
+ public void statsOptions_MetricOnly() throws Exception{
+ assertInstanceOf(statsProvider.getTimer("fooTimer", StatsOptions.METRICS_ONLY), TimerImpl.class);
+ assertInstanceOf(statsProvider.getCounterStats("fooCounter", StatsOptions.METRICS_ONLY), CounterImpl.class);
+ assertInstanceOf(statsProvider.getMeter("fooMeter", StatsOptions.METRICS_ONLY), MeterImpl.class);
+ assertInstanceOf(statsProvider.getHistogram("fooHisto", StatsOptions.METRICS_ONLY), HistogramImpl.class);
+ }
+
+ @Test
+ public void statsOptions_TimeSeriesOnly() throws Exception{
+ assertInstanceOf(statsProvider.getTimer("fooTimer", StatsOptions.TIME_SERIES_ONLY), SimpleStats.class);
+ }
+
+ @Test
+ public void statsOptions_Default() throws Exception{
+ assertInstanceOf(statsProvider.getTimer("fooTimer", StatsOptions.DEFAULT), CompositeStats.class);
}
@After
@@ -144,4 +153,10 @@ public class MetricStatisticsProviderTes
return server.queryMBeans(new ObjectName("org.apache.jackrabbit.oak:*"), q);
}
+ private void assertInstanceOf(Object o, Class<?> clazz){
+ if (!clazz.isInstance(o)){
+ fail(String.format("%s is not an instance of %s", o.getClass(), clazz));
+ }
+ }
+
}
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/stats/DefaultStatisticsProviderTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/stats/DefaultStatisticsProviderTest.java?rev=1721498&r1=1721497&r2=1721498&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/stats/DefaultStatisticsProviderTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/stats/DefaultStatisticsProviderTest.java Wed Dec 23 06:24:45 2015
@@ -19,59 +19,72 @@
package org.apache.jackrabbit.oak.stats;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import org.apache.jackrabbit.api.stats.RepositoryStatistics;
+import org.apache.jackrabbit.api.stats.TimeSeries;
import org.apache.jackrabbit.stats.RepositoryStatisticsImpl;
import org.junit.After;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
public class DefaultStatisticsProviderTest {
private ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
+ private DefaultStatisticsProvider statsProvider = new DefaultStatisticsProvider(executorService);
@Test
public void basicSetup() throws Exception {
- DefaultStatisticsProvider statsProvider = new DefaultStatisticsProvider(executorService);
assertNotNull(statsProvider.getStats());
- CounterStats stats = statsProvider.getCounterStats(RepositoryStatistics.Type.SESSION_COUNT.name());
+ CounterStats stats = statsProvider.getCounterStats(RepositoryStatistics.Type.SESSION_COUNT.name(), StatsOptions.DEFAULT);
stats.inc();
assertEquals(1, statsImpl(statsProvider).getCounter(RepositoryStatistics.Type.SESSION_COUNT).get());
}
@Test
public void meter() throws Exception {
- DefaultStatisticsProvider statsProvider = new DefaultStatisticsProvider(executorService);
- MeterStats meterStats = statsProvider.getMeter("test");
+ MeterStats meterStats = statsProvider.getMeter("test", StatsOptions.DEFAULT);
assertNotNull(meterStats);
meterStats.mark();
assertEquals(1, statsImpl(statsProvider).getCounter("test", true).get());
+ assertTrue(getRegisteredTimeSeries(statsProvider).contains("test"));
}
@Test
public void counter() throws Exception {
- DefaultStatisticsProvider statsProvider = new DefaultStatisticsProvider(executorService);
- CounterStats counterStats = statsProvider.getCounterStats("test");
+ CounterStats counterStats = statsProvider.getCounterStats("test", StatsOptions.DEFAULT);
assertNotNull(counterStats);
counterStats.inc();
assertEquals(1, statsImpl(statsProvider).getCounter("test", false).get());
+ assertTrue(getRegisteredTimeSeries(statsProvider).contains("test"));
}
@Test
public void timer() throws Exception {
- DefaultStatisticsProvider statsProvider = new DefaultStatisticsProvider(executorService);
- TimerStats timerStats = statsProvider.getTimer("test");
+ TimerStats timerStats = statsProvider.getTimer("test", StatsOptions.DEFAULT);
assertNotNull(timerStats);
timerStats.update(100, TimeUnit.SECONDS);
assertEquals(TimeUnit.SECONDS.toMillis(100), statsImpl(statsProvider).getCounter("test", false).get());
+ assertTrue(getRegisteredTimeSeries(statsProvider).contains("test"));
+ }
+
+ @Test
+ public void metricOnly() throws Exception{
+ MeterStats meterStats = statsProvider.getMeter("test", StatsOptions.METRICS_ONLY);
+ assertFalse(getRegisteredTimeSeries(statsProvider).contains("test"));
}
@After
@@ -82,4 +95,13 @@ public class DefaultStatisticsProviderTe
private RepositoryStatisticsImpl statsImpl(DefaultStatisticsProvider statsProvider) {
return (RepositoryStatisticsImpl) statsProvider.getStats();
}
+
+ private Set<String> getRegisteredTimeSeries(DefaultStatisticsProvider statsProvider){
+ RepositoryStatisticsImpl stats = (RepositoryStatisticsImpl) statsProvider.getStats();
+ Set<String> names = new HashSet<String>();
+ for (Map.Entry<String, TimeSeries> e : stats){
+ names.add(e.getKey());
+ }
+ return names;
+ }
}
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/stats/StatisticManagerTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/stats/StatisticManagerTest.java?rev=1721498&r1=1721497&r2=1721498&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/stats/StatisticManagerTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/stats/StatisticManagerTest.java Wed Dec 23 06:24:45 2015
@@ -19,11 +19,14 @@
package org.apache.jackrabbit.oak.stats;
+import java.util.Map;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
+import com.google.common.collect.Maps;
import org.apache.jackrabbit.api.jmx.QueryStatManagerMBean;
import org.apache.jackrabbit.api.stats.RepositoryStatistics;
+import org.apache.jackrabbit.api.stats.RepositoryStatistics.Type;
import org.apache.jackrabbit.oak.api.jmx.RepositoryStatsMBean;
import org.apache.jackrabbit.oak.spi.whiteboard.DefaultWhiteboard;
import org.apache.jackrabbit.oak.spi.whiteboard.Whiteboard;
@@ -31,6 +34,7 @@ import org.apache.jackrabbit.oak.spi.whi
import org.junit.After;
import org.junit.Test;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
public class StatisticManagerTest {
@@ -41,7 +45,7 @@ public class StatisticManagerTest {
Whiteboard wb = new DefaultWhiteboard();
StatisticManager mgr = new StatisticManager(wb, executorService);
- MeterStats meterStats = mgr.getMeter(RepositoryStatistics.Type.QUERY_COUNT);
+ MeterStats meterStats = mgr.getMeter(Type.QUERY_COUNT);
meterStats.mark(5);
assertNotNull(WhiteboardUtils.getServices(wb, RepositoryStatsMBean.class));
@@ -54,14 +58,62 @@ public class StatisticManagerTest {
wb.register(StatisticsProvider.class, StatisticsProvider.NOOP, null);
StatisticManager mgr = new StatisticManager(wb, executorService);
- MeterStats meterStats = mgr.getMeter(RepositoryStatistics.Type.QUERY_COUNT);
+ MeterStats meterStats = mgr.getMeter(Type.QUERY_COUNT);
meterStats.mark(5);
//TODO Not easy to do any asserts on call. Need to figure out a way
}
+ @Test
+ public void timeSeriesOnly() throws Exception{
+ Whiteboard wb = new DefaultWhiteboard();
+ final Map<String, StatsOptions> optionsPassed = Maps.newHashMap();
+ wb.register(StatisticsProvider.class, new DummyStatsProvider(){
+ @Override
+ public MeterStats getMeter(String name, StatsOptions options) {
+ optionsPassed.put(name, options);
+ return super.getMeter(name, options);
+ }
+ }, null);
+ StatisticManager mgr = new StatisticManager(wb, executorService);
+
+ mgr.getMeter(Type.SESSION_READ_COUNTER);
+ assertEquals(StatsOptions.TIME_SERIES_ONLY, optionsPassed.get(Type.SESSION_READ_COUNTER.name()));
+
+ mgr.getMeter(Type.SESSION_WRITE_COUNTER);
+ assertEquals(StatsOptions.DEFAULT, optionsPassed.get(Type.SESSION_WRITE_COUNTER.name()));
+ }
+
@After
public void cleanup() {
executorService.shutdownNow();
}
+
+ private class DummyStatsProvider implements StatisticsProvider {
+
+ @Override
+ public RepositoryStatistics getStats() {
+ return NoopRepositoryStatistics.INSTANCE;
+ }
+
+ @Override
+ public MeterStats getMeter(String name, StatsOptions options) {
+ return NoopStats.INSTANCE;
+ }
+
+ @Override
+ public CounterStats getCounterStats(String name, StatsOptions options) {
+ return NoopStats.INSTANCE;
+ }
+
+ @Override
+ public TimerStats getTimer(String name, StatsOptions options) {
+ return NoopStats.INSTANCE;
+ }
+
+ @Override
+ public HistogramStats getHistogram(String name, StatsOptions options) {
+ return NoopStats.INSTANCE;
+ }
+ }
}