Search in sources :

Example 1 with MetricCategory

use of org.hyperledger.besu.plugin.services.metrics.MetricCategory in project teku by ConsenSys.

the class MetricCategoryConverter method convert.

@Override
public MetricCategory convert(final String value) {
    checkNotNull(value, "Value to convert must not be null");
    final MetricCategory category = metricCategories.get(value.toUpperCase(Locale.ROOT));
    if (category == null) {
        throw new IllegalArgumentException("Unknown category: " + value);
    }
    return category;
}
Also used : MetricCategory(org.hyperledger.besu.plugin.services.metrics.MetricCategory)

Example 2 with MetricCategory

use of org.hyperledger.besu.plugin.services.metrics.MetricCategory in project besu by hyperledger.

the class ProcessBesuNodeRunner method startNode.

@Override
public void startNode(final BesuNode node) {
    final Path dataDir = node.homeDirectory();
    final List<String> params = new ArrayList<>();
    params.add("build/install/besu/bin/besu");
    params.add("--data-path");
    params.add(dataDir.toAbsolutePath().toString());
    if (node.isDevMode()) {
        params.add("--network");
        params.add("DEV");
    } else if (node.getNetwork() != null) {
        params.add("--network");
        params.add(node.getNetwork().name());
    }
    params.add("--sync-mode");
    params.add("FULL");
    params.add("--discovery-enabled");
    params.add(Boolean.toString(node.isDiscoveryEnabled()));
    params.add("--p2p-host");
    params.add(node.p2pListenHost());
    params.add("--p2p-port");
    params.add(node.getP2pPort());
    if (node.getMiningParameters().isMiningEnabled()) {
        params.add("--miner-enabled");
        params.add("--miner-coinbase");
        params.add(node.getMiningParameters().getCoinbase().get().toString());
        params.add("--miner-stratum-port");
        params.add(Integer.toString(node.getMiningParameters().getStratumPort()));
        params.add("--miner-stratum-host");
        params.add(node.getMiningParameters().getStratumNetworkInterface());
        params.add("--min-gas-price");
        params.add(Integer.toString(node.getMiningParameters().getMinTransactionGasPrice().intValue()));
        params.add("--Xminer-remote-sealers-limit");
        params.add(Integer.toString(node.getMiningParameters().getRemoteSealersLimit()));
        params.add("--Xminer-remote-sealers-hashrate-ttl");
        params.add(Long.toString(node.getMiningParameters().getRemoteSealersTimeToLive()));
    }
    if (node.getMiningParameters().isStratumMiningEnabled()) {
        params.add("--miner-stratum-enabled");
    }
    if (node.getPrivacyParameters().isEnabled()) {
        params.add("--privacy-enabled");
        params.add("--privacy-url");
        params.add(node.getPrivacyParameters().getEnclaveUri().toString());
        if (node.getPrivacyParameters().isMultiTenancyEnabled()) {
            params.add("--privacy-multi-tenancy-enabled");
        } else {
            params.add("--privacy-public-key-file");
            params.add(node.getPrivacyParameters().getEnclavePublicKeyFile().getAbsolutePath());
        }
        if (!node.getExtraCLIOptions().contains("--plugin-privacy-service-signing-enabled=true")) {
            params.add("--privacy-marker-transaction-signing-key-file");
            params.add(node.homeDirectory().resolve("key").toString());
        }
        if (node.getPrivacyParameters().isFlexiblePrivacyGroupsEnabled()) {
            params.add("--privacy-flexible-groups-enabled");
        }
        if (node.getPrivacyParameters().isPrivacyPluginEnabled()) {
            params.add("--Xprivacy-plugin-enabled");
        }
    }
    if (!node.getBootnodes().isEmpty()) {
        params.add("--bootnodes");
        params.add(node.getBootnodes().stream().map(URI::toString).collect(Collectors.joining(",")));
    }
    if (node.hasStaticNodes()) {
        createStaticNodes(node);
    }
    if (node.isDnsEnabled()) {
        params.add("--Xdns-enabled");
        params.add("true");
        params.add("--Xdns-update-enabled");
        params.add("true");
    }
    if (node.isJsonRpcEnabled()) {
        params.add("--rpc-http-enabled");
        params.add("--rpc-http-host");
        params.add(node.jsonRpcListenHost().get());
        params.add("--rpc-http-port");
        params.add(node.jsonRpcListenPort().map(Object::toString).get());
        params.add("--rpc-http-api");
        params.add(apiList(node.jsonRpcConfiguration().getRpcApis()));
        if (!node.jsonRpcConfiguration().getNoAuthRpcApis().isEmpty()) {
            params.add("--rpc-http-api-methods-no-auth");
            params.add(apiList(node.jsonRpcConfiguration().getNoAuthRpcApis()));
        }
        if (node.jsonRpcConfiguration().isAuthenticationEnabled()) {
            params.add("--rpc-http-authentication-enabled");
        }
        if (node.jsonRpcConfiguration().getAuthenticationCredentialsFile() != null) {
            params.add("--rpc-http-authentication-credentials-file");
            params.add(node.jsonRpcConfiguration().getAuthenticationCredentialsFile());
        }
        if (node.jsonRpcConfiguration().getAuthenticationPublicKeyFile() != null) {
            params.add("--rpc-http-authentication-jwt-public-key-file");
            params.add(node.jsonRpcConfiguration().getAuthenticationPublicKeyFile().getAbsolutePath());
        }
        if (node.jsonRpcConfiguration().getAuthenticationAlgorithm() != null) {
            params.add("--rpc-http-authentication-jwt-algorithm");
            params.add(node.jsonRpcConfiguration().getAuthenticationAlgorithm().toString());
        }
    }
    if (node.isEngineRpcEnabled()) {
        params.add("--engine-rpc-port");
        params.add(node.jsonEngineListenPort().get().toString());
        if (node.isEngineAuthDisabled()) {
            params.add("--engine-jwt-disabled");
        }
    }
    if (node.wsRpcEnabled()) {
        params.add("--rpc-ws-enabled");
        params.add("--rpc-ws-host");
        params.add(node.wsRpcListenHost().get());
        params.add("--rpc-ws-port");
        params.add(node.wsRpcListenPort().map(Object::toString).get());
        params.add("--rpc-ws-api");
        params.add(apiList(node.webSocketConfiguration().getRpcApis()));
        if (!node.webSocketConfiguration().getRpcApisNoAuth().isEmpty()) {
            params.add("--rpc-ws-api-methods-no-auth");
            params.add(apiList(node.webSocketConfiguration().getRpcApisNoAuth()));
        }
        if (node.webSocketConfiguration().isAuthenticationEnabled()) {
            params.add("--rpc-ws-authentication-enabled");
        }
        if (node.webSocketConfiguration().getAuthenticationCredentialsFile() != null) {
            params.add("--rpc-ws-authentication-credentials-file");
            params.add(node.webSocketConfiguration().getAuthenticationCredentialsFile());
        }
        if (node.webSocketConfiguration().getAuthenticationPublicKeyFile() != null) {
            params.add("--rpc-ws-authentication-jwt-public-key-file");
            params.add(node.webSocketConfiguration().getAuthenticationPublicKeyFile().getAbsolutePath());
        }
        if (node.webSocketConfiguration().getAuthenticationAlgorithm() != null) {
            params.add("--rpc-ws-authentication-jwt-algorithm");
            params.add(node.webSocketConfiguration().getAuthenticationAlgorithm().toString());
        }
    }
    if (node.isJsonRpcIpcEnabled()) {
        final JsonRpcIpcConfiguration ipcConfiguration = node.jsonRpcIpcConfiguration();
        params.add("--Xrpc-ipc-enabled");
        params.add("--Xrpc-ipc-path");
        params.add(ipcConfiguration.getPath().toString());
        params.add("--Xrpc-ipc-apis");
        params.add(String.join(",", ipcConfiguration.getEnabledApis()));
    }
    if (node.isMetricsEnabled()) {
        final MetricsConfiguration metricsConfiguration = node.getMetricsConfiguration();
        params.add("--metrics-enabled");
        params.add("--metrics-host");
        params.add(metricsConfiguration.getHost());
        params.add("--metrics-port");
        params.add(Integer.toString(metricsConfiguration.getPort()));
        for (final MetricCategory category : metricsConfiguration.getMetricCategories()) {
            params.add("--metrics-category");
            params.add(((Enum<?>) category).name());
        }
        if (node.isMetricsEnabled() || metricsConfiguration.isPushEnabled()) {
            params.add("--metrics-protocol");
            params.add(metricsConfiguration.getProtocol().name());
        }
        if (metricsConfiguration.isPushEnabled()) {
            params.add("--metrics-push-enabled");
            params.add("--metrics-push-host");
            params.add(metricsConfiguration.getPushHost());
            params.add("--metrics-push-port");
            params.add(Integer.toString(metricsConfiguration.getPushPort()));
            params.add("--metrics-push-interval");
            params.add(Integer.toString(metricsConfiguration.getPushInterval()));
            params.add("--metrics-push-prometheus-job");
            params.add(metricsConfiguration.getPrometheusJob());
        }
    }
    node.getGenesisConfig().ifPresent(genesis -> {
        final Path genesisFile = createGenesisFile(node, genesis);
        params.add("--genesis-file");
        params.add(genesisFile.toAbsolutePath().toString());
    });
    if (!node.isP2pEnabled()) {
        params.add("--p2p-enabled");
        params.add("false");
    } else {
        final List<String> networkConfigParams = NetworkingOptions.fromConfig(node.getNetworkingConfiguration()).getCLIOptions();
        params.addAll(networkConfigParams);
        if (node.getTLSConfiguration().isPresent()) {
            final TLSConfiguration config = node.getTLSConfiguration().get();
            params.add("--Xp2p-tls-enabled");
            params.add("--Xp2p-tls-keystore-type");
            params.add(config.getKeyStoreType());
            params.add("--Xp2p-tls-keystore-file");
            params.add(config.getKeyStorePath().toAbsolutePath().toString());
            params.add("--Xp2p-tls-keystore-password-file");
            params.add(config.getKeyStorePasswordPath().toAbsolutePath().toString());
            params.add("--Xp2p-tls-crl-file");
            params.add(config.getCrlPath().toAbsolutePath().toString());
            if (null != config.getTrustStoreType()) {
                params.add("--Xp2p-tls-truststore-type");
                params.add(config.getTrustStoreType());
                params.add("--Xp2p-tls-truststore-file");
                params.add(config.getTrustStorePath().toAbsolutePath().toString());
                params.add("--Xp2p-tls-truststore-password-file");
                params.add(config.getTrustStorePasswordPath().toAbsolutePath().toString());
            }
        }
    }
    if (node.isRevertReasonEnabled()) {
        params.add("--revert-reason-enabled");
    }
    params.add("--Xsecp256k1-native-enabled=" + node.isSecp256k1Native());
    params.add("--Xaltbn128-native-enabled=" + node.isAltbn128Native());
    node.getPermissioningConfiguration().flatMap(PermissioningConfiguration::getLocalConfig).ifPresent(permissioningConfiguration -> {
        if (permissioningConfiguration.isNodeAllowlistEnabled()) {
            params.add("--permissions-nodes-config-file-enabled");
        }
        if (permissioningConfiguration.getNodePermissioningConfigFilePath() != null) {
            params.add("--permissions-nodes-config-file");
            params.add(permissioningConfiguration.getNodePermissioningConfigFilePath());
        }
        if (permissioningConfiguration.isAccountAllowlistEnabled()) {
            params.add("--permissions-accounts-config-file-enabled");
        }
        if (permissioningConfiguration.getAccountPermissioningConfigFilePath() != null) {
            params.add("--permissions-accounts-config-file");
            params.add(permissioningConfiguration.getAccountPermissioningConfigFilePath());
        }
    });
    node.getPermissioningConfiguration().flatMap(PermissioningConfiguration::getSmartContractConfig).ifPresent(permissioningConfiguration -> {
        if (permissioningConfiguration.isSmartContractNodeAllowlistEnabled()) {
            params.add("--permissions-nodes-contract-enabled");
        }
        if (permissioningConfiguration.getNodeSmartContractAddress() != null) {
            params.add("--permissions-nodes-contract-address");
            params.add(permissioningConfiguration.getNodeSmartContractAddress().toString());
        }
        if (permissioningConfiguration.isSmartContractAccountAllowlistEnabled()) {
            params.add("--permissions-accounts-contract-enabled");
        }
        if (permissioningConfiguration.getAccountSmartContractAddress() != null) {
            params.add("--permissions-accounts-contract-address");
            params.add(permissioningConfiguration.getAccountSmartContractAddress().toString());
        }
        params.add("--permissions-nodes-contract-version");
        params.add(String.valueOf(permissioningConfiguration.getNodeSmartContractInterfaceVersion()));
    });
    node.getPkiKeyStoreConfiguration().ifPresent(pkiConfig -> {
        params.add("--Xpki-block-creation-enabled");
        params.add("--Xpki-block-creation-keystore-certificate-alias");
        params.add(pkiConfig.getCertificateAlias());
        params.add("--Xpki-block-creation-keystore-type");
        params.add(pkiConfig.getKeyStoreType());
        params.add("--Xpki-block-creation-keystore-file");
        params.add(pkiConfig.getKeyStorePath().toAbsolutePath().toString());
        params.add("--Xpki-block-creation-keystore-password-file");
        params.add(pkiConfig.getKeyStorePasswordPath().toAbsolutePath().toString());
        params.add("--Xpki-block-creation-truststore-type");
        params.add(pkiConfig.getTrustStoreType());
        params.add("--Xpki-block-creation-truststore-file");
        params.add(pkiConfig.getTrustStorePath().toAbsolutePath().toString());
        params.add("--Xpki-block-creation-truststore-password-file");
        params.add(pkiConfig.getTrustStorePasswordPath().toAbsolutePath().toString());
    });
    params.addAll(node.getExtraCLIOptions());
    params.add("--key-value-storage");
    params.add("rocksdb");
    params.add("--auto-log-bloom-caching-enabled");
    params.add("false");
    params.add("--strict-tx-replay-protection-enabled");
    params.add(Boolean.toString(node.isStrictTxReplayProtectionEnabled()));
    final String level = System.getProperty("root.log.level");
    if (level != null) {
        params.add("--logging=" + level);
    }
    params.addAll(node.getRunCommand());
    LOG.info("Creating besu process with params {}", params);
    final ProcessBuilder processBuilder = new ProcessBuilder(params).directory(new File(System.getProperty("user.dir")).getParentFile().getParentFile()).redirectErrorStream(true).redirectInput(Redirect.INHERIT);
    if (!node.getPlugins().isEmpty()) {
        processBuilder.environment().put("BESU_OPTS", "-Dbesu.plugins.dir=" + dataDir.resolve("plugins").toAbsolutePath().toString());
    }
    // Use non-blocking randomness for acceptance tests
    processBuilder.environment().put("JAVA_OPTS", "-Djava.security.properties=" + "acceptance-tests/tests/build/resources/test/acceptanceTesting.security");
    try {
        checkState(isNotAliveOrphan(node.getName()), "A live process with name: %s, already exists. Cannot create another with the same name as it would orphan the first", node.getName());
        final Process process = processBuilder.start();
        process.onExit().thenRun(() -> node.setExitCode(process.exitValue()));
        outputProcessorExecutor.execute(() -> printOutput(node, process));
        besuProcesses.put(node.getName(), process);
    } catch (final IOException e) {
        LOG.error("Error starting BesuNode process", e);
    }
    if (node.getRunCommand().isEmpty()) {
        waitForFile(dataDir, "besu.ports");
        waitForFile(dataDir, "besu.networks");
    }
    MDC.remove("node");
}
Also used : Path(java.nio.file.Path) TLSConfiguration(org.hyperledger.besu.ethereum.p2p.rlpx.connections.netty.TLSConfiguration) ArrayList(java.util.ArrayList) IOException(java.io.IOException) URI(java.net.URI) MetricsConfiguration(org.hyperledger.besu.metrics.prometheus.MetricsConfiguration) JsonRpcIpcConfiguration(org.hyperledger.besu.ethereum.api.jsonrpc.ipc.JsonRpcIpcConfiguration) File(java.io.File) MetricCategory(org.hyperledger.besu.plugin.services.metrics.MetricCategory)

