Add trace logging to network map client (#2424)

* Add trace logging to network map client

* Add trace logging to network map client

* address PR issue

* address PR issue
This commit is contained in:
Patrick Kuo
2018-01-29 17:44:28 +00:00
committed by GitHub
parent 28e29c0873
commit 685ab4c9b0

View File

@ -11,6 +11,7 @@ import net.corda.core.serialization.serialize
import net.corda.core.utilities.contextLogger import net.corda.core.utilities.contextLogger
import net.corda.core.utilities.minutes import net.corda.core.utilities.minutes
import net.corda.core.utilities.seconds import net.corda.core.utilities.seconds
import net.corda.core.utilities.trace
import net.corda.node.services.api.NetworkMapCacheInternal import net.corda.node.services.api.NetworkMapCacheInternal
import net.corda.node.utilities.NamedThreadFactory import net.corda.node.utilities.NamedThreadFactory
import net.corda.nodeapi.internal.SignedNodeInfo import net.corda.nodeapi.internal.SignedNodeInfo
@ -29,10 +30,15 @@ import java.util.concurrent.Executors
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
class NetworkMapClient(compatibilityZoneURL: URL, private val trustedRoot: X509Certificate) { class NetworkMapClient(compatibilityZoneURL: URL, private val trustedRoot: X509Certificate) {
companion object {
private val logger = contextLogger()
}
private val networkMapUrl = URL("$compatibilityZoneURL/network-map") private val networkMapUrl = URL("$compatibilityZoneURL/network-map")
fun publish(signedNodeInfo: SignedNodeInfo) { fun publish(signedNodeInfo: SignedNodeInfo) {
val publishURL = URL("$networkMapUrl/publish") val publishURL = URL("$networkMapUrl/publish")
logger.trace { "Publishing NodeInfo to $publishURL." }
publishURL.openHttpConnection().apply { publishURL.openHttpConnection().apply {
doOutput = true doOutput = true
requestMethod = "POST" requestMethod = "POST"
@ -40,27 +46,41 @@ class NetworkMapClient(compatibilityZoneURL: URL, private val trustedRoot: X509C
outputStream.use { signedNodeInfo.serialize().open().copyTo(it) } outputStream.use { signedNodeInfo.serialize().open().copyTo(it) }
checkOkResponse() checkOkResponse()
} }
logger.trace { "Published NodeInfo to $publishURL successfully." }
} }
fun getNetworkMap(): NetworkMapResponse { fun getNetworkMap(): NetworkMapResponse {
logger.trace { "Fetching network map update from $networkMapUrl." }
val connection = networkMapUrl.openHttpConnection() val connection = networkMapUrl.openHttpConnection()
val signedNetworkMap = connection.responseAs<SignedDataWithCert<NetworkMap>>() val signedNetworkMap = connection.responseAs<SignedDataWithCert<NetworkMap>>()
val networkMap = signedNetworkMap.verifiedNetworkMapCert(trustedRoot) val networkMap = signedNetworkMap.verifiedNetworkMapCert(trustedRoot)
val timeout = CacheControl.parse(Headers.of(connection.headerFields.filterKeys { it != null }.mapValues { it.value[0] })).maxAgeSeconds().seconds val timeout = CacheControl.parse(Headers.of(connection.headerFields.filterKeys { it != null }.mapValues { it.value[0] })).maxAgeSeconds().seconds
logger.trace { "Fetched network map update from $networkMapUrl successfully, retrieved ${networkMap.nodeInfoHashes.size} node info hashes. Node Info hashes: ${networkMap.nodeInfoHashes.joinToString("\n")}" }
return NetworkMapResponse(networkMap, timeout) return NetworkMapResponse(networkMap, timeout)
} }
fun getNodeInfo(nodeInfoHash: SecureHash): NodeInfo { fun getNodeInfo(nodeInfoHash: SecureHash): NodeInfo {
return URL("$networkMapUrl/node-info/$nodeInfoHash").openHttpConnection().responseAs<SignedNodeInfo>().verified() val url = URL("$networkMapUrl/node-info/$nodeInfoHash")
logger.trace { "Fetching node info: '$nodeInfoHash' from $url." }
val verifiedNodeInfo = url.openHttpConnection().responseAs<SignedNodeInfo>().verified()
logger.trace { "Fetched node info: '$nodeInfoHash' successfully. Node Info: $verifiedNodeInfo" }
return verifiedNodeInfo
} }
fun getNetworkParameters(networkParameterHash: SecureHash): SignedDataWithCert<NetworkParameters> { fun getNetworkParameters(networkParameterHash: SecureHash): SignedDataWithCert<NetworkParameters> {
return URL("$networkMapUrl/network-parameters/$networkParameterHash").openHttpConnection().responseAs() val url = URL("$networkMapUrl/network-parameters/$networkParameterHash")
logger.trace { "Fetching network parameters: '$networkParameterHash' from $url." }
val networkParameter = url.openHttpConnection().responseAs<SignedDataWithCert<NetworkParameters>>()
logger.trace { "Fetched network parameters: '$networkParameterHash' successfully. Network Parameters: $networkParameter" }
return networkParameter
} }
fun myPublicHostname(): String { fun myPublicHostname(): String {
val connection = URL("$networkMapUrl/my-hostname").openHttpConnection() val url = URL("$networkMapUrl/my-hostname")
return connection.inputStream.bufferedReader().use(BufferedReader::readLine) logger.trace { "Resolving public hostname from '$url'." }
val hostName = url.openHttpConnection().inputStream.bufferedReader().use(BufferedReader::readLine)
logger.trace { "My public hostname is $hostName." }
return hostName
} }
} }