mirror of
https://github.com/corda/corda.git
synced 2024-12-29 09:18:58 +00:00
Graphite reporter polish (#465)
* Improve generation of default graphite prefix and add an sanitatization for all graphite prefixes (including warning if a custom name needs to be changed) * Convert graphite rates to per second * Code review: make it IPv6 safe
This commit is contained in:
parent
82df6b6896
commit
81801d4566
@ -14,16 +14,15 @@ import net.corda.core.internal.concurrent.thenMatch
|
|||||||
import net.corda.core.utilities.loggerFor
|
import net.corda.core.utilities.loggerFor
|
||||||
import net.corda.node.VersionInfo
|
import net.corda.node.VersionInfo
|
||||||
import net.corda.node.internal.cordapp.CordappLoader
|
import net.corda.node.internal.cordapp.CordappLoader
|
||||||
import net.corda.node.services.config.GraphiteOptions
|
|
||||||
import net.corda.node.services.config.NodeConfiguration
|
import net.corda.node.services.config.NodeConfiguration
|
||||||
import net.corda.node.services.config.RelayConfiguration
|
import net.corda.node.services.config.RelayConfiguration
|
||||||
import net.corda.node.services.statemachine.MultiThreadedStateMachineManager
|
import net.corda.node.services.statemachine.MultiThreadedStateMachineManager
|
||||||
import net.corda.node.services.statemachine.SingleThreadedStateMachineManager
|
|
||||||
import net.corda.node.services.statemachine.StateMachineManager
|
import net.corda.node.services.statemachine.StateMachineManager
|
||||||
import net.corda.nodeapi.internal.persistence.CordaPersistence
|
import net.corda.nodeapi.internal.persistence.CordaPersistence
|
||||||
import org.fusesource.jansi.Ansi
|
import org.fusesource.jansi.Ansi
|
||||||
import org.fusesource.jansi.AnsiConsole
|
import org.fusesource.jansi.AnsiConsole
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
|
import java.net.Inet6Address
|
||||||
import java.net.InetAddress
|
import java.net.InetAddress
|
||||||
import java.util.concurrent.ExecutorService
|
import java.util.concurrent.ExecutorService
|
||||||
import java.util.concurrent.Executors
|
import java.util.concurrent.Executors
|
||||||
@ -38,11 +37,18 @@ open class EnterpriseNode(configuration: NodeConfiguration,
|
|||||||
private val logger by lazy { loggerFor<EnterpriseNode>() }
|
private val logger by lazy { loggerFor<EnterpriseNode>() }
|
||||||
|
|
||||||
private fun defaultGraphitePrefix(legalName: CordaX500Name): String {
|
private fun defaultGraphitePrefix(legalName: CordaX500Name): String {
|
||||||
return legalName.organisation + "_" + InetAddress.getLocalHost().hostAddress.trim().replace(".", "_")
|
return (legalName.organisation + "_" + legalName.locality + "_" + legalName.country + "_" + Inet6Address.getLocalHost().hostAddress)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getGraphitePrefix(configuration: NodeConfiguration): String {
|
fun getGraphitePrefix(configuration: NodeConfiguration): String {
|
||||||
return configuration.graphiteOptions!!.prefix ?: defaultGraphitePrefix(configuration.myLegalName)
|
val customPrefix = configuration.graphiteOptions!!.prefix
|
||||||
|
// Create a graphite prefix stripping all non-allowed characteres
|
||||||
|
val graphiteName = (customPrefix ?: defaultGraphitePrefix(configuration.myLegalName))
|
||||||
|
.trim().replace(Regex("[^0-9a-zA-Z_]"), "_")
|
||||||
|
if (customPrefix != null && graphiteName != customPrefix) {
|
||||||
|
logger.warn("Invalid graphite prefix ${customPrefix} specified in config - got mangled to ${graphiteName}. Only letters, numbers and underscores are allowed")
|
||||||
|
}
|
||||||
|
return graphiteName
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -140,7 +146,7 @@ D""".trimStart()
|
|||||||
GraphiteReporter.forRegistry(metrics)
|
GraphiteReporter.forRegistry(metrics)
|
||||||
.prefixedWith(getGraphitePrefix(configuration))
|
.prefixedWith(getGraphitePrefix(configuration))
|
||||||
.convertDurationsTo(TimeUnit.MILLISECONDS)
|
.convertDurationsTo(TimeUnit.MILLISECONDS)
|
||||||
.convertRatesTo(TimeUnit.MINUTES)
|
.convertRatesTo(TimeUnit.SECONDS)
|
||||||
.filter(MetricFilter.ALL)
|
.filter(MetricFilter.ALL)
|
||||||
.build(PickledGraphite(configuration.graphiteOptions!!.server, configuration.graphiteOptions!!.port))
|
.build(PickledGraphite(configuration.graphiteOptions!!.server, configuration.graphiteOptions!!.port))
|
||||||
.start(configuration.graphiteOptions!!.sampleInvervallSeconds, TimeUnit.SECONDS)
|
.start(configuration.graphiteOptions!!.sampleInvervallSeconds, TimeUnit.SECONDS)
|
||||||
|
@ -0,0 +1,29 @@
|
|||||||
|
package net.corda.node.internal
|
||||||
|
|
||||||
|
import com.nhaarman.mockito_kotlin.mock
|
||||||
|
import com.nhaarman.mockito_kotlin.whenever
|
||||||
|
import net.corda.core.identity.CordaX500Name
|
||||||
|
import net.corda.node.services.config.GraphiteOptions
|
||||||
|
import net.corda.node.services.config.NodeConfiguration
|
||||||
|
import org.junit.Test
|
||||||
|
|
||||||
|
class EnterpriseNodeTest {
|
||||||
|
@Test
|
||||||
|
fun `Check sanitizing of graphite names`() {
|
||||||
|
checkReplacement("abc", "abc")
|
||||||
|
checkReplacement("abc.1.2", "abc_1_2")
|
||||||
|
checkReplacement("abc", "foo__bar_", "foo (bar)")
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
fun checkReplacement(orgname: String, expectedName: String, custom: String? = null) {
|
||||||
|
val nodeConfig = mock<NodeConfiguration>() {
|
||||||
|
whenever(it.myLegalName).thenReturn(CordaX500Name(orgname, "London", "GB"))
|
||||||
|
whenever(it.graphiteOptions).thenReturn(GraphiteOptions("server", 12345, custom))
|
||||||
|
}
|
||||||
|
|
||||||
|
val expectedPattern = if (custom == null) "${expectedName}_London_GB_\\d+_\\d+_\\d+_\\d+" else expectedName
|
||||||
|
val createdName = EnterpriseNode.getGraphitePrefix(nodeConfig)
|
||||||
|
assert(Regex(expectedPattern).matches(createdName), { "${createdName} did not match ${expectedPattern}" })
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user