Example 3 with MetricCategory

use of org.hyperledger.besu.plugin.services.metrics.MetricCategory in project besu by hyperledger.

the class AbstractEthTaskTest method shouldHaveSpecificMetricsLabels.

@Test
public void shouldHaveSpecificMetricsLabels() {
    // seed with a failing value so that a no-op also trips the failure.
    final String[] lastLabelNames = { "AbstractEthTask" };
    final MetricsSystem instrumentedLabeler = new NoOpMetricsSystem() {

        @Override
        public LabelledMetric<OperationTimer> createLabelledTimer(final MetricCategory category, final String name, final String help, final String... labelNames) {
            return names -> {
                lastLabelNames[0] = names[0];
                return null;
            };
        }
    };
    new AbstractEthTask<>(instrumentedLabeler) {

        @Override
        protected void executeTask() {
        // no-op
        }
    };
    assertThat(lastLabelNames[0]).isNotEqualTo("AbstractEthTask");
}
Also used : MockExecutorService(org.hyperledger.besu.testutil.MockExecutorService) Arrays(java.util.Arrays) Mock(org.mockito.Mock) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) RunWith(org.junit.runner.RunWith) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) CompletableFuture(java.util.concurrent.CompletableFuture) Test(org.junit.Test) Mockito.when(org.mockito.Mockito.when) NoOpMetricsSystem(org.hyperledger.besu.metrics.noop.NoOpMetricsSystem) LabelledMetric(org.hyperledger.besu.plugin.services.metrics.LabelledMetric) Mockito.verify(org.mockito.Mockito.verify) List(java.util.List) Lists(com.google.common.collect.Lists) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) MetricsSystem(org.hyperledger.besu.plugin.services.MetricsSystem) MetricCategory(org.hyperledger.besu.plugin.services.metrics.MetricCategory) MockitoJUnitRunner(org.mockito.junit.MockitoJUnitRunner) OperationTimer(org.hyperledger.besu.plugin.services.metrics.OperationTimer) OperationTimer(org.hyperledger.besu.plugin.services.metrics.OperationTimer) NoOpMetricsSystem(org.hyperledger.besu.metrics.noop.NoOpMetricsSystem) NoOpMetricsSystem(org.hyperledger.besu.metrics.noop.NoOpMetricsSystem) MetricsSystem(org.hyperledger.besu.plugin.services.MetricsSystem) MetricCategory(org.hyperledger.besu.plugin.services.metrics.MetricCategory) Test(org.junit.Test)

