Search in sources :

Example 1 with MetricsConfiguration

use of org.hyperledger.besu.metrics.prometheus.MetricsConfiguration in project besu by hyperledger.

the class RunnerBuilder method build.

public Runner build() {
    Preconditions.checkNotNull(besuController);
    final DiscoveryConfiguration discoveryConfiguration = DiscoveryConfiguration.create().setBindHost(p2pListenInterface).setBindPort(p2pListenPort).setAdvertisedHost(p2pAdvertisedHost);
    if (discovery) {
        final List<EnodeURL> bootstrap;
        if (ethNetworkConfig.getBootNodes() == null) {
            bootstrap = EthNetworkConfig.getNetworkConfig(NetworkName.MAINNET).getBootNodes();
        } else {
            bootstrap = ethNetworkConfig.getBootNodes();
        }
        discoveryConfiguration.setBootnodes(bootstrap);
        discoveryConfiguration.setDnsDiscoveryURL(ethNetworkConfig.getDnsDiscoveryUrl());
    } else {
        discoveryConfiguration.setActive(false);
    }
    final NodeKey nodeKey = besuController.getNodeKey();
    final SubProtocolConfiguration subProtocolConfiguration = besuController.getSubProtocolConfiguration();
    final ProtocolSchedule protocolSchedule = besuController.getProtocolSchedule();
    final ProtocolContext context = besuController.getProtocolContext();
    final List<SubProtocol> subProtocols = subProtocolConfiguration.getSubProtocols();
    final List<ProtocolManager> protocolManagers = subProtocolConfiguration.getProtocolManagers();
    final Set<Capability> supportedCapabilities = protocolManagers.stream().flatMap(protocolManager -> protocolManager.getSupportedCapabilities().stream()).collect(Collectors.toSet());
    final RlpxConfiguration rlpxConfiguration = RlpxConfiguration.create().setBindHost(p2pListenInterface).setBindPort(p2pListenPort).setMaxPeers(maxPeers).setSupportedProtocols(subProtocols).setClientId(BesuInfo.nodeName(identityString)).setLimitRemoteWireConnectionsEnabled(limitRemoteWireConnectionsEnabled).setFractionRemoteWireConnectionsAllowed(fractionRemoteConnectionsAllowed);
    networkingConfiguration.setRlpx(rlpxConfiguration).setDiscovery(discoveryConfiguration);
    final PeerPermissionsDenylist bannedNodes = PeerPermissionsDenylist.create();
    bannedNodeIds.forEach(bannedNodes::add);
    final List<EnodeURL> bootnodes = discoveryConfiguration.getBootnodes();
    final Synchronizer synchronizer = besuController.getSynchronizer();
    final TransactionSimulator transactionSimulator = new TransactionSimulator(context.getBlockchain(), context.getWorldStateArchive(), protocolSchedule);
    final Bytes localNodeId = nodeKey.getPublicKey().getEncodedBytes();
    final Optional<NodePermissioningController> nodePermissioningController = buildNodePermissioningController(bootnodes, synchronizer, transactionSimulator, localNodeId, context.getBlockchain());
    final PeerPermissions peerPermissions = nodePermissioningController.map(nodePC -> new PeerPermissionsAdapter(nodePC, bootnodes, context.getBlockchain())).map(nodePerms -> PeerPermissions.combine(nodePerms, bannedNodes)).orElse(bannedNodes);
    LOG.info("Detecting NAT service.");
    final boolean fallbackEnabled = natMethod == NatMethod.AUTO || natMethodFallbackEnabled;
    final NatService natService = new NatService(buildNatManager(natMethod), fallbackEnabled);
    final NetworkBuilder inactiveNetwork = caps -> new NoopP2PNetwork();
    final NetworkBuilder activeNetwork = caps -> DefaultP2PNetwork.builder().vertx(vertx).nodeKey(nodeKey).config(networkingConfiguration).peerPermissions(peerPermissions).metricsSystem(metricsSystem).supportedCapabilities(caps).natService(natService).randomPeerPriority(randomPeerPriority).storageProvider(storageProvider).forkIdSupplier(forkIdSupplier).p2pTLSConfiguration(p2pTLSConfiguration).build();
    final NetworkRunner networkRunner = NetworkRunner.builder().protocolManagers(protocolManagers).subProtocols(subProtocols).network(p2pEnabled ? activeNetwork : inactiveNetwork).metricsSystem(metricsSystem).build();
    final P2PNetwork network = networkRunner.getNetwork();
    // ForkId in Ethereum Node Record needs updating when we transition to a new protocol spec
    context.getBlockchain().observeBlockAdded(blockAddedEvent -> {
        if (protocolSchedule.streamMilestoneBlocks().anyMatch(blockNumber -> blockNumber == blockAddedEvent.getBlock().getHeader().getNumber())) {
            network.updateNodeRecord();
        }
    });
    nodePermissioningController.ifPresent(n -> n.setInsufficientPeersPermissioningProvider(new InsufficientPeersPermissioningProvider(network, bootnodes)));
    final TransactionPool transactionPool = besuController.getTransactionPool();
    final MiningCoordinator miningCoordinator = besuController.getMiningCoordinator();
    final BlockchainQueries blockchainQueries = new BlockchainQueries(context.getBlockchain(), context.getWorldStateArchive(), Optional.of(dataDir.resolve(CACHE_PATH)), Optional.of(besuController.getProtocolManager().ethContext().getScheduler()), apiConfiguration);
    final PrivacyParameters privacyParameters = besuController.getPrivacyParameters();
    final FilterManager filterManager = new FilterManagerBuilder().blockchainQueries(blockchainQueries).transactionPool(transactionPool).privacyParameters(privacyParameters).build();
    vertx.deployVerticle(filterManager);
    createPrivateTransactionObserver(filterManager, privacyParameters);
    final P2PNetwork peerNetwork = networkRunner.getNetwork();
    final MiningParameters miningParameters = besuController.getMiningParameters();
    Optional<StratumServer> stratumServer = Optional.empty();
    if (miningParameters.isStratumMiningEnabled()) {
        var powMiningCoordinator = miningCoordinator;
        if (miningCoordinator instanceof TransitionCoordinator) {
            LOG.debug("fetching powMiningCoordinator from TransitionCoordinator");
            powMiningCoordinator = ((TransitionCoordinator) miningCoordinator).getPreMergeObject();
        }
        stratumServer = Optional.of(new StratumServer(vertx, powMiningCoordinator, miningParameters.getStratumPort(), miningParameters.getStratumNetworkInterface(), miningParameters.getStratumExtranonce(), metricsSystem));
        miningCoordinator.addEthHashObserver(stratumServer.get());
        LOG.debug("added ethash observer: {}", stratumServer.get());
    }
    sanitizePeers(network, staticNodes).map(DefaultPeer::fromEnodeURL).forEach(peerNetwork::addMaintainedConnectionPeer);
    final Optional<NodeLocalConfigPermissioningController> nodeLocalConfigPermissioningController = nodePermissioningController.flatMap(NodePermissioningController::localConfigController);
    final Optional<AccountPermissioningController> accountPermissioningController = buildAccountPermissioningController(permissioningConfiguration, besuController, transactionSimulator, context.getBlockchain());
    final Optional<AccountLocalConfigPermissioningController> accountLocalConfigPermissioningController = accountPermissioningController.flatMap(AccountPermissioningController::getAccountLocalConfigPermissioningController);
    Optional<JsonRpcHttpService> jsonRpcHttpService = Optional.empty();
    if (jsonRpcConfiguration.isEnabled()) {
        final Map<String, JsonRpcMethod> nonEngineMethods = jsonRpcMethods(protocolSchedule, context, besuController, peerNetwork, blockchainQueries, synchronizer, transactionPool, miningCoordinator, metricsSystem, supportedCapabilities, jsonRpcConfiguration.getRpcApis().stream().filter(apiGroup -> !apiGroup.toLowerCase().startsWith("engine")).collect(Collectors.toList()), filterManager, accountLocalConfigPermissioningController, nodeLocalConfigPermissioningController, privacyParameters, jsonRpcConfiguration, webSocketConfiguration, metricsConfiguration, natService, besuPluginContext.getNamedPlugins(), dataDir, rpcEndpointServiceImpl);
        jsonRpcHttpService = Optional.of(new JsonRpcHttpService(vertx, dataDir, jsonRpcConfiguration, metricsSystem, natService, nonEngineMethods, new HealthService(new LivenessCheck()), new HealthService(new ReadinessCheck(peerNetwork, synchronizer))));
    }
    Optional<JsonRpcService> engineJsonRpcService = Optional.empty();
    if (engineJsonRpcConfiguration.isPresent() && engineJsonRpcConfiguration.get().isEnabled()) {
        final Map<String, JsonRpcMethod> engineMethods = jsonRpcMethods(protocolSchedule, context, besuController, peerNetwork, blockchainQueries, synchronizer, transactionPool, miningCoordinator, metricsSystem, supportedCapabilities, engineJsonRpcConfiguration.get().getRpcApis(), filterManager, accountLocalConfigPermissioningController, nodeLocalConfigPermissioningController, privacyParameters, engineJsonRpcConfiguration.get(), webSocketConfiguration, metricsConfiguration, natService, besuPluginContext.getNamedPlugins(), dataDir, rpcEndpointServiceImpl);
        Optional<AuthenticationService> authToUse = engineJsonRpcConfiguration.get().isAuthenticationEnabled() ? Optional.of(new EngineAuthService(vertx, Optional.ofNullable(engineJsonRpcConfiguration.get().getAuthenticationPublicKeyFile()), dataDir)) : Optional.empty();
        WebSocketConfiguration engineSocketConfig = webSocketConfiguration.isEnabled() ? webSocketConfiguration : WebSocketConfiguration.createEngineDefault();
        engineJsonRpcService = Optional.of(new JsonRpcService(vertx, dataDir, engineJsonRpcConfiguration.orElse(JsonRpcConfiguration.createEngineDefault()), metricsSystem, natService, engineMethods, Optional.ofNullable(engineSocketConfig), besuController.getProtocolManager().ethContext().getScheduler(), authToUse, new HealthService(new LivenessCheck()), new HealthService(new ReadinessCheck(peerNetwork, synchronizer))));
    }
    Optional<GraphQLHttpService> graphQLHttpService = Optional.empty();
    if (graphQLConfiguration.isEnabled()) {
        final GraphQLDataFetchers fetchers = new GraphQLDataFetchers(supportedCapabilities, privacyParameters.getGoQuorumPrivacyParameters());
        final Map<GraphQLContextType, Object> graphQlContextMap = new ConcurrentHashMap<>();
        graphQlContextMap.putIfAbsent(GraphQLContextType.BLOCKCHAIN_QUERIES, blockchainQueries);
        graphQlContextMap.putIfAbsent(GraphQLContextType.PROTOCOL_SCHEDULE, protocolSchedule);
        graphQlContextMap.putIfAbsent(GraphQLContextType.TRANSACTION_POOL, transactionPool);
        graphQlContextMap.putIfAbsent(GraphQLContextType.MINING_COORDINATOR, miningCoordinator);
        graphQlContextMap.putIfAbsent(GraphQLContextType.SYNCHRONIZER, synchronizer);
        final GraphQL graphQL;
        try {
            graphQL = GraphQLProvider.buildGraphQL(fetchers);
        } catch (final IOException ioe) {
            throw new RuntimeException(ioe);
        }
        graphQLHttpService = Optional.of(new GraphQLHttpService(vertx, dataDir, graphQLConfiguration, graphQL, graphQlContextMap, besuController.getProtocolManager().ethContext().getScheduler()));
    }
    Optional<WebSocketService> webSocketService = Optional.empty();
    if (webSocketConfiguration.isEnabled()) {
        final Map<String, JsonRpcMethod> nonEngineMethods = jsonRpcMethods(protocolSchedule, context, besuController, peerNetwork, blockchainQueries, synchronizer, transactionPool, miningCoordinator, metricsSystem, supportedCapabilities, webSocketConfiguration.getRpcApis().stream().filter(apiGroup -> !apiGroup.toLowerCase().startsWith("engine")).collect(Collectors.toList()), filterManager, accountLocalConfigPermissioningController, nodeLocalConfigPermissioningController, privacyParameters, jsonRpcConfiguration, webSocketConfiguration, metricsConfiguration, natService, besuPluginContext.getNamedPlugins(), dataDir, rpcEndpointServiceImpl);
        final SubscriptionManager subscriptionManager = createSubscriptionManager(vertx, transactionPool, blockchainQueries);
        createLogsSubscriptionService(context.getBlockchain(), context.getWorldStateArchive(), subscriptionManager, privacyParameters);
        createNewBlockHeadersSubscriptionService(context.getBlockchain(), blockchainQueries, subscriptionManager);
        createSyncingSubscriptionService(synchronizer, subscriptionManager);
        webSocketService = Optional.of(createWebsocketService(vertx, webSocketConfiguration, subscriptionManager, nonEngineMethods, privacyParameters, protocolSchedule, blockchainQueries, DefaultAuthenticationService.create(vertx, webSocketConfiguration), metricsSystem));
        createPrivateTransactionObserver(subscriptionManager, privacyParameters);
    }
    Optional<MetricsService> metricsService = createMetricsService(vertx, metricsConfiguration);
    final Optional<EthStatsService> ethStatsService;
    if (!Strings.isNullOrEmpty(ethstatsUrl)) {
        ethStatsService = Optional.of(new EthStatsService(NetstatsUrl.fromParams(ethstatsUrl, ethstatsContact), blockchainQueries, besuController.getProtocolManager(), transactionPool, miningCoordinator, besuController.getSyncState(), vertx, BesuInfo.nodeName(identityString), besuController.getGenesisConfigOptions(), network));
    } else {
        ethStatsService = Optional.empty();
    }
    final Optional<JsonRpcIpcService> jsonRpcIpcService;
    if (jsonRpcIpcConfiguration.isEnabled()) {
        Map<String, JsonRpcMethod> ipcMethods = jsonRpcMethods(protocolSchedule, context, besuController, peerNetwork, blockchainQueries, synchronizer, transactionPool, miningCoordinator, metricsSystem, supportedCapabilities, jsonRpcIpcConfiguration.getEnabledApis().stream().filter(apiGroup -> !apiGroup.toLowerCase().startsWith("engine")).collect(Collectors.toList()), filterManager, accountLocalConfigPermissioningController, nodeLocalConfigPermissioningController, privacyParameters, jsonRpcConfiguration, webSocketConfiguration, metricsConfiguration, natService, besuPluginContext.getNamedPlugins(), dataDir, rpcEndpointServiceImpl);
        jsonRpcIpcService = Optional.of(new JsonRpcIpcService(vertx, jsonRpcIpcConfiguration.getPath(), new JsonRpcExecutor(new BaseJsonRpcProcessor(), ipcMethods)));
    } else {
        jsonRpcIpcService = Optional.empty();
    }
    return new Runner(vertx, networkRunner, natService, jsonRpcHttpService, engineJsonRpcService, graphQLHttpService, webSocketService, jsonRpcIpcService, stratumServer, metricsService, ethStatsService, besuController, dataDir, pidPath, autoLogBloomCaching ? blockchainQueries.getTransactionLogBloomCacher() : Optional.empty(), context.getBlockchain());
}
Also used : NoopP2PNetwork(org.hyperledger.besu.ethereum.p2p.network.NoopP2PNetwork) PermissioningConfiguration(org.hyperledger.besu.ethereum.permissioning.PermissioningConfiguration) NodeLocalConfigPermissioningController(org.hyperledger.besu.ethereum.permissioning.NodeLocalConfigPermissioningController) AuthenticationService(org.hyperledger.besu.ethereum.api.jsonrpc.authentication.AuthenticationService) WebSocketConfiguration(org.hyperledger.besu.ethereum.api.jsonrpc.websocket.WebSocketConfiguration) DockerDetector(org.hyperledger.besu.nat.docker.DockerDetector) FilterManagerBuilder(org.hyperledger.besu.ethereum.api.jsonrpc.internal.filter.FilterManagerBuilder) Map(java.util.Map) DiscoveryConfiguration(org.hyperledger.besu.ethereum.p2p.config.DiscoveryConfiguration) Objects.isNull(java.util.Objects.isNull) BesuPluginContextImpl(org.hyperledger.besu.services.BesuPluginContextImpl) NetworkUtility(org.hyperledger.besu.util.NetworkUtility) Path(java.nio.file.Path) ProtocolManager(org.hyperledger.besu.ethereum.p2p.network.ProtocolManager) PendingTransactionDroppedSubscriptionService(org.hyperledger.besu.ethereum.api.jsonrpc.websocket.subscription.pending.PendingTransactionDroppedSubscriptionService) FlexiblePrivacyPrecompiledContract(org.hyperledger.besu.ethereum.mainnet.precompiles.privacy.FlexiblePrivacyPrecompiledContract) NetworkingConfiguration(org.hyperledger.besu.ethereum.p2p.config.NetworkingConfiguration) ReadinessCheck(org.hyperledger.besu.ethereum.api.jsonrpc.health.ReadinessCheck) BlockchainQueries(org.hyperledger.besu.ethereum.api.query.BlockchainQueries) PeerPermissionsDenylist(org.hyperledger.besu.ethereum.p2p.permissions.PeerPermissionsDenylist) Set(java.util.Set) GraphQLProvider(org.hyperledger.besu.ethereum.api.graphql.GraphQLProvider) P2PNetwork(org.hyperledger.besu.ethereum.p2p.network.P2PNetwork) PrivateTransactionObserver(org.hyperledger.besu.ethereum.privacy.PrivateTransactionObserver) Stream(java.util.stream.Stream) SyncingSubscriptionService(org.hyperledger.besu.ethereum.api.jsonrpc.websocket.subscription.syncing.SyncingSubscriptionService) NewBlockHeadersSubscriptionService(org.hyperledger.besu.ethereum.api.jsonrpc.websocket.subscription.blockheaders.NewBlockHeadersSubscriptionService) WebSocketService(org.hyperledger.besu.ethereum.api.jsonrpc.websocket.WebSocketService) PendingTransactionSubscriptionService(org.hyperledger.besu.ethereum.api.jsonrpc.websocket.subscription.pending.PendingTransactionSubscriptionService) LogsSubscriptionService(org.hyperledger.besu.ethereum.api.jsonrpc.websocket.subscription.logs.LogsSubscriptionService) Capability(org.hyperledger.besu.ethereum.p2p.rlpx.wire.Capability) Predicate.not(java.util.function.Predicate.not) FLEXIBLE_PRIVACY(org.hyperledger.besu.ethereum.core.PrivacyParameters.FLEXIBLE_PRIVACY) JsonRpcExecutor(org.hyperledger.besu.ethereum.api.jsonrpc.execution.JsonRpcExecutor) LivenessCheck(org.hyperledger.besu.ethereum.api.jsonrpc.health.LivenessCheck) MetricsService(org.hyperledger.besu.metrics.MetricsService) JsonRpcProcessor(org.hyperledger.besu.ethereum.api.jsonrpc.execution.JsonRpcProcessor) AccountPermissioningController(org.hyperledger.besu.ethereum.permissioning.account.AccountPermissioningController) Bytes(org.apache.tuweni.bytes.Bytes) Supplier(java.util.function.Supplier) TLSConfiguration(org.hyperledger.besu.ethereum.p2p.rlpx.connections.netty.TLSConfiguration) KubernetesNatManager(org.hyperledger.besu.nat.kubernetes.KubernetesNatManager) ArrayList(java.util.ArrayList) ProtocolSchedule(org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule) PrivacyQueries(org.hyperledger.besu.ethereum.api.query.PrivacyQueries) Strings(com.google.common.base.Strings) FilterManager(org.hyperledger.besu.ethereum.api.jsonrpc.internal.filter.FilterManager) JsonRpcMethodsFactory(org.hyperledger.besu.ethereum.api.jsonrpc.methods.JsonRpcMethodsFactory) MiningCoordinator(org.hyperledger.besu.ethereum.blockcreation.MiningCoordinator) InsufficientPeersPermissioningProvider(org.hyperledger.besu.ethereum.permissioning.node.InsufficientPeersPermissioningProvider) DefaultAuthenticationService(org.hyperledger.besu.ethereum.api.jsonrpc.authentication.DefaultAuthenticationService) TransactionSimulator(org.hyperledger.besu.ethereum.transaction.TransactionSimulator) JsonRpcHttpService(org.hyperledger.besu.ethereum.api.jsonrpc.JsonRpcHttpService) StratumServer(org.hyperledger.besu.ethereum.stratum.StratumServer) Vertx(io.vertx.core.Vertx) Predicate.isEqual(java.util.function.Predicate.isEqual) NatMethod(org.hyperledger.besu.nat.NatMethod) GraphQLConfiguration(org.hyperledger.besu.ethereum.api.graphql.GraphQLConfiguration) IOException(java.io.IOException) MetricsConfiguration(org.hyperledger.besu.metrics.prometheus.MetricsConfiguration) DockerNatManager(org.hyperledger.besu.nat.docker.DockerNatManager) TransitionCoordinator(org.hyperledger.besu.consensus.merge.blockcreation.TransitionCoordinator) AccountPermissioningControllerFactory(org.hyperledger.besu.ethereum.permissioning.account.AccountPermissioningControllerFactory) NetworkBuilder(org.hyperledger.besu.ethereum.p2p.network.NetworkRunner.NetworkBuilder) WebSocketMethodsFactory(org.hyperledger.besu.ethereum.api.jsonrpc.websocket.methods.WebSocketMethodsFactory) Preconditions(com.google.common.base.Preconditions) PrivacyParameters(org.hyperledger.besu.ethereum.core.PrivacyParameters) PrivateWebSocketMethodsFactory(org.hyperledger.besu.ethereum.api.jsonrpc.websocket.methods.PrivateWebSocketMethodsFactory) BesuPlugin(org.hyperledger.besu.plugin.BesuPlugin) LoggerFactory(org.slf4j.LoggerFactory) Preconditions.checkArgument(com.google.common.base.Preconditions.checkArgument) JsonRpcIpcService(org.hyperledger.besu.ethereum.api.jsonrpc.ipc.JsonRpcIpcService) StorageProvider(org.hyperledger.besu.ethereum.storage.StorageProvider) Synchronizer(org.hyperledger.besu.ethereum.core.Synchronizer) NetworkName(org.hyperledger.besu.cli.config.NetworkName) DefaultP2PNetwork(org.hyperledger.besu.ethereum.p2p.network.DefaultP2PNetwork) WebSocketMessageHandler(org.hyperledger.besu.ethereum.api.jsonrpc.websocket.WebSocketMessageHandler) Collection(java.util.Collection) Blockchain(org.hyperledger.besu.ethereum.chain.Blockchain) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) MiningParameters(org.hyperledger.besu.ethereum.core.MiningParameters) Collectors(java.util.stream.Collectors) GraphQLHttpService(org.hyperledger.besu.ethereum.api.graphql.GraphQLHttpService) EthStatsService(org.hyperledger.besu.ethstats.EthStatsService) List(java.util.List) UpnpNatManager(org.hyperledger.besu.nat.upnp.UpnpNatManager) Optional(java.util.Optional) KubernetesDetector(org.hyperledger.besu.nat.kubernetes.KubernetesDetector) NodeKey(org.hyperledger.besu.crypto.NodeKey) ApiConfiguration(org.hyperledger.besu.ethereum.api.ApiConfiguration) GraphQLContextType(org.hyperledger.besu.ethereum.api.graphql.GraphQLContextType) SubProtocolConfiguration(org.hyperledger.besu.ethereum.p2p.config.SubProtocolConfiguration) NatManager(org.hyperledger.besu.nat.core.NatManager) GraphQL(graphql.GraphQL) EthNetworkConfig(org.hyperledger.besu.cli.config.EthNetworkConfig) CACHE_PATH(org.hyperledger.besu.controller.BesuController.CACHE_PATH) EngineAuthService(org.hyperledger.besu.ethereum.api.jsonrpc.authentication.EngineAuthService) NodePermissioningController(org.hyperledger.besu.ethereum.permissioning.node.NodePermissioningController) SubProtocol(org.hyperledger.besu.ethereum.p2p.rlpx.wire.SubProtocol) NetworkRunner(org.hyperledger.besu.ethereum.p2p.network.NetworkRunner) BesuController(org.hyperledger.besu.controller.BesuController) PermissioningServiceImpl(org.hyperledger.besu.services.PermissioningServiceImpl) JsonRpcConfiguration(org.hyperledger.besu.ethereum.api.jsonrpc.JsonRpcConfiguration) RpcEndpointServiceImpl(org.hyperledger.besu.services.RpcEndpointServiceImpl) DefaultPeer(org.hyperledger.besu.ethereum.p2p.peers.DefaultPeer) HealthService(org.hyperledger.besu.ethereum.api.jsonrpc.health.HealthService) WorldStateArchive(org.hyperledger.besu.ethereum.worldstate.WorldStateArchive) BaseJsonRpcProcessor(org.hyperledger.besu.ethereum.api.jsonrpc.execution.BaseJsonRpcProcessor) RlpxConfiguration(org.hyperledger.besu.ethereum.p2p.config.RlpxConfiguration) TransactionPool(org.hyperledger.besu.ethereum.eth.transactions.TransactionPool) Logger(org.slf4j.Logger) NodePermissioningControllerFactory(org.hyperledger.besu.ethereum.permissioning.NodePermissioningControllerFactory) PeerPermissionsAdapter(org.hyperledger.besu.ethereum.permissioning.node.PeerPermissionsAdapter) NetstatsUrl(org.hyperledger.besu.ethstats.util.NetstatsUrl) AccountLocalConfigPermissioningController(org.hyperledger.besu.ethereum.permissioning.AccountLocalConfigPermissioningController) GraphQLDataFetchers(org.hyperledger.besu.ethereum.api.graphql.GraphQLDataFetchers) EnodeURL(org.hyperledger.besu.plugin.data.EnodeURL) JsonRpcService(org.hyperledger.besu.ethereum.api.jsonrpc.JsonRpcService) SubscriptionManager(org.hyperledger.besu.ethereum.api.jsonrpc.websocket.subscription.SubscriptionManager) JsonRpcIpcConfiguration(org.hyperledger.besu.ethereum.api.jsonrpc.ipc.JsonRpcIpcConfiguration) ObservableMetricsSystem(org.hyperledger.besu.metrics.ObservableMetricsSystem) ProtocolContext(org.hyperledger.besu.ethereum.ProtocolContext) PeerPermissions(org.hyperledger.besu.ethereum.p2p.permissions.PeerPermissions) VisibleForTesting(com.google.common.annotations.VisibleForTesting) Collections(java.util.Collections) JsonRpcMethod(org.hyperledger.besu.ethereum.api.jsonrpc.internal.methods.JsonRpcMethod) NatService(org.hyperledger.besu.nat.NatService) AuthenticatedJsonRpcProcessor(org.hyperledger.besu.ethereum.api.jsonrpc.execution.AuthenticatedJsonRpcProcessor) StratumServer(org.hyperledger.besu.ethereum.stratum.StratumServer) DiscoveryConfiguration(org.hyperledger.besu.ethereum.p2p.config.DiscoveryConfiguration) AccountLocalConfigPermissioningController(org.hyperledger.besu.ethereum.permissioning.AccountLocalConfigPermissioningController) SubscriptionManager(org.hyperledger.besu.ethereum.api.jsonrpc.websocket.subscription.SubscriptionManager) RlpxConfiguration(org.hyperledger.besu.ethereum.p2p.config.RlpxConfiguration) EnodeURL(org.hyperledger.besu.plugin.data.EnodeURL) Bytes(org.apache.tuweni.bytes.Bytes) MiningParameters(org.hyperledger.besu.ethereum.core.MiningParameters) ReadinessCheck(org.hyperledger.besu.ethereum.api.jsonrpc.health.ReadinessCheck) HealthService(org.hyperledger.besu.ethereum.api.jsonrpc.health.HealthService) LivenessCheck(org.hyperledger.besu.ethereum.api.jsonrpc.health.LivenessCheck) SubProtocol(org.hyperledger.besu.ethereum.p2p.rlpx.wire.SubProtocol) EngineAuthService(org.hyperledger.besu.ethereum.api.jsonrpc.authentication.EngineAuthService) ProtocolContext(org.hyperledger.besu.ethereum.ProtocolContext) TransactionSimulator(org.hyperledger.besu.ethereum.transaction.TransactionSimulator) NodeKey(org.hyperledger.besu.crypto.NodeKey) JsonRpcExecutor(org.hyperledger.besu.ethereum.api.jsonrpc.execution.JsonRpcExecutor) PeerPermissionsAdapter(org.hyperledger.besu.ethereum.permissioning.node.PeerPermissionsAdapter) Synchronizer(org.hyperledger.besu.ethereum.core.Synchronizer) TransactionPool(org.hyperledger.besu.ethereum.eth.transactions.TransactionPool) Capability(org.hyperledger.besu.ethereum.p2p.rlpx.wire.Capability) WebSocketConfiguration(org.hyperledger.besu.ethereum.api.jsonrpc.websocket.WebSocketConfiguration) NatService(org.hyperledger.besu.nat.NatService) GraphQL(graphql.GraphQL) ProtocolSchedule(org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule) PrivacyParameters(org.hyperledger.besu.ethereum.core.PrivacyParameters) JsonRpcIpcService(org.hyperledger.besu.ethereum.api.jsonrpc.ipc.JsonRpcIpcService) SubProtocolConfiguration(org.hyperledger.besu.ethereum.p2p.config.SubProtocolConfiguration) ProtocolManager(org.hyperledger.besu.ethereum.p2p.network.ProtocolManager) NodePermissioningController(org.hyperledger.besu.ethereum.permissioning.node.NodePermissioningController) GraphQLDataFetchers(org.hyperledger.besu.ethereum.api.graphql.GraphQLDataFetchers) JsonRpcHttpService(org.hyperledger.besu.ethereum.api.jsonrpc.JsonRpcHttpService) EthStatsService(org.hyperledger.besu.ethstats.EthStatsService) NetworkRunner(org.hyperledger.besu.ethereum.p2p.network.NetworkRunner) GraphQLHttpService(org.hyperledger.besu.ethereum.api.graphql.GraphQLHttpService) NodeLocalConfigPermissioningController(org.hyperledger.besu.ethereum.permissioning.NodeLocalConfigPermissioningController) MiningCoordinator(org.hyperledger.besu.ethereum.blockcreation.MiningCoordinator) FilterManager(org.hyperledger.besu.ethereum.api.jsonrpc.internal.filter.FilterManager) AccountPermissioningController(org.hyperledger.besu.ethereum.permissioning.account.AccountPermissioningController) PeerPermissionsDenylist(org.hyperledger.besu.ethereum.p2p.permissions.PeerPermissionsDenylist) BaseJsonRpcProcessor(org.hyperledger.besu.ethereum.api.jsonrpc.execution.BaseJsonRpcProcessor) NetworkBuilder(org.hyperledger.besu.ethereum.p2p.network.NetworkRunner.NetworkBuilder) TransitionCoordinator(org.hyperledger.besu.consensus.merge.blockcreation.TransitionCoordinator) BlockchainQueries(org.hyperledger.besu.ethereum.api.query.BlockchainQueries) WebSocketService(org.hyperledger.besu.ethereum.api.jsonrpc.websocket.WebSocketService) NetworkRunner(org.hyperledger.besu.ethereum.p2p.network.NetworkRunner) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) InsufficientPeersPermissioningProvider(org.hyperledger.besu.ethereum.permissioning.node.InsufficientPeersPermissioningProvider) NoopP2PNetwork(org.hyperledger.besu.ethereum.p2p.network.NoopP2PNetwork) MetricsService(org.hyperledger.besu.metrics.MetricsService) NoopP2PNetwork(org.hyperledger.besu.ethereum.p2p.network.NoopP2PNetwork) P2PNetwork(org.hyperledger.besu.ethereum.p2p.network.P2PNetwork) DefaultP2PNetwork(org.hyperledger.besu.ethereum.p2p.network.DefaultP2PNetwork) FilterManagerBuilder(org.hyperledger.besu.ethereum.api.jsonrpc.internal.filter.FilterManagerBuilder) IOException(java.io.IOException) GraphQLContextType(org.hyperledger.besu.ethereum.api.graphql.GraphQLContextType) JsonRpcService(org.hyperledger.besu.ethereum.api.jsonrpc.JsonRpcService) JsonRpcMethod(org.hyperledger.besu.ethereum.api.jsonrpc.internal.methods.JsonRpcMethod) PeerPermissions(org.hyperledger.besu.ethereum.p2p.permissions.PeerPermissions) AuthenticationService(org.hyperledger.besu.ethereum.api.jsonrpc.authentication.AuthenticationService) DefaultAuthenticationService(org.hyperledger.besu.ethereum.api.jsonrpc.authentication.DefaultAuthenticationService)

