From 83586a996846e73ba66f0abc58400c5c2be9e5d2 Mon Sep 17 00:00:00 2001 From: Nikita Kovaliov Date: Fri, 20 Jan 2017 10:23:18 +0300 Subject: [PATCH] iss #24: influxdb config reader --- config/ambient7.conf | 16 ++++++ .../core/config/InfluxDbConfigReader.scala | 50 +++++++++++++++++-- 2 files changed, 63 insertions(+), 3 deletions(-) diff --git a/config/ambient7.conf b/config/ambient7.conf index 8f36c27..620fbb8 100644 --- a/config/ambient7.conf +++ b/config/ambient7.conf @@ -5,6 +5,22 @@ db { password = "" } +influx-db { + database = "ambient7" + + baseurl = "http://localhost:8086/" + user = "" + password = "" + + // optional readonly access +// readonly { +// baseurl = "http://localhost:8086/" +// user = "" +// password = "" +// } + +} + co2-devices = [ { id = "main" diff --git a/core/src/main/scala/ru/maizy/ambient7/core/config/InfluxDbConfigReader.scala b/core/src/main/scala/ru/maizy/ambient7/core/config/InfluxDbConfigReader.scala index 2547c25..25d4ac4 100644 --- a/core/src/main/scala/ru/maizy/ambient7/core/config/InfluxDbConfigReader.scala +++ b/core/src/main/scala/ru/maizy/ambient7/core/config/InfluxDbConfigReader.scala @@ -25,11 +25,19 @@ trait InfluxDbConfigReader extends UniversalConfigReader { .valueName { s"<${Defaults.INFLUXDB_BASEURL}>" } .action { (value, opts) => influxDbOpts(opts)(_.copy(baseUrl = value)) } + appendSimpleOptionalConfigRule[String]("influxdb.baseurl") { (value, opts) => + influxDbOpts(opts)(_.copy(baseUrl = value)) + } + cliParser.opt[String]("influxdb-database") .action { (value, opts) => influxDbOpts(opts)(_.copy(database = Some(value))) } .required() + appendSimpleOptionalConfigRule[String]("influxdb.database") { (value, opts) => + influxDbOpts(opts)(_.copy(baseUrl = value)) + } + appendInfluxDbOptsCheck({ opts => Either.cond(opts.database.isDefined, (), ParsingError.withMessage("influxdb-database is required")) }) @@ -38,6 +46,10 @@ trait InfluxDbConfigReader extends UniversalConfigReader { cliParser.opt[String]("influxdb-user") .action { (value, opts) => influxDbOpts(opts)(_.copy(user = Some(value))) } + appendSimpleOptionalConfigRule[String]("influxdb.user") { (value, opts) => + influxDbOpts(opts)(_.copy(user = Some(value))) + } + appendInfluxDbOptsCheck({ opts => Either.cond(opts.user.isDefined, (), ParsingError.withMessage("influxdb-user is required")) }) @@ -46,6 +58,10 @@ trait InfluxDbConfigReader extends UniversalConfigReader { cliParser.opt[String]("influxdb-password") .action { (value, opts) => influxDbOpts(opts)(_.copy(password = Some(value))) } + appendSimpleOptionalConfigRule[String]("influxdb.password") { (value, opts) => + influxDbOpts(opts)(_.copy(password = Some(value))) + } + appendInfluxDbOptsCheck({ opts => Either.cond(opts.password.isDefined, (), ParsingError.withMessage("influxdb-password is required")) }) @@ -55,11 +71,27 @@ trait InfluxDbConfigReader extends UniversalConfigReader { .action { (value, opts) => influxDbOpts(opts)(_.copy(readonlyBaseUrl = Some(value))) } .text("By default --influxdb-baseurl") + appendSimpleOptionalConfigRule[String]("influxdb.readonly.baseurl") { (value, opts) => + influxDbOpts(opts)(_.copy(readonlyBaseUrl = Some(value))) + } + + appendInfluxDbOptsCheck({ + opts => Either.cond( + opts.readonlyBaseUrl.isDefined, + (), + ParsingError.withMessage("influxdb-readonly-baseurl is required") + ) + }) + cliParser.opt[String]("influxdb-readonly-user") .action { (value, opts) => influxDbOpts(opts)(_.copy(readonlyUser = Some(value))) } .text("By default --influxdb-user") + appendSimpleOptionalConfigRule[String]("influxdb.readonly.user") { (value, opts) => + influxDbOpts(opts)(_.copy(readonlyUser = Some(value))) + } + appendInfluxDbOptsCheck({ opts => Either.cond( opts.readonlyUser.isDefined, @@ -73,6 +105,10 @@ trait InfluxDbConfigReader extends UniversalConfigReader { .action { (value, opts) => influxDbOpts(opts)(_.copy(readonlyPassword = Some(value))) } .text("By default --influxdb-password") + appendSimpleOptionalConfigRule[String]("influxdb.readonly.password") { (value, opts) => + influxDbOpts(opts)(_.copy(readonlyPassword = Some(value))) + } + appendInfluxDbOptsCheck({ opts => Either.cond( opts.readonlyPassword.isDefined, @@ -81,9 +117,17 @@ trait InfluxDbConfigReader extends UniversalConfigReader { ) }) - // TODO: uni config rules - - // TODO: config postprocessors + appendPostprocessor { opts => + Right( + influxDbOpts(opts){ influxdbOpts => + influxdbOpts.copy( + readonlyBaseUrl = influxdbOpts.readonlyBaseUrl orElse Some(influxdbOpts.baseUrl), + readonlyUser = influxdbOpts.readonlyUser orElse influxdbOpts.user, + readonlyPassword = influxdbOpts.readonlyPassword orElse influxdbOpts.password + ) + } + ) + } } }