Example 4 with MetricCategory

use of org.hyperledger.besu.plugin.services.metrics.MetricCategory in project besu by hyperledger.

the class OpenTelemetrySystem method convertToObservations.

private Stream<Observation> convertToObservations(final MetricData metricData) {
    List<Observation> observations = new ArrayList<>();
    MetricCategory category = categoryNameToMetricCategory(metricData.getInstrumentationLibraryInfo().getName());
    Collection<?> points;
    switch(metricData.getType()) {
        case DOUBLE_GAUGE:
            points = metricData.getDoubleGaugeData().getPoints();
            break;
        case DOUBLE_SUM:
            points = metricData.getDoubleSumData().getPoints();
            break;
        case SUMMARY:
            points = metricData.getDoubleSummaryData().getPoints();
            break;
        case LONG_SUM:
            points = metricData.getLongSumData().getPoints();
            break;
        case HISTOGRAM:
            points = metricData.getDoubleHistogramData().getPoints();
            break;
        case LONG_GAUGE:
            points = metricData.getLongGaugeData().getPoints();
            break;
        default:
            throw new UnsupportedOperationException("Unsupported type " + metricData.getType().name());
    }
    for (Object ptObj : points) {
        PointData point = (PointData) ptObj;
        List<String> labels = new ArrayList<>();
        point.getAttributes().forEach((k, v) -> labels.add(v.toString()));
        observations.add(new Observation(category, metricData.getName(), extractValue(metricData.getType(), point), labels));
    }
    return observations.stream();
}
Also used : LongPointData(io.opentelemetry.sdk.metrics.data.LongPointData) DoubleHistogramPointData(io.opentelemetry.sdk.metrics.data.DoubleHistogramPointData) DoublePointData(io.opentelemetry.sdk.metrics.data.DoublePointData) DoubleSummaryPointData(io.opentelemetry.sdk.metrics.data.DoubleSummaryPointData) PointData(io.opentelemetry.sdk.metrics.data.PointData) Observation(org.hyperledger.besu.metrics.Observation) ArrayList(java.util.ArrayList) BesuMetricCategory(org.hyperledger.besu.metrics.BesuMetricCategory) StandardMetricCategory(org.hyperledger.besu.metrics.StandardMetricCategory) MetricCategory(org.hyperledger.besu.plugin.services.metrics.MetricCategory)

