summaryrefslogtreecommitdiffstats
path: root/sources/hv-collector-commandline
diff options
context:
space:
mode:
authorJakub Dudycz <jakub.dudycz@nokia.com>2019-03-13 18:44:31 +0100
committerJakub Dudycz <jakub.dudycz@nokia.com>2019-03-20 14:20:03 +0100
commit30afcb56b0c6c4529fdaf68d7b061eee44d68d16 (patch)
tree34ce26e44546033fa3572738e8ae59362783147a /sources/hv-collector-commandline
parent189c70a48c24274fb7dd6cb910397a9a93233401 (diff)
Remove environment variables and program arguments
- Move all command line program arguments to json file. - Reorganize configuration classes and the way they are passed through application - Implement HV VES configuration stream - Create concrete configuration from partial one - Modify main HV-VES server starting pipeline Change-Id: I6cf874b6904ed768e4820b8132f5f760299c929e Signed-off-by: Jakub Dudycz <jakub.dudycz@nokia.com> Issue-ID: DCAEGEN2-1340
Diffstat (limited to 'sources/hv-collector-commandline')
-rw-r--r--sources/hv-collector-commandline/src/main/kotlin/org/onap/dcae/collectors/veshv/commandline/ArgBasedConfiguration.kt37
-rw-r--r--sources/hv-collector-commandline/src/main/kotlin/org/onap/dcae/collectors/veshv/commandline/CommandLineOption.kt169
-rw-r--r--sources/hv-collector-commandline/src/main/kotlin/org/onap/dcae/collectors/veshv/commandline/extensions.kt4
-rw-r--r--sources/hv-collector-commandline/src/test/kotlin/org/onap/dcae/collectors/veshv/commandline/CommandLineOptionTest.kt7
4 files changed, 93 insertions, 124 deletions
diff --git a/sources/hv-collector-commandline/src/main/kotlin/org/onap/dcae/collectors/veshv/commandline/ArgBasedConfiguration.kt b/sources/hv-collector-commandline/src/main/kotlin/org/onap/dcae/collectors/veshv/commandline/ArgBasedConfiguration.kt
index 1e45c923..93d42f96 100644
--- a/sources/hv-collector-commandline/src/main/kotlin/org/onap/dcae/collectors/veshv/commandline/ArgBasedConfiguration.kt
+++ b/sources/hv-collector-commandline/src/main/kotlin/org/onap/dcae/collectors/veshv/commandline/ArgBasedConfiguration.kt
@@ -33,25 +33,24 @@ import java.nio.file.Paths
abstract class ArgBasedConfiguration<T>(private val parser: CommandLineParser) {
abstract val cmdLineOptionsList: List<CommandLineOption>
- fun parse(args: Array<out String>): Either<WrongArgumentError, T> {
- val parseResult = Try {
- val commandLineOptions = cmdLineOptionsList.map { it.option }.fold(Options(), Options::addOption)
- parser.parse(commandLineOptions, args)
- }
- return parseResult
- .toEither()
- .mapLeft { ex -> WrongArgumentError(ex, cmdLineOptionsList) }
- .map(this::getConfiguration)
- .flatMap {
- it.toEither {
- WrongArgumentError(
- message = "Unexpected error when parsing command line arguments",
- cmdLineOptionsList = cmdLineOptionsList)
- }
- }
- }
-
protected abstract fun getConfiguration(cmdLine: CommandLine): Option<T>
- protected fun stringPathToPath(path: String): Path = Paths.get(File(path).toURI())
+ fun parse(args: Array<out String>): Either<WrongArgumentError, T> =
+ Try { parseArgumentsArray(args) }
+ .toEither()
+ .mapLeft { WrongArgumentError(it, cmdLineOptionsList) }
+ .map(this::getConfiguration)
+ .flatMap {
+ it.toEither {
+ WrongArgumentError(
+ message = "Unexpected error when parsing command line arguments",
+ cmdLineOptionsList = cmdLineOptionsList)
+ }
+ }
+
+ private fun parseArgumentsArray(args: Array<out String>) =
+ cmdLineOptionsList
+ .map { it.option }
+ .fold(Options(), Options::addOption)
+ .let { parser.parse(it, args) }
}
diff --git a/sources/hv-collector-commandline/src/main/kotlin/org/onap/dcae/collectors/veshv/commandline/CommandLineOption.kt b/sources/hv-collector-commandline/src/main/kotlin/org/onap/dcae/collectors/veshv/commandline/CommandLineOption.kt
index 31849215..1c1a355b 100644
--- a/sources/hv-collector-commandline/src/main/kotlin/org/onap/dcae/collectors/veshv/commandline/CommandLineOption.kt
+++ b/sources/hv-collector-commandline/src/main/kotlin/org/onap/dcae/collectors/veshv/commandline/CommandLineOption.kt
@@ -24,78 +24,72 @@ import org.apache.commons.cli.Option
enum class CommandLineOption(val option: Option, val required: Boolean = false) {
HEALTH_CHECK_API_PORT(
- Option.builder("H")
- .longOpt("health-check-api-port")
- .hasArg()
- .desc("Health check rest api listen port")
- .build()
- ),
- LISTEN_PORT(
- Option.builder("p")
- .longOpt("listen-port")
- .hasArg()
- .desc("Listen port")
- .build(),
- required = true
+ Option.builder("H")
+ .longOpt("health-check-api-port")
+ .hasArg()
+ .desc("Health check rest api listen port")
+ .build()
),
- CONFIGURATION_FIRST_REQUEST_DELAY(
- Option.builder("d")
- .longOpt("first-request-delay")
- .hasArg()
- .desc("Delay of first request for configuration in seconds")
- .build()
+ CONFIGURATION_FILE(
+ Option.builder("c")
+ .longOpt("configuration-file")
+ .hasArg()
+ .desc("Json file containing HV-VES configuration")
+ .build(),
+ required = true
),
- CONFIGURATION_REQUEST_INTERVAL(
- Option.builder("I")
- .longOpt("request-interval")
- .hasArg()
- .desc("Interval of configuration requests in seconds")
- .build()
+ LISTEN_PORT(
+ Option.builder("p")
+ .longOpt("listen-port")
+ .hasArg()
+ .desc("Listen port")
+ .build(),
+ required = true
),
VES_HV_PORT(
- Option.builder("v")
- .longOpt("ves-port")
- .hasArg()
- .desc("VesHvCollector port")
- .build(),
- required = true
+ Option.builder("v")
+ .longOpt("ves-port")
+ .hasArg()
+ .desc("VesHvCollector port")
+ .build(),
+ required = true
),
VES_HV_HOST(
- Option.builder("h")
- .longOpt("ves-host")
- .hasArg()
- .desc("VesHvCollector host")
- .build(),
- required = true
+ Option.builder("h")
+ .longOpt("ves-host")
+ .hasArg()
+ .desc("VesHvCollector host")
+ .build(),
+ required = true
),
KAFKA_SERVERS(
- Option.builder("s")
- .longOpt("kafka-bootstrap-servers")
- .hasArg()
- .desc("Comma-separated Kafka bootstrap servers in <host>:<port> format")
- .build(),
- required = true
+ Option.builder("s")
+ .longOpt("kafka-bootstrap-servers")
+ .hasArg()
+ .desc("Comma-separated Kafka bootstrap servers in <host>:<port> format")
+ .build(),
+ required = true
),
KAFKA_TOPICS(
- Option.builder("f")
- .longOpt("kafka-topics")
- .hasArg()
- .desc("Comma-separated Kafka topics")
- .build(),
- required = true
+ Option.builder("f")
+ .longOpt("kafka-topics")
+ .hasArg()
+ .desc("Comma-separated Kafka topics")
+ .build(),
+ required = true
),
SSL_DISABLE(
- Option.builder("l")
- .longOpt("ssl-disable")
- .desc("Disable SSL encryption")
- .build()
+ Option.builder("l")
+ .longOpt("ssl-disable")
+ .desc("Disable SSL encryption")
+ .build()
),
KEY_STORE_FILE(
- Option.builder("k")
- .longOpt("key-store")
- .hasArg()
- .desc("Key store in PKCS12 format")
- .build()
+ Option.builder("k")
+ .longOpt("key-store")
+ .hasArg()
+ .desc("Key store in PKCS12 format")
+ .build()
),
KEY_STORE_PASSWORD(
Option.builder("kp")
@@ -105,54 +99,31 @@ enum class CommandLineOption(val option: Option, val required: Boolean = false)
.build()
),
TRUST_STORE_FILE(
- Option.builder("t")
- .longOpt("trust-store")
- .hasArg()
- .desc("File with trusted certificate bundle in PKCS12 format")
- .build()
+ Option.builder("t")
+ .longOpt("trust-store")
+ .hasArg()
+ .desc("File with trusted certificate bundle in PKCS12 format")
+ .build()
),
TRUST_STORE_PASSWORD(
- Option.builder("tp")
- .longOpt("trust-store-password")
- .hasArg()
- .desc("Trust store password")
- .build()
- ),
- IDLE_TIMEOUT_SEC(
- Option.builder("i")
- .longOpt("idle-timeout-sec")
- .hasArg()
- .desc(
- """Idle timeout for remote hosts. After given time without any data exchange the
- |connection might be closed.""".trimMargin()
- )
- .build()
+ Option.builder("tp")
+ .longOpt("trust-store-password")
+ .hasArg()
+ .desc("Trust store password")
+ .build()
),
MAXIMUM_PAYLOAD_SIZE_BYTES(
- Option.builder("m")
- .longOpt("max-payload-size")
- .hasArg()
- .desc("Maximum supported payload size in bytes")
- .build()
- ),
- LOG_LEVEL(
- Option.builder("ll")
- .longOpt("log-level")
- .hasArg()
- .desc("Log level")
- .build()
- ),
- DUMMY_MODE(
- Option.builder("u")
- .longOpt("dummy")
- .desc("If present will start in dummy mode (dummy external services)")
- .build()
+ Option.builder("m")
+ .longOpt("max-payload-size")
+ .hasArg()
+ .desc("Maximum supported payload size in bytes")
+ .build()
);
fun environmentVariableName(prefix: String = DEFAULT_ENV_PREFIX): String =
- option.longOpt.toUpperCase().replace('-', '_').let { mainPart ->
- "${prefix}_${mainPart}"
- }
+ option.longOpt.toUpperCase().replace('-', '_').let { mainPart ->
+ "${prefix}_${mainPart}"
+ }
companion object {
private const val DEFAULT_ENV_PREFIX = "VESHV"
diff --git a/sources/hv-collector-commandline/src/main/kotlin/org/onap/dcae/collectors/veshv/commandline/extensions.kt b/sources/hv-collector-commandline/src/main/kotlin/org/onap/dcae/collectors/veshv/commandline/extensions.kt
index c0fbcde6..48cac69a 100644
--- a/sources/hv-collector-commandline/src/main/kotlin/org/onap/dcae/collectors/veshv/commandline/extensions.kt
+++ b/sources/hv-collector-commandline/src/main/kotlin/org/onap/dcae/collectors/veshv/commandline/extensions.kt
@@ -32,13 +32,13 @@ import org.onap.dcae.collectors.veshv.utils.arrow.fromNullablesChain
* @since June 2018
*/
+val handleWrongArgumentErrorCurried = ::handleWrongArgumentError.curried()
+
fun handleWrongArgumentError(programName: String, err: WrongArgumentError): IO<Unit> = IO {
err.printMessage()
err.printHelp(programName)
}.flatMap { ExitFailure(2).io() }
-val handleWrongArgumentErrorCurried = ::handleWrongArgumentError.curried()
-
fun CommandLine.longValue(cmdLineOpt: CommandLineOption, default: Long): Long =
longValue(cmdLineOpt).getOrElse { default }
diff --git a/sources/hv-collector-commandline/src/test/kotlin/org/onap/dcae/collectors/veshv/commandline/CommandLineOptionTest.kt b/sources/hv-collector-commandline/src/test/kotlin/org/onap/dcae/collectors/veshv/commandline/CommandLineOptionTest.kt
index 736710ff..6614e77f 100644
--- a/sources/hv-collector-commandline/src/test/kotlin/org/onap/dcae/collectors/veshv/commandline/CommandLineOptionTest.kt
+++ b/sources/hv-collector-commandline/src/test/kotlin/org/onap/dcae/collectors/veshv/commandline/CommandLineOptionTest.kt
@@ -25,8 +25,7 @@ import org.jetbrains.spek.api.dsl.describe
import org.jetbrains.spek.api.dsl.given
import org.jetbrains.spek.api.dsl.it
import org.jetbrains.spek.api.dsl.on
-import org.onap.dcae.collectors.veshv.commandline.CommandLineOption.DUMMY_MODE
-import org.onap.dcae.collectors.veshv.commandline.CommandLineOption.KAFKA_SERVERS
+import org.onap.dcae.collectors.veshv.commandline.CommandLineOption.*
/**
* @author Piotr Jaszczyk <piotr.jaszczyk@nokia.com>
@@ -49,13 +48,13 @@ class CommandLineOptionTest : Spek({
}
given("sample option without prefix") {
- val opt = DUMMY_MODE
+ val opt = SSL_DISABLE
on("calling environmentVariableName") {
val result = opt.environmentVariableName()
it("should return prefixed upper snake cased long option name") {
- assertThat(result).isEqualTo("VESHV_DUMMY")
+ assertThat(result).isEqualTo("VESHV_SSL_DISABLE")
}
}
}