This is an automated email from the ASF dual-hosted git repository.

toulmean pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-tuweni.git


The following commit(s) were added to refs/heads/main by this push:
     new 5a22cb317 Expose an endpoint to see active peer info
     new 04932a8d8 Merge pull request #498 from atoulme/add_peer_info
5a22cb317 is described below

commit 5a22cb31747c6447899da7146f8e4a1d12bb74fd
Author: Antoine Toulme <anto...@lunar-ocean.com>
AuthorDate: Sat Jan 28 18:25:50 2023 -0800

    Expose an endpoint to see active peer info
---
 eth-client-ui/build.gradle                         |  1 +
 .../tuweni/ethclientui/controller/StateService.kt  | 39 ++++++++++++++++++++++
 2 files changed, 40 insertions(+)

diff --git a/eth-client-ui/build.gradle b/eth-client-ui/build.gradle
index b1f7d44d6..8151e0539 100644
--- a/eth-client-ui/build.gradle
+++ b/eth-client-ui/build.gradle
@@ -31,6 +31,7 @@ dependencies {
   implementation project(':config')
   implementation project(':concurrent-coroutines')
   implementation project(':crypto')
+  implementation project(':devp2p-eth')
   implementation project(':eth')
   implementation project(':eth-client')
   implementation project(':eth-repository')
diff --git 
a/eth-client-ui/src/main/kotlin/org/apache/tuweni/ethclientui/controller/StateService.kt
 
b/eth-client-ui/src/main/kotlin/org/apache/tuweni/ethclientui/controller/StateService.kt
index 0a6e99c24..cb42d1420 100644
--- 
a/eth-client-ui/src/main/kotlin/org/apache/tuweni/ethclientui/controller/StateService.kt
+++ 
b/eth-client-ui/src/main/kotlin/org/apache/tuweni/ethclientui/controller/StateService.kt
@@ -19,17 +19,32 @@ package org.apache.tuweni.ethclientui.controller
 import kotlinx.coroutines.runBlocking
 import org.apache.tuweni.bytes.Bytes32
 import org.apache.tuweni.ethclient.EthereumClient
+import org.apache.tuweni.peer.repository.Identity
 import org.apache.tuweni.units.bigints.UInt256
 import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.http.HttpStatus
 import org.springframework.http.MediaType
 import org.springframework.web.bind.annotation.GetMapping
+import org.springframework.web.bind.annotation.PathVariable
 import org.springframework.web.bind.annotation.RequestMapping
 import org.springframework.web.bind.annotation.RestController
+import org.springframework.web.server.ResponseStatusException
+import java.time.Instant
+import kotlin.streams.toList
 
 data class BlockHashAndNumber(val hash: Bytes32, val number: UInt256)
 
 data class State(val peerCounts: Map<String, Long>, val bestBlocks: 
Map<String, BlockHashAndNumber>)
 
+data class Peer(
+  val id: Identity,
+  val networkID: UInt256?,
+  val bestHash: Bytes32?,
+  val totalDifficulty: UInt256?,
+  val lastContacted: Instant?
+)
+data class Peers(val peers: List<Peer>)
+
 @RestController
 @RequestMapping("/rest/state")
 class StateService {
@@ -50,4 +65,28 @@ class StateService {
     }
     return State(mapOf(*peerCounts.toTypedArray()), 
mapOf(*bestBlocks.toTypedArray()))
   }
+
+  @GetMapping(value = ["{id}/peers"], produces = 
[MediaType.APPLICATION_JSON_VALUE])
+  fun getPeers(@PathVariable id: String): Peers {
+    val repository = client!!.peerRepositories[id]
+      ?: throw ResponseStatusException(
+        HttpStatus.NOT_FOUND,
+        "entity not found"
+      )
+    val peers = Peers(
+      repository.activeConnections().map {
+        it.peer().id()
+        val peer = Peer(
+          it.peer().id(),
+          it.status()?.networkID,
+          it.status()?.bestHash,
+          it.status()?.totalDifficulty,
+          it.peer().lastContacted()
+        )
+        peer
+      }.toList()
+    )
+
+    return peers
+  }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@tuweni.apache.org
For additional commands, e-mail: commits-h...@tuweni.apache.org

Reply via email to