Example 5 with MetricCategory

use of org.hyperledger.besu.plugin.services.metrics.MetricCategory in project teku by ConsenSys.

the class MetricsOptionsTest method metricsCategories_shouldAcceptStandardMetricCategories.

@ParameterizedTest(name = "{0}")
@EnumSource(StandardMetricCategory.class)
public void metricsCategories_shouldAcceptStandardMetricCategories(MetricCategory category) {
    TekuConfiguration tekuConfiguration = getTekuConfigurationFromArguments("--metrics-categories", category.toString());
    final MetricsConfig config = tekuConfiguration.metricsConfig();
    assertThat(config.getMetricsCategories()).isEqualTo(Set.of(category));
    assertThat(createConfigBuilder().metrics(b -> b.metricsCategories(Set.of(category))).build()).usingRecursiveComparison().withComparatorForFields(SET_COMPARATOR, SET_FIELDS).isEqualTo(tekuConfiguration);
}
Also used : Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) Set(java.util.Set) EnumSource(org.junit.jupiter.params.provider.EnumSource) EVENTBUS(tech.pegasys.teku.infrastructure.metrics.TekuMetricCategory.EVENTBUS) MetricsConfig(tech.pegasys.teku.infrastructure.metrics.MetricsConfig) Test(org.junit.jupiter.api.Test) PROCESS(org.hyperledger.besu.metrics.StandardMetricCategory.PROCESS) LIBP2P(tech.pegasys.teku.infrastructure.metrics.TekuMetricCategory.LIBP2P) List(java.util.List) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest) TekuMetricCategory(tech.pegasys.teku.infrastructure.metrics.TekuMetricCategory) StandardMetricCategory(org.hyperledger.besu.metrics.StandardMetricCategory) TekuConfiguration(tech.pegasys.teku.config.TekuConfiguration) JVM(org.hyperledger.besu.metrics.StandardMetricCategory.JVM) NETWORK(tech.pegasys.teku.infrastructure.metrics.TekuMetricCategory.NETWORK) AbstractBeaconNodeCommandTest(tech.pegasys.teku.cli.AbstractBeaconNodeCommandTest) MetricCategory(org.hyperledger.besu.plugin.services.metrics.MetricCategory) Comparator(java.util.Comparator) TekuConfiguration(tech.pegasys.teku.config.TekuConfiguration) MetricsConfig(tech.pegasys.teku.infrastructure.metrics.MetricsConfig) EnumSource(org.junit.jupiter.params.provider.EnumSource) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Aggregations