Example 2 with MetricsConfiguration

use of org.hyperledger.besu.metrics.prometheus.MetricsConfiguration in project besu by hyperledger.

the class RunnerBuilderTest method enodeUrlShouldHaveAdvertisedHostWhenDiscoveryDisabled.

@Test
public void enodeUrlShouldHaveAdvertisedHostWhenDiscoveryDisabled() {
    final String p2pAdvertisedHost = "172.0.0.1";
    final int p2pListenPort = 30302;
    final Runner runner = new RunnerBuilder().p2pListenInterface("0.0.0.0").p2pListenPort(p2pListenPort).p2pAdvertisedHost(p2pAdvertisedHost).p2pEnabled(true).discovery(false).besuController(besuController).ethNetworkConfig(mock(EthNetworkConfig.class)).metricsSystem(mock(ObservableMetricsSystem.class)).jsonRpcConfiguration(mock(JsonRpcConfiguration.class)).permissioningService(mock(PermissioningServiceImpl.class)).graphQLConfiguration(mock(GraphQLConfiguration.class)).webSocketConfiguration(mock(WebSocketConfiguration.class)).jsonRpcIpcConfiguration(mock(JsonRpcIpcConfiguration.class)).metricsConfiguration(mock(MetricsConfiguration.class)).vertx(vertx).dataDir(dataDir.getRoot().toPath()).storageProvider(mock(KeyValueStorageProvider.class)).forkIdSupplier(() -> Collections.singletonList(Bytes.EMPTY)).rpcEndpointService(new RpcEndpointServiceImpl()).build();
    runner.startEthereumMainLoop();
    final EnodeURL expectedEodeURL = EnodeURLImpl.builder().ipAddress(p2pAdvertisedHost).discoveryPort(0).listeningPort(p2pListenPort).nodeId(besuController.getNodeKey().getPublicKey().getEncoded()).build();
    assertThat(runner.getLocalEnode().orElseThrow()).isEqualTo(expectedEodeURL);
}
Also used : EnodeURL(org.hyperledger.besu.plugin.data.EnodeURL) MockitoJUnitRunner(org.mockito.junit.MockitoJUnitRunner) PermissioningServiceImpl(org.hyperledger.besu.services.PermissioningServiceImpl) RpcEndpointServiceImpl(org.hyperledger.besu.services.RpcEndpointServiceImpl) ObservableMetricsSystem(org.hyperledger.besu.metrics.ObservableMetricsSystem) MetricsConfiguration(org.hyperledger.besu.metrics.prometheus.MetricsConfiguration) WebSocketConfiguration(org.hyperledger.besu.ethereum.api.jsonrpc.websocket.WebSocketConfiguration) Test(org.junit.Test)

