diff options
author | kjaniak <kornel.janiak@nokia.com> | 2019-03-22 12:42:11 +0100 |
---|---|---|
committer | kjaniak <kornel.janiak@nokia.com> | 2019-03-25 16:49:12 +0100 |
commit | f3d3e6745328b9ec8bb68dfbfb3d3d57aa47b36f (patch) | |
tree | d20b35091f1ffa7348bca6aaf5b690e17605d62f | |
parent | c979ea3bd6059cb067a84ba8e6f8d1cf96d61ba2 (diff) |
Read HV-VES healtcheck api port from cmd line
Issue-ID: DCAEGEN2-1364
Change-Id: I17c38d7397174fadc7d382cfa3dd0b3a7f4d97ff
Signed-off-by: kjaniak <kornel.janiak@nokia.com>
6 files changed, 78 insertions, 14 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 93d42f96..d8c83ea0 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 @@ -26,9 +26,6 @@ import arrow.core.flatMap import org.apache.commons.cli.CommandLine import org.apache.commons.cli.CommandLineParser import org.apache.commons.cli.Options -import java.io.File -import java.nio.file.Path -import java.nio.file.Paths abstract class ArgBasedConfiguration<T>(private val parser: CommandLineParser) { abstract val cmdLineOptionsList: List<CommandLineOption> diff --git a/sources/hv-collector-configuration/src/main/kotlin/org/onap/dcae/collectors/veshv/config/api/ConfigurationModule.kt b/sources/hv-collector-configuration/src/main/kotlin/org/onap/dcae/collectors/veshv/config/api/ConfigurationModule.kt index 9f8c552b..1b9248b5 100644 --- a/sources/hv-collector-configuration/src/main/kotlin/org/onap/dcae/collectors/veshv/config/api/ConfigurationModule.kt +++ b/sources/hv-collector-configuration/src/main/kotlin/org/onap/dcae/collectors/veshv/config/api/ConfigurationModule.kt @@ -19,6 +19,7 @@ */ package org.onap.dcae.collectors.veshv.config.api +import arrow.core.getOrElse import org.onap.dcae.collectors.veshv.config.api.model.HvVesConfiguration import org.onap.dcae.collectors.veshv.config.api.model.MissingArgumentException import org.onap.dcae.collectors.veshv.config.api.model.ValidationException @@ -29,13 +30,16 @@ import org.onap.dcae.collectors.veshv.utils.arrow.throwOnLeft import reactor.core.publisher.Flux class ConfigurationModule { + private val DEFAULT_HEALTHCHECK_PORT: Int = 6060 private val cmd = ArgHvVesConfiguration() private val configReader = FileConfigurationReader() private val configValidator = ConfigurationValidator() + fun healthCheckPort(args: Array<String>): Int = cmd.parseToInt(args).getOrElse { DEFAULT_HEALTHCHECK_PORT } + fun hvVesConfigurationUpdates(args: Array<String>): Flux<HvVesConfiguration> = - Flux.just(cmd.parse(args)) + Flux.just(cmd.parseToFile(args)) .throwOnLeft { MissingArgumentException(it.message, it.cause) } .map { it.reader().use(configReader::loadConfig) } .map { configValidator.validate(it) } diff --git a/sources/hv-collector-configuration/src/main/kotlin/org/onap/dcae/collectors/veshv/config/impl/ArgHvVesConfiguration.kt b/sources/hv-collector-configuration/src/main/kotlin/org/onap/dcae/collectors/veshv/config/impl/ArgHvVesConfiguration.kt index 9587d5b0..71ed509b 100644 --- a/sources/hv-collector-configuration/src/main/kotlin/org/onap/dcae/collectors/veshv/config/impl/ArgHvVesConfiguration.kt +++ b/sources/hv-collector-configuration/src/main/kotlin/org/onap/dcae/collectors/veshv/config/impl/ArgHvVesConfiguration.kt @@ -19,18 +19,72 @@ */ package org.onap.dcae.collectors.veshv.config.impl +import arrow.core.Either import arrow.core.Option +import arrow.core.Try +import arrow.core.flatMap import org.apache.commons.cli.CommandLine +import org.apache.commons.cli.CommandLineParser import org.apache.commons.cli.DefaultParser -import org.onap.dcae.collectors.veshv.commandline.ArgBasedConfiguration +import org.apache.commons.cli.Options import org.onap.dcae.collectors.veshv.commandline.CommandLineOption.CONFIGURATION_FILE +import org.onap.dcae.collectors.veshv.commandline.CommandLineOption.HEALTH_CHECK_API_PORT +import org.onap.dcae.collectors.veshv.commandline.WrongArgumentError +import org.onap.dcae.collectors.veshv.commandline.intValue import org.onap.dcae.collectors.veshv.commandline.stringValue import java.io.File -internal class ArgHvVesConfiguration : ArgBasedConfiguration<File>(DefaultParser()) { - override val cmdLineOptionsList = listOf(CONFIGURATION_FILE) +class ArgHvVesConfiguration(private val parser: CommandLineParser = DefaultParser()) { + val cmdLineOptionsList = listOf(CONFIGURATION_FILE, HEALTH_CHECK_API_PORT) - override fun getConfiguration(cmdLine: CommandLine): Option<File> = + fun getConfiguration(cmdLine: CommandLine): Option<File> = cmdLine.stringValue(CONFIGURATION_FILE).map(::File) + fun getHealthcheckPort(cmdLine: CommandLine): Option<Int> = + cmdLine.intValue(HEALTH_CHECK_API_PORT) + + lateinit var parsingResult: CommandLine + + fun parseToFile(args: Array<out String>): Either<WrongArgumentError, File> { + parseIfEmpty(args) + return Try { parsingResult }.toEither() + .mapLeft { WrongArgumentError(it, cmdLineOptionsList) } + .map(this::getConfiguration) + .flatMap { + it.toEither { + WrongArgumentError( + message = "Unexpected error when parsing command line arguments", + cmdLineOptionsList = cmdLineOptionsList) + } + } + } + + fun parseToInt(args: Array<out String>): Either<WrongArgumentError, Int> { + parseIfEmpty(args) + return Try { parsingResult }.toEither() + .mapLeft { WrongArgumentError(it, cmdLineOptionsList) } + .map(this::getHealthcheckPort) + .flatMap { + it.toEither { + WrongArgumentError( + message = "Unexpected error when parsing command line arguments", + cmdLineOptionsList = cmdLineOptionsList) + } + } + } + + private fun parseIfEmpty(args: Array<out String>) { + if (!this::parsingResult.isInitialized) { + parsingResult = parseArgumentsArray(args) + } + } + + 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-configuration/src/test/kotlin/org/onap/dcae/collectors/veshv/config/impl/ArgHvVesConfigurationTest.kt b/sources/hv-collector-configuration/src/test/kotlin/org/onap/dcae/collectors/veshv/config/impl/ArgHvVesConfigurationTest.kt index dbe757c4..6fe76958 100644 --- a/sources/hv-collector-configuration/src/test/kotlin/org/onap/dcae/collectors/veshv/config/impl/ArgHvVesConfigurationTest.kt +++ b/sources/hv-collector-configuration/src/test/kotlin/org/onap/dcae/collectors/veshv/config/impl/ArgHvVesConfigurationTest.kt @@ -19,6 +19,7 @@ */ package org.onap.dcae.collectors.veshv.config.impl +import arrow.core.identity import org.assertj.core.api.Assertions.assertThat import org.jetbrains.spek.api.Spek import org.jetbrains.spek.api.dsl.describe @@ -27,8 +28,6 @@ import org.jetbrains.spek.api.dsl.it import org.jetbrains.spek.api.dsl.on import org.onap.dcae.collectors.veshv.commandline.WrongArgumentError import org.onap.dcae.collectors.veshv.tests.utils.absoluteResourcePath -import org.onap.dcae.collectors.veshv.tests.utils.parseExpectingFailure -import org.onap.dcae.collectors.veshv.tests.utils.parseExpectingSuccess import java.io.File /** @@ -70,4 +69,15 @@ object ArgVesHvConfigurationTest : Spek({ } } } -})
\ No newline at end of file +}) + +fun ArgHvVesConfiguration.parseExpectingSuccess(vararg cmdLine: String): File = + parseToFile(cmdLine).fold( + { throw AssertionError("Parsing result should be present") }, + ::identity + ) + +fun ArgHvVesConfiguration.parseExpectingFailure(vararg cmdLine: String): WrongArgumentError = + parseToFile(cmdLine).fold( + ::identity + ) { throw AssertionError("parsing should have failed") } diff --git a/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/main.kt b/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/main.kt index c8a3c013..511f5ee3 100644 --- a/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/main.kt +++ b/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/main.kt @@ -40,7 +40,7 @@ private val logger = Logger("$VES_HV_PACKAGE.main") private val hvVesServer = AtomicReference<ServerHandle>() fun main(args: Array<String>) { - HealthCheckServer.start() + HealthCheckServer.start(ConfigurationModule().healthCheckPort(args)) ConfigurationModule() .hvVesConfigurationUpdates(args) .publishOn(Schedulers.single(Schedulers.elastic())) diff --git a/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/servers/HealthCheckServer.kt b/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/servers/HealthCheckServer.kt index bc284d08..9b58dcc9 100644 --- a/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/servers/HealthCheckServer.kt +++ b/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/servers/HealthCheckServer.kt @@ -34,10 +34,9 @@ import java.net.InetSocketAddress */ object HealthCheckServer { - private const val DEFAULT_HEALTHCHECK_PORT = 6060 private val logger = Logger(HealthCheckServer::class) - fun start(port: Int = DEFAULT_HEALTHCHECK_PORT) = + fun start(port: Int) = createHealthCheckServer(port) .start() .then(::logServerStarted) |