MetricCategory (org.hyperledger.besu.plugin.services.metrics.MetricCategory)6 List (java.util.List)3 Assertions.assertThat (org.assertj.core.api.Assertions.assertThat)3 StandardMetricCategory (org.hyperledger.besu.metrics.StandardMetricCategory)3 ArrayList (java.util.ArrayList)2 Comparator (java.util.Comparator)2 Set (java.util.Set)2 JVM (org.hyperledger.besu.metrics.StandardMetricCategory.JVM)2 PROCESS (org.hyperledger.besu.metrics.StandardMetricCategory.PROCESS)2 Test (org.junit.jupiter.api.Test)2 ParameterizedTest (org.junit.jupiter.params.ParameterizedTest)2 EnumSource (org.junit.jupiter.params.provider.EnumSource)2 AbstractBeaconNodeCommandTest (tech.pegasys.teku.cli.AbstractBeaconNodeCommandTest)2 TekuConfiguration (tech.pegasys.teku.config.TekuConfiguration)2 MetricsConfig (tech.pegasys.teku.infrastructure.metrics.MetricsConfig)2 TekuMetricCategory (tech.pegasys.teku.infrastructure.metrics.TekuMetricCategory)2 EVENTBUS (tech.pegasys.teku.infrastructure.metrics.TekuMetricCategory.EVENTBUS)2 LIBP2P (tech.pegasys.teku.infrastructure.metrics.TekuMetricCategory.LIBP2P)2 NETWORK (tech.pegasys.teku.infrastructure.metrics.TekuMetricCategory.NETWORK)2 Lists (com.google.common.collect.Lists)1