Example 3 with MetricsConfiguration

use of org.hyperledger.besu.metrics.prometheus.MetricsConfiguration in project besu by hyperledger.

the class OpenTelemetryAcceptanceTest method setUp.

@Before
public void setUp() throws Exception {
    Server server = NettyServerBuilder.forPort(4317).addService(fakeTracesCollector).addService(fakeMetricsCollector).build().start();
    closer.register(server::shutdownNow);
    MetricsConfiguration configuration = MetricsConfiguration.builder().protocol(MetricsProtocol.OPENTELEMETRY).enabled(true).port(0).hostsAllowlist(singletonList("*")).build();
    metricsNode = besu.create(new BesuNodeConfigurationBuilder().name("metrics-node").jsonRpcEnabled().metricsConfiguration(configuration).build());
    cluster.start(metricsNode);
}
Also used : StreamObserver(io.grpc.stub.StreamObserver) Server(io.grpc.Server) MetricsConfiguration(org.hyperledger.besu.metrics.prometheus.MetricsConfiguration) BesuNodeConfigurationBuilder(org.hyperledger.besu.tests.acceptance.dsl.node.configuration.BesuNodeConfigurationBuilder) Before(org.junit.Before)

Example 4 with MetricsConfiguration

use of org.hyperledger.besu.metrics.prometheus.MetricsConfiguration 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 5 with MetricsConfiguration

