Shutdown MetricsSystem when stopping MetricsService (#7958)

Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net>
pull/7960/head
Fabio Di Fabio 6 days ago committed by GitHub
parent 14dec7b775
commit 0cbcd919eb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 6
      metrics/core/src/main/java/org/hyperledger/besu/metrics/MetricsService.java
  2. 14
      metrics/core/src/main/java/org/hyperledger/besu/metrics/opentelemetry/MetricsOtelPushService.java
  3. 1
      metrics/core/src/main/java/org/hyperledger/besu/metrics/prometheus/MetricsHttpService.java
  4. 11
      metrics/core/src/main/java/org/hyperledger/besu/metrics/prometheus/MetricsPushGatewayService.java

@ -15,6 +15,7 @@
package org.hyperledger.besu.metrics; package org.hyperledger.besu.metrics;
import org.hyperledger.besu.metrics.opentelemetry.MetricsOtelPushService; import org.hyperledger.besu.metrics.opentelemetry.MetricsOtelPushService;
import org.hyperledger.besu.metrics.opentelemetry.OpenTelemetrySystem;
import org.hyperledger.besu.metrics.prometheus.MetricsConfiguration; import org.hyperledger.besu.metrics.prometheus.MetricsConfiguration;
import org.hyperledger.besu.metrics.prometheus.MetricsHttpService; import org.hyperledger.besu.metrics.prometheus.MetricsHttpService;
import org.hyperledger.besu.metrics.prometheus.MetricsPushGatewayService; import org.hyperledger.besu.metrics.prometheus.MetricsPushGatewayService;
@ -48,13 +49,14 @@ public interface MetricsService {
return Optional.of( return Optional.of(
new MetricsHttpService(configuration, (PrometheusMetricsSystem) metricsSystem)); new MetricsHttpService(configuration, (PrometheusMetricsSystem) metricsSystem));
} else if (configuration.isPushEnabled()) { } else if (configuration.isPushEnabled()) {
return Optional.of(new MetricsPushGatewayService(configuration, metricsSystem)); return Optional.of(
new MetricsPushGatewayService(configuration, (PrometheusMetricsSystem) metricsSystem));
} else { } else {
return Optional.empty(); return Optional.empty();
} }
} else if (configuration.getProtocol() == MetricsProtocol.OPENTELEMETRY) { } else if (configuration.getProtocol() == MetricsProtocol.OPENTELEMETRY) {
if (configuration.isEnabled()) { if (configuration.isEnabled()) {
return Optional.of(new MetricsOtelPushService()); return Optional.of(new MetricsOtelPushService((OpenTelemetrySystem) metricsSystem));
} else { } else {
return Optional.empty(); return Optional.empty();
} }

@ -26,9 +26,16 @@ import org.slf4j.LoggerFactory;
public class MetricsOtelPushService implements MetricsService { public class MetricsOtelPushService implements MetricsService {
private static final Logger LOG = LoggerFactory.getLogger(MetricsOtelPushService.class); private static final Logger LOG = LoggerFactory.getLogger(MetricsOtelPushService.class);
private final OpenTelemetrySystem metricsSystem;
/** Instantiates a new Metrics open telemetry push service. */
public MetricsOtelPushService() {} /**
* Instantiates a new Metrics open telemetry push service.
*
* @param metricsSystem The OpenTelemetry metrics system
*/
public MetricsOtelPushService(final OpenTelemetrySystem metricsSystem) {
this.metricsSystem = metricsSystem;
}
@Override @Override
public CompletableFuture<?> start() { public CompletableFuture<?> start() {
@ -39,6 +46,7 @@ public class MetricsOtelPushService implements MetricsService {
@Override @Override
public CompletableFuture<?> stop() { public CompletableFuture<?> stop() {
metricsSystem.shutdown();
return CompletableFuture.completedFuture(null); return CompletableFuture.completedFuture(null);
} }

@ -121,6 +121,7 @@ public class MetricsHttpService implements MetricsService {
@Override @Override
public CompletableFuture<?> stop() { public CompletableFuture<?> stop() {
metricsSystem.shutdown();
if (httpServer == null) { if (httpServer == null) {
return CompletableFuture.completedFuture(null); return CompletableFuture.completedFuture(null);
} }

@ -17,7 +17,6 @@ package org.hyperledger.besu.metrics.prometheus;
import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkArgument;
import org.hyperledger.besu.metrics.MetricsService; import org.hyperledger.besu.metrics.MetricsService;
import org.hyperledger.besu.plugin.services.MetricsSystem;
import java.io.IOException; import java.io.IOException;
import java.util.Optional; import java.util.Optional;
@ -37,7 +36,7 @@ public class MetricsPushGatewayService implements MetricsService {
private PushGateway pushGateway; private PushGateway pushGateway;
private ScheduledExecutorService scheduledExecutorService; private ScheduledExecutorService scheduledExecutorService;
private final MetricsConfiguration config; private final MetricsConfiguration config;
private final MetricsSystem metricsSystem; private final PrometheusMetricsSystem metricsSystem;
/** /**
* Instantiates a new Metrics push gateway service. * Instantiates a new Metrics push gateway service.
@ -46,7 +45,7 @@ public class MetricsPushGatewayService implements MetricsService {
* @param metricsSystem the metrics system * @param metricsSystem the metrics system
*/ */
public MetricsPushGatewayService( public MetricsPushGatewayService(
final MetricsConfiguration configuration, final MetricsSystem metricsSystem) { final MetricsConfiguration configuration, final PrometheusMetricsSystem metricsSystem) {
this.metricsSystem = metricsSystem; this.metricsSystem = metricsSystem;
validateConfig(configuration); validateConfig(configuration);
config = configuration; config = configuration;
@ -59,9 +58,6 @@ public class MetricsPushGatewayService implements MetricsService {
checkArgument( checkArgument(
!(config.isEnabled() && config.isPushEnabled()), !(config.isEnabled() && config.isPushEnabled()),
"Metrics Push Gateway Service cannot run concurrent with the normal metrics."); "Metrics Push Gateway Service cannot run concurrent with the normal metrics.");
checkArgument(
metricsSystem instanceof PrometheusMetricsSystem,
"Push Gateway requires a Prometheus Metrics System.");
} }
@Override @Override
@ -73,7 +69,7 @@ public class MetricsPushGatewayService implements MetricsService {
pushGateway = pushGateway =
PushGateway.builder() PushGateway.builder()
.registry(((PrometheusMetricsSystem) metricsSystem).getRegistry()) .registry(metricsSystem.getRegistry())
.address(config.getPushHost() + ":" + config.getPushPort()) .address(config.getPushHost() + ":" + config.getPushPort())
.job(config.getPrometheusJob()) .job(config.getPrometheusJob())
.build(); .build();
@ -90,6 +86,7 @@ public class MetricsPushGatewayService implements MetricsService {
@Override @Override
public CompletableFuture<?> stop() { public CompletableFuture<?> stop() {
metricsSystem.shutdown();
final CompletableFuture<?> resultFuture = new CompletableFuture<>(); final CompletableFuture<?> resultFuture = new CompletableFuture<>();
try { try {
// Calling shutdown now cancels the pending push, which is desirable. // Calling shutdown now cancels the pending push, which is desirable.

Loading…
Cancel
Save