mirror of https://github.com/hyperledger/besu
PAN-2485#Add net_services json rpc endpoint (#1295)
Implemented a JSON RPC method "net_services" that takes no input parameter and returns an object containing a list of enabled services (jsonrpc, p2p, ws, metrics) with "host" and "port", as show below; { "id":1, "jsonrpc": "2.0", "result": { "jsonrpc": {"host": "127.0.0.1", "port":3000}, "p2p":{"host": "127.0.0.1", "port":3000}, "ws":{"host": "127.0.0.1", "port":3000}, "metrics":{"host": "127.0.0.1", "port":3000} } } In case a service is not enabled, that will not be included in the list; { "id":1, "jsonrpc": "2.0", "result": {} } Fixes PAN-2485 Signed-off-by: Adrian Sutton <adrian.sutton@consensys.net>pull/2/head
parent
7cf8f0871e
commit
895e2cebbb
@ -0,0 +1,82 @@ |
||||
/* |
||||
* Copyright 2018 ConsenSys AG. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with |
||||
* the License. You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on |
||||
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the |
||||
* specific language governing permissions and limitations under the License. |
||||
*/ |
||||
package tech.pegasys.pantheon.ethereum.jsonrpc.internal.methods; |
||||
|
||||
import tech.pegasys.pantheon.ethereum.jsonrpc.JsonRpcConfiguration; |
||||
import tech.pegasys.pantheon.ethereum.jsonrpc.internal.JsonRpcRequest; |
||||
import tech.pegasys.pantheon.ethereum.jsonrpc.internal.response.JsonRpcResponse; |
||||
import tech.pegasys.pantheon.ethereum.jsonrpc.internal.response.JsonRpcSuccessResponse; |
||||
import tech.pegasys.pantheon.ethereum.jsonrpc.websocket.WebSocketConfiguration; |
||||
import tech.pegasys.pantheon.ethereum.p2p.api.P2PNetwork; |
||||
import tech.pegasys.pantheon.metrics.prometheus.MetricsConfiguration; |
||||
|
||||
import com.google.common.collect.ImmutableMap; |
||||
|
||||
public class NetServices implements JsonRpcMethod { |
||||
|
||||
private final ImmutableMap<String, ImmutableMap<String, String>> services; |
||||
|
||||
public NetServices( |
||||
final JsonRpcConfiguration jsonRpcConfiguration, |
||||
final WebSocketConfiguration webSocketConfiguration, |
||||
final P2PNetwork p2pNetwork, |
||||
final MetricsConfiguration metricsConfiguration) { |
||||
|
||||
ImmutableMap.Builder<String, ImmutableMap<String, String>> servicesMapBuilder = |
||||
ImmutableMap.builder(); |
||||
|
||||
if (jsonRpcConfiguration.isEnabled()) { |
||||
servicesMapBuilder.put( |
||||
"jsonrpc", |
||||
createServiceDetailsMap(jsonRpcConfiguration.getHost(), jsonRpcConfiguration.getPort())); |
||||
} |
||||
if (webSocketConfiguration.isEnabled()) { |
||||
servicesMapBuilder.put( |
||||
"ws", |
||||
createServiceDetailsMap( |
||||
webSocketConfiguration.getHost(), webSocketConfiguration.getPort())); |
||||
} |
||||
if (p2pNetwork.isP2pEnabled()) { |
||||
if (p2pNetwork.isP2pEnabled()) { |
||||
p2pNetwork |
||||
.getLocalEnode() |
||||
.ifPresent( |
||||
enode -> { |
||||
servicesMapBuilder.put( |
||||
"p2p", createServiceDetailsMap(enode.getIp(), enode.getListeningPort())); |
||||
}); |
||||
} |
||||
} |
||||
if (metricsConfiguration.isEnabled()) { |
||||
servicesMapBuilder.put( |
||||
"metrics", |
||||
createServiceDetailsMap(metricsConfiguration.getHost(), metricsConfiguration.getPort())); |
||||
} |
||||
|
||||
services = servicesMapBuilder.build(); |
||||
} |
||||
|
||||
@Override |
||||
public String getName() { |
||||
return "net_services"; |
||||
} |
||||
|
||||
@Override |
||||
public JsonRpcResponse response(final JsonRpcRequest req) { |
||||
return new JsonRpcSuccessResponse(req.getId(), services); |
||||
} |
||||
|
||||
private ImmutableMap<String, String> createServiceDetailsMap(final String host, final int port) { |
||||
return ImmutableMap.of("host", host, "port", String.valueOf(port)); |
||||
} |
||||
} |
Loading…
Reference in new issue