use of org.hyperledger.besu.metrics.prometheus.MetricsConfiguration in project besu by hyperledger.

the class JsonRpcTestMethodsFactory method methods.

public Map<String, JsonRpcMethod> methods() {
    final P2PNetwork peerDiscovery = mock(P2PNetwork.class);
    final EthPeers ethPeers = mock(EthPeers.class);
    final TransactionPool transactionPool = mock(TransactionPool.class);
    final PoWMiningCoordinator miningCoordinator = mock(PoWMiningCoordinator.class);
    final ObservableMetricsSystem metricsSystem = new NoOpMetricsSystem();
    final Optional<AccountLocalConfigPermissioningController> accountWhitelistController = Optional.of(mock(AccountLocalConfigPermissioningController.class));
    final Optional<NodeLocalConfigPermissioningController> nodeWhitelistController = Optional.of(mock(NodeLocalConfigPermissioningController.class));
    final PrivacyParameters privacyParameters = mock(PrivacyParameters.class);
    final FilterManager filterManager = new FilterManagerBuilder().blockchainQueries(blockchainQueries).transactionPool(transactionPool).privacyParameters(privacyParameters).build();
    final JsonRpcConfiguration jsonRpcConfiguration = mock(JsonRpcConfiguration.class);
    final WebSocketConfiguration webSocketConfiguration = mock(WebSocketConfiguration.class);
    final MetricsConfiguration metricsConfiguration = mock(MetricsConfiguration.class);
    final NatService natService = new NatService(Optional.empty());
    final List<String> apis = new ArrayList<>();
    apis.add(RpcApis.ETH.name());
    apis.add(RpcApis.NET.name());
    apis.add(RpcApis.WEB3.name());
    apis.add(RpcApis.PRIV.name());
    apis.add(RpcApis.DEBUG.name());
    final Path dataDir = mock(Path.class);
    return new JsonRpcMethodsFactory().methods(CLIENT_VERSION, NETWORK_ID, new StubGenesisConfigOptions(), peerDiscovery, blockchainQueries, synchronizer, importer.getProtocolSchedule(), context, filterManager, transactionPool, miningCoordinator, metricsSystem, new HashSet<>(), accountWhitelistController, nodeWhitelistController, apis, privacyParameters, jsonRpcConfiguration, webSocketConfiguration, metricsConfiguration, natService, new HashMap<>(), dataDir, ethPeers);
}
Also used : NodeLocalConfigPermissioningController(org.hyperledger.besu.ethereum.permissioning.NodeLocalConfigPermissioningController) ArrayList(java.util.ArrayList) AccountLocalConfigPermissioningController(org.hyperledger.besu.ethereum.permissioning.AccountLocalConfigPermissioningController) EthPeers(org.hyperledger.besu.ethereum.eth.manager.EthPeers) FilterManager(org.hyperledger.besu.ethereum.api.jsonrpc.internal.filter.FilterManager) MetricsConfiguration(org.hyperledger.besu.metrics.prometheus.MetricsConfiguration) Path(java.nio.file.Path) TransactionPool(org.hyperledger.besu.ethereum.eth.transactions.TransactionPool) WebSocketConfiguration(org.hyperledger.besu.ethereum.api.jsonrpc.websocket.WebSocketConfiguration) NatService(org.hyperledger.besu.nat.NatService) P2PNetwork(org.hyperledger.besu.ethereum.p2p.network.P2PNetwork) FilterManagerBuilder(org.hyperledger.besu.ethereum.api.jsonrpc.internal.filter.FilterManagerBuilder) PrivacyParameters(org.hyperledger.besu.ethereum.core.PrivacyParameters) JsonRpcMethodsFactory(org.hyperledger.besu.ethereum.api.jsonrpc.methods.JsonRpcMethodsFactory) ObservableMetricsSystem(org.hyperledger.besu.metrics.ObservableMetricsSystem) NoOpMetricsSystem(org.hyperledger.besu.metrics.noop.NoOpMetricsSystem) PoWMiningCoordinator(org.hyperledger.besu.ethereum.blockcreation.PoWMiningCoordinator) StubGenesisConfigOptions(org.hyperledger.besu.config.StubGenesisConfigOptions)

