diff --git a/enterprise/metrics/src/main/java/org/neo4j/metrics/source/Neo4jMetricsBuilder.java b/enterprise/metrics/src/main/java/org/neo4j/metrics/source/Neo4jMetricsBuilder.java index d01882b201bd9..629701606acef 100644 --- a/enterprise/metrics/src/main/java/org/neo4j/metrics/source/Neo4jMetricsBuilder.java +++ b/enterprise/metrics/src/main/java/org/neo4j/metrics/source/Neo4jMetricsBuilder.java @@ -39,6 +39,7 @@ import org.neo4j.kernel.impl.transaction.TransactionCounters; import org.neo4j.kernel.impl.transaction.log.TransactionIdStore; import org.neo4j.kernel.impl.transaction.log.checkpoint.CheckPointerMonitor; +import org.neo4j.kernel.impl.transaction.state.DataSourceManager; import org.neo4j.kernel.lifecycle.LifeSupport; import org.neo4j.kernel.monitoring.Monitors; import org.neo4j.metrics.MetricsSettings; @@ -79,17 +80,11 @@ public interface Dependencies PageCacheCounters pageCacheCounters(); - CheckPointerMonitor checkPointerMonitor(); - - LogRotationMonitor logRotationMonitor(); - - StoreEntityCounters entityCountStats(); - Supplier clusterMembers(); Supplier raft(); - Supplier transactionIdStore(); + DataSourceManager dataSourceManager(); } public Neo4jMetricsBuilder( MetricRegistry registry, EventReporter reporter, Config config, LogService logService, @@ -109,7 +104,7 @@ public boolean build() boolean result = false; if ( config.get( MetricsSettings.neoTxEnabled ) ) { - life.add( new TransactionMetrics( registry, dependencies.transactionIdStore(), + life.add( new TransactionMetrics( registry, databaseDependencySupplier( TransactionIdStore.class ), dependencies.transactionCounters() ) ); result = true; } @@ -123,14 +118,14 @@ public boolean build() if ( config.get( MetricsSettings.neoCheckPointingEnabled ) ) { life.add( new CheckPointingMetrics( reporter, registry, dependencies.monitors(), - dependencies.checkPointerMonitor() ) ); + databaseDependencySupplier( CheckPointerMonitor.class ) ) ); result = true; } if ( config.get( MetricsSettings.neoLogRotationEnabled ) ) { life.add( new LogRotationMetrics( reporter, registry, dependencies.monitors(), - dependencies.logRotationMonitor() ) ); + databaseDependencySupplier( LogRotationMonitor.class ) ) ); result = true; } @@ -139,7 +134,7 @@ public boolean build() if ( kernelContext.databaseInfo().edition != Edition.community && kernelContext.databaseInfo().edition != Edition.unknown ) { - life.add( new EntityCountMetrics( registry, dependencies.entityCountStats() ) ); + life.add( new EntityCountMetrics( registry, databaseDependencySupplier( StoreEntityCounters.class ) ) ); result = true; } } @@ -220,4 +215,9 @@ else if ( mode == OperationalMode.read_replica ) return result; } + + private Supplier databaseDependencySupplier( Class clazz ) + { + return () -> dependencies.dataSourceManager().getDataSource().getDependencyResolver().resolveDependency( clazz ); + } } diff --git a/enterprise/metrics/src/main/java/org/neo4j/metrics/source/db/CheckPointingMetrics.java b/enterprise/metrics/src/main/java/org/neo4j/metrics/source/db/CheckPointingMetrics.java index 445e3ac190453..65b3b4b9833f1 100644 --- a/enterprise/metrics/src/main/java/org/neo4j/metrics/source/db/CheckPointingMetrics.java +++ b/enterprise/metrics/src/main/java/org/neo4j/metrics/source/db/CheckPointingMetrics.java @@ -26,6 +26,7 @@ import com.codahale.metrics.MetricRegistry; import java.util.TreeMap; +import java.util.function.Supplier; import org.neo4j.kernel.impl.annotations.Documented; import org.neo4j.kernel.impl.transaction.log.checkpoint.CheckPointerMonitor; @@ -51,15 +52,15 @@ public class CheckPointingMetrics extends LifecycleAdapter private final MetricRegistry registry; private final Monitors monitors; - private final CheckPointerMonitor checkPointerMonitor; + private final Supplier checkPointerMonitorSupplier; private final DefaultCheckPointerTracer.Monitor listener; public CheckPointingMetrics( EventReporter reporter, MetricRegistry registry, - Monitors monitors, CheckPointerMonitor checkPointerMonitor ) + Monitors monitors, Supplier checkPointerMonitorSupplier ) { this.registry = registry; this.monitors = monitors; - this.checkPointerMonitor = checkPointerMonitor; + this.checkPointerMonitorSupplier = checkPointerMonitorSupplier; this.listener = durationMillis -> { TreeMap gauges = new TreeMap<>(); @@ -73,6 +74,7 @@ public void start() { monitors.addMonitorListener( listener ); + CheckPointerMonitor checkPointerMonitor = checkPointerMonitorSupplier.get(); registry.register( CHECK_POINT_EVENTS, (Gauge) checkPointerMonitor::numberOfCheckPointEvents ); registry.register( CHECK_POINT_TOTAL_TIME, (Gauge) checkPointerMonitor::checkPointAccumulatedTotalTimeMillis ); diff --git a/enterprise/metrics/src/main/java/org/neo4j/metrics/source/db/EntityCountMetrics.java b/enterprise/metrics/src/main/java/org/neo4j/metrics/source/db/EntityCountMetrics.java index bce2590eda540..ba1e5576c25c2 100644 --- a/enterprise/metrics/src/main/java/org/neo4j/metrics/source/db/EntityCountMetrics.java +++ b/enterprise/metrics/src/main/java/org/neo4j/metrics/source/db/EntityCountMetrics.java @@ -25,6 +25,8 @@ import com.codahale.metrics.Gauge; import com.codahale.metrics.MetricRegistry; +import java.util.function.Supplier; + import org.neo4j.kernel.impl.annotations.Documented; import org.neo4j.kernel.impl.store.stats.StoreEntityCounters; import org.neo4j.kernel.lifecycle.LifecycleAdapter; @@ -46,21 +48,22 @@ public class EntityCountMetrics extends LifecycleAdapter public static final String COUNTS_NODE = name( COUNTS_PREFIX, "node" ); private final MetricRegistry registry; - private final StoreEntityCounters storeEntityCounters; + private final Supplier storeEntityCountersSupplier; - public EntityCountMetrics( MetricRegistry registry, StoreEntityCounters storeEntityCounters ) + public EntityCountMetrics( MetricRegistry registry, Supplier storeEntityCountersSupplier ) { this.registry = registry; - this.storeEntityCounters = storeEntityCounters; + this.storeEntityCountersSupplier = storeEntityCountersSupplier; } @Override public void start() { - registry.register( COUNTS_NODE, (Gauge) storeEntityCounters::nodes ); - registry.register( COUNTS_RELATIONSHIP, (Gauge) storeEntityCounters::relationships ); - registry.register( COUNTS_PROPERTY, (Gauge) storeEntityCounters::properties ); - registry.register( COUNTS_RELATIONSHIP_TYPE, (Gauge) storeEntityCounters::relationshipTypes ); + StoreEntityCounters counters = storeEntityCountersSupplier.get(); + registry.register( COUNTS_NODE, (Gauge) counters::nodes ); + registry.register( COUNTS_RELATIONSHIP, (Gauge) counters::relationships ); + registry.register( COUNTS_PROPERTY, (Gauge) counters::properties ); + registry.register( COUNTS_RELATIONSHIP_TYPE, (Gauge) counters::relationshipTypes ); } @Override diff --git a/enterprise/metrics/src/main/java/org/neo4j/metrics/source/db/LogRotationMetrics.java b/enterprise/metrics/src/main/java/org/neo4j/metrics/source/db/LogRotationMetrics.java index 88c960115516a..a5d69228b00cc 100644 --- a/enterprise/metrics/src/main/java/org/neo4j/metrics/source/db/LogRotationMetrics.java +++ b/enterprise/metrics/src/main/java/org/neo4j/metrics/source/db/LogRotationMetrics.java @@ -25,9 +25,9 @@ import com.codahale.metrics.Gauge; import com.codahale.metrics.MetricRegistry; -import java.io.IOException; import java.util.SortedMap; import java.util.TreeMap; +import java.util.function.Supplier; import org.neo4j.kernel.impl.annotations.Documented; import org.neo4j.kernel.impl.api.DefaultTransactionTracer; @@ -53,15 +53,15 @@ public class LogRotationMetrics extends LifecycleAdapter private final MetricRegistry registry; private final Monitors monitors; - private final LogRotationMonitor logRotationMonitor; + private final Supplier logRotationMonitorSupplier; private final DefaultTransactionTracer.Monitor listener; public LogRotationMetrics( EventReporter reporter, MetricRegistry registry, - Monitors monitors, LogRotationMonitor logRotationMonitor ) + Monitors monitors, Supplier logRotationMonitorSupplier ) { this.registry = registry; this.monitors = monitors; - this.logRotationMonitor = logRotationMonitor; + this.logRotationMonitorSupplier = logRotationMonitorSupplier; this.listener = durationMillis -> { final SortedMap gauges = new TreeMap<>(); @@ -75,9 +75,10 @@ public void start() { monitors.addMonitorListener( listener ); - registry.register( LOG_ROTATION_EVENTS, (Gauge) logRotationMonitor::numberOfLogRotationEvents ); + LogRotationMonitor monitor = this.logRotationMonitorSupplier.get(); + registry.register( LOG_ROTATION_EVENTS, (Gauge) monitor::numberOfLogRotationEvents ); registry.register( LOG_ROTATION_TOTAL_TIME, - (Gauge) logRotationMonitor::logRotationAccumulatedTotalTimeMillis ); + (Gauge) monitor::logRotationAccumulatedTotalTimeMillis ); } @Override