mirror of
https://github.com/corda/corda.git
synced 2025-02-05 10:39:13 +00:00
Add some comments and clean up.
This commit is contained in:
parent
b0a8c3c305
commit
24ef98e5c4
@ -31,6 +31,7 @@ dependencies {
|
|||||||
runtime group: 'org.apache.jmeter', name: 'jorphan', version: "$jmVersion"
|
runtime group: 'org.apache.jmeter', name: 'jorphan', version: "$jmVersion"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Run JMeter as server process/agent on current host.
|
||||||
task(runServer, dependsOn: 'classes', type: JavaExec) {
|
task(runServer, dependsOn: 'classes', type: JavaExec) {
|
||||||
classpath = sourceSets.main.runtimeClasspath
|
classpath = sourceSets.main.runtimeClasspath
|
||||||
main = 'com.r3.corda.jmeter.Launcher'
|
main = 'com.r3.corda.jmeter.Launcher'
|
||||||
@ -43,6 +44,7 @@ task(runServer, dependsOn: 'classes', type: JavaExec) {
|
|||||||
"-s" ]
|
"-s" ]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Just start ssh tunnels, without JMeter.
|
||||||
task(runSsh, dependsOn: 'classes', type: JavaExec) {
|
task(runSsh, dependsOn: 'classes', type: JavaExec) {
|
||||||
classpath = sourceSets.main.runtimeClasspath
|
classpath = sourceSets.main.runtimeClasspath
|
||||||
main = 'com.r3.corda.jmeter.Ssh'
|
main = 'com.r3.corda.jmeter.Ssh'
|
||||||
@ -52,6 +54,12 @@ task(runSsh, dependsOn: 'classes', type: JavaExec) {
|
|||||||
standardInput = System.in
|
standardInput = System.in
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Run JMeter (by default the UI).
|
||||||
|
// Extra args can be passed by setting jmeterArgs (e.g. -n to run in non-UI mode).
|
||||||
|
// e.g. .gradlew tools:jmeter:run -PjmeterArgs="['-n']"
|
||||||
|
// ssh tunnels will be built from local host to remote hosts by specifying jmeterHosts
|
||||||
|
// e.g. ./gradlew tools:jmeter:run -PjmeterHosts="['perf-notary.corda.r3cev.com', 'perf-node-1.corda.r3cev.com']"
|
||||||
|
// Each host is paired with local host ports listed in remote_hosts of jmeter.properties
|
||||||
run {
|
run {
|
||||||
systemProperty "search_paths", project(':tools:jmeter').configurations.runtime.files.join(";")
|
systemProperty "search_paths", project(':tools:jmeter').configurations.runtime.files.join(";")
|
||||||
systemProperty "java.rmi.server.hostname", "localhost"
|
systemProperty "java.rmi.server.hostname", "localhost"
|
||||||
@ -59,6 +67,9 @@ run {
|
|||||||
// If you want to debug: jvmArgs += "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005"
|
// If you want to debug: jvmArgs += "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005"
|
||||||
args+= [ "-p", sourceSets.main.resources.getSrcDirs().first().getPath()+"/jmeter.properties",
|
args+= [ "-p", sourceSets.main.resources.getSrcDirs().first().getPath()+"/jmeter.properties",
|
||||||
"-d", sourceSets.main.resources.getSrcDirs().first().getPath() ]
|
"-d", sourceSets.main.resources.getSrcDirs().first().getPath() ]
|
||||||
|
if ( project.hasProperty("jmeterArgs") ) {
|
||||||
|
args+= Eval.me(jmeterHosts)
|
||||||
|
}
|
||||||
if ( project.hasProperty("jmeterHosts") ) {
|
if ( project.hasProperty("jmeterHosts") ) {
|
||||||
args+= "-Xssh"
|
args+= "-Xssh"
|
||||||
args+= Eval.me(jmeterHosts)
|
args+= Eval.me(jmeterHosts)
|
||||||
@ -76,7 +87,7 @@ jar {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// For building a runnable jar with no other dependencies for remote JMeter slave server, that has Corda code on classpath.
|
// For building a runnable jar with no other dependencies for remote JMeter slave server, that has Corda code on classpath.
|
||||||
// Run with: java -jar corda-jmeter-<version>.jar
|
// Run with: java -jar jmeter-corda-<version>.jar
|
||||||
// No additional args required but will be passed if specified.
|
// No additional args required but will be passed if specified.
|
||||||
task buildJMeterJAR(type: FatCapsule, dependsOn: 'jar') {
|
task buildJMeterJAR(type: FatCapsule, dependsOn: 'jar') {
|
||||||
applicationClass 'com.r3.corda.jmeter.Launcher'
|
applicationClass 'com.r3.corda.jmeter.Launcher'
|
||||||
|
@ -11,8 +11,10 @@ import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient
|
|||||||
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext
|
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext
|
||||||
import org.apache.jmeter.samplers.SampleResult
|
import org.apache.jmeter.samplers.SampleResult
|
||||||
|
|
||||||
|
/**
|
||||||
abstract class FlowSampler() : AbstractJavaSamplerClient() {
|
* Do most of the work for firing flow start requests via RPC at a Corda node.
|
||||||
|
*/
|
||||||
|
abstract class BaseFlowSampler() : AbstractJavaSamplerClient() {
|
||||||
companion object {
|
companion object {
|
||||||
val host = Argument("host", "localhost", "<meta>", "The remote network address (hostname or IP address) to connect to for RPC.")
|
val host = Argument("host", "localhost", "<meta>", "The remote network address (hostname or IP address) to connect to for RPC.")
|
||||||
val port = Argument("port", "10000", "<meta>", "The remote port to connect to for RPC.")
|
val port = Argument("port", "10000", "<meta>", "The remote port to connect to for RPC.")
|
@ -9,8 +9,10 @@ import net.corda.finance.flows.CashIssueFlow
|
|||||||
import org.apache.jmeter.config.Argument
|
import org.apache.jmeter.config.Argument
|
||||||
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext
|
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext
|
||||||
|
|
||||||
|
/**
|
||||||
abstract class AbstractSampler : FlowSampler() {
|
* A base sampler that looks up identities via RPC ready for starting flows, to be extended and specialised as required.
|
||||||
|
*/
|
||||||
|
abstract class AbstractSampler : BaseFlowSampler() {
|
||||||
lateinit var notaryIdentity: Party
|
lateinit var notaryIdentity: Party
|
||||||
|
|
||||||
companion object JMeterProperties {
|
companion object JMeterProperties {
|
||||||
@ -26,6 +28,11 @@ abstract class AbstractSampler : FlowSampler() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A sampler for calling CashIssueFlow.
|
||||||
|
*
|
||||||
|
* TODO: add more configurable parameters (reference, amount etc) if there is a requirement.
|
||||||
|
*/
|
||||||
class CashIssueSampler : AbstractSampler() {
|
class CashIssueSampler : AbstractSampler() {
|
||||||
override val additionalArgs: Set<Argument> = setOf(notary)
|
override val additionalArgs: Set<Argument> = setOf(notary)
|
||||||
|
|
||||||
|
@ -10,7 +10,9 @@ import java.io.BufferedReader
|
|||||||
import java.io.InputStreamReader
|
import java.io.InputStreamReader
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates SSH tunnels for remote controlling SSH servers/agents from the local host (via UI or headless).
|
||||||
|
*/
|
||||||
class Ssh {
|
class Ssh {
|
||||||
companion object {
|
companion object {
|
||||||
val log = LoggerFactory.getLogger(this::class.java)
|
val log = LoggerFactory.getLogger(this::class.java)
|
||||||
@ -28,7 +30,7 @@ class Ssh {
|
|||||||
val jmeterProps = loadProps("/jmeter.properties")
|
val jmeterProps = loadProps("/jmeter.properties")
|
||||||
// The port the JMeter remote agents call back to on this client host.
|
// The port the JMeter remote agents call back to on this client host.
|
||||||
val clientRmiLocalPort = jmeterProps.getProperty("client.rmi.localport").toInt()
|
val clientRmiLocalPort = jmeterProps.getProperty("client.rmi.localport").toInt()
|
||||||
// TODO: Where is this value used? Just on the remote agent to set up the RMI registry?
|
// Remote RMI registry port.
|
||||||
val serverRmiPort = jmeterProps.getProperty("server.rmi.port", "1099").toInt()
|
val serverRmiPort = jmeterProps.getProperty("server.rmi.port", "1099").toInt()
|
||||||
|
|
||||||
// Where JMeter driver will try to connect for remote agents (should all be localhost so can ssh tunnel).
|
// Where JMeter driver will try to connect for remote agents (should all be localhost so can ssh tunnel).
|
||||||
@ -47,7 +49,6 @@ class Ssh {
|
|||||||
val session = connectToHost(jsch, remoteHost, userName)
|
val session = connectToHost(jsch, remoteHost, userName)
|
||||||
sessions += session
|
sessions += session
|
||||||
|
|
||||||
// TODO: maybe check the local host is actually "localhost"?
|
|
||||||
// For tunnelling the RMI registry on the remote agent
|
// For tunnelling the RMI registry on the remote agent
|
||||||
// ssh ${remoteHostAndPort.host} -L 0.0.0.0:${localHostAndPort.port}:localhost:$serverRmiPort -N
|
// ssh ${remoteHostAndPort.host} -L 0.0.0.0:${localHostAndPort.port}:localhost:$serverRmiPort -N
|
||||||
createOutboundTunnel(session, NetworkHostAndPort("0.0.0.0", localHostAndPort.port), NetworkHostAndPort("localhost", serverRmiPort))
|
createOutboundTunnel(session, NetworkHostAndPort("0.0.0.0", localHostAndPort.port), NetworkHostAndPort("localhost", serverRmiPort))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user