aboutsummaryrefslogtreecommitdiffstats
path: root/sources/hv-collector-configuration/src/main/kotlin/org/onap
diff options
context:
space:
mode:
authorkjaniak <kornel.janiak@nokia.com>2019-03-22 12:42:11 +0100
committerkjaniak <kornel.janiak@nokia.com>2019-03-25 16:49:12 +0100
commitf3d3e6745328b9ec8bb68dfbfb3d3d57aa47b36f (patch)
treed20b35091f1ffa7348bca6aaf5b690e17605d62f /sources/hv-collector-configuration/src/main/kotlin/org/onap
parentc979ea3bd6059cb067a84ba8e6f8d1cf96d61ba2 (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>
Diffstat (limited to 'sources/hv-collector-configuration/src/main/kotlin/org/onap')
-rw-r--r--sources/hv-collector-configuration/src/main/kotlin/org/onap/dcae/collectors/veshv/config/api/ConfigurationModule.kt6
-rw-r--r--sources/hv-collector-configuration/src/main/kotlin/org/onap/dcae/collectors/veshv/config/impl/ArgHvVesConfiguration.kt62
2 files changed, 63 insertions, 5 deletions
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) }
+
}
+
+