Aggregations

MetricsConfiguration (org.hyperledger.besu.metrics.prometheus.MetricsConfiguration)16 ObservableMetricsSystem (org.hyperledger.besu.metrics.ObservableMetricsSystem)10 Test (org.junit.Test)9 WebSocketConfiguration (org.hyperledger.besu.ethereum.api.jsonrpc.websocket.WebSocketConfiguration)8 Path (java.nio.file.Path)5 NoOpMetricsSystem (org.hyperledger.besu.metrics.noop.NoOpMetricsSystem)5 JsonRpcConfiguration (org.hyperledger.besu.ethereum.api.jsonrpc.JsonRpcConfiguration)4 EnodeURL (org.hyperledger.besu.plugin.data.EnodeURL)4 RpcEndpointServiceImpl (org.hyperledger.besu.services.RpcEndpointServiceImpl)4 ArrayList (java.util.ArrayList)3 EthNetworkConfig (org.hyperledger.besu.cli.config.EthNetworkConfig)3 GraphQLConfiguration (org.hyperledger.besu.ethereum.api.graphql.GraphQLConfiguration)3 JsonRpcIpcConfiguration (org.hyperledger.besu.ethereum.api.jsonrpc.ipc.JsonRpcIpcConfiguration)3 P2PNetwork (org.hyperledger.besu.ethereum.p2p.network.P2PNetwork)3 File (java.io.File)2 IOException (java.io.IOException)2 FilterManager (org.hyperledger.besu.ethereum.api.jsonrpc.internal.filter.FilterManager)2 FilterManagerBuilder (org.hyperledger.besu.ethereum.api.jsonrpc.internal.filter.FilterManagerBuilder)2 JsonRpcMethodsFactory (org.hyperledger.besu.ethereum.api.jsonrpc.methods.JsonRpcMethodsFactory)2 InMemoryKeyValueStorageProvider (org.hyperledger.besu.ethereum.core.InMemoryKeyValueStorageProvider)2