Author: chetanm
Date: Wed Nov 25 05:38:19 2015
New Revision: 1716304
URL: http://svn.apache.org/viewvc?rev=1716304&view=rev
Log:
OAK-3654 - Integrate with Metrics for various stats collection
Use Fast clock for Meters and thus enable counters for read and write
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/MetricStatisticsProvider.java
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=1716304&r1=1716303&r2=1716304&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 Nov 25 05:38:19 2015
@@ -24,6 +24,7 @@ import java.util.Hashtable;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
import javax.management.MBeanServer;
import javax.management.MalformedObjectNameException;
@@ -40,6 +41,7 @@ import com.google.common.collect.Maps;
import org.apache.jackrabbit.api.stats.RepositoryStatistics;
import org.apache.jackrabbit.api.stats.RepositoryStatistics.Type;
import org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils;
+import org.apache.jackrabbit.oak.stats.Clock;
import org.apache.jackrabbit.oak.stats.CounterStats;
import org.apache.jackrabbit.oak.stats.MeterStats;
import org.apache.jackrabbit.oak.stats.SimpleStats;
@@ -60,17 +62,19 @@ public class MetricStatisticsProvider im
*/
private static final Set<String> NOOPS_TYPES = ImmutableSet.of(
Type.SESSION_READ_DURATION.name(),
- Type.SESSION_READ_COUNTER.name(),
- Type.SESSION_WRITE_DURATION.name(),
- Type.SESSION_WRITE_COUNTER.name()
+ Type.SESSION_WRITE_DURATION.name()
);
private final Map<String, Stats> statsRegistry = Maps.newHashMap();
private final MetricRegistry registry;
private final JmxReporter reporter;
private final RepositoryStatisticsImpl repoStats;
+ private final Clock.Fast clock;
+ private final com.codahale.metrics.Clock metricsClock;
public MetricStatisticsProvider(MBeanServer server,
ScheduledExecutorService executor) {
+ clock = new Clock.Fast(executor);
+ metricsClock = new OakMetricClock(clock);
registry = new MetricRegistry();
repoStats = new RepositoryStatisticsImpl(executor);
reporter = JmxReporter.forRegistry(registry)
@@ -88,6 +92,7 @@ public class MetricStatisticsProvider im
}
public void close() {
+ clock.close();
if (reporter != null) {
reporter.close();
}
@@ -184,7 +189,9 @@ public class MetricStatisticsProvider im
StatsBuilder<MeterStats> METERS = new StatsBuilder<MeterStats>() {
@Override
public CompositeStats newComposite(SimpleStats delegate,
MetricStatisticsProvider provider,String name) {
- return new CompositeStats(delegate,
provider.registry.meter(name));
+ Meter meter = new Meter(provider.metricsClock);
+ provider.registry.register(name, meter);
+ return new CompositeStats(delegate, meter);
}
@Override
@@ -243,4 +250,17 @@ public class MetricStatisticsProvider im
}
}
+ private static class OakMetricClock extends com.codahale.metrics.Clock {
+ private final Clock clock;
+
+ public OakMetricClock(Clock clock) {
+ this.clock = clock;
+ }
+
+ @Override
+ public long getTick() {
+ return TimeUnit.NANOSECONDS.convert(clock.getTime(),
TimeUnit.MILLISECONDS);
+ }
+ }
+
}