diff --git a/modules/loader/src/main/resources/iglu-client-embedded/com.snowplowanalytics.iglu/resolver-config/jsonschema/1-0-0 b/modules/loader/src/main/resources/iglu-client-embedded/com.snowplowanalytics.iglu/resolver-config/jsonschema/1-0-0 new file mode 100644 index 0000000..1a43dee --- /dev/null +++ b/modules/loader/src/main/resources/iglu-client-embedded/com.snowplowanalytics.iglu/resolver-config/jsonschema/1-0-0 @@ -0,0 +1,91 @@ +{ + "$schema": "http://iglucentral.com/schemas/com.snowplowanalytics.self-desc/schema/jsonschema/1-0-0#", + "description": "Schema for an Iglu resolver's configuration", + "self": { + "vendor": "com.snowplowanalytics.iglu", + "name": "resolver-config", + "format": "jsonschema", + "version": "1-0-0" + }, + + "type": "object", + + "properties": { + + "cacheSize": { + "type": "integer", + "minimum": 0 + }, + + "repositories": { + "type": "array", + "items": { + "type": "object", + + "properties": { + + "name": { + "type": "string" + }, + + "priority": { + "type": "integer" + }, + + "vendorPrefixes": { + "type": "array", + "items": { + "type": "string" + } + }, + + "connection": { + "type": "object", + "oneOf": [ + { + "properties": { + "embedded": { + "type": "object", + "properties": { + "path": { + "type": "string" + } + }, + "required": ["path"], + "additionalProperties": false + } + }, + "required": ["embedded"], + "additionalProperties": false + }, + { + "properties": { + "http": { + "type": "object", + "properties": { + "uri": { + "type": "string", + "format": "uri" + } + }, + "required": ["uri"], + "additionalProperties": false + } + }, + "required": ["http"], + "additionalProperties": false + } + ] + } + }, + "required": ["name", "priority", "vendorPrefixes", "connection"], + "additionalProperties": false + } + } + + }, + + "required": ["cacheSize", "repositories"], + "additionalProperties": false +} + diff --git a/modules/loader/src/main/resources/iglu-client-embedded/com.snowplowanalytics.iglu/resolver-config/jsonschema/1-0-1 b/modules/loader/src/main/resources/iglu-client-embedded/com.snowplowanalytics.iglu/resolver-config/jsonschema/1-0-1 new file mode 100644 index 0000000..c1c7882 --- /dev/null +++ b/modules/loader/src/main/resources/iglu-client-embedded/com.snowplowanalytics.iglu/resolver-config/jsonschema/1-0-1 @@ -0,0 +1,93 @@ +{ + "$schema": "http://iglucentral.com/schemas/com.snowplowanalytics.self-desc/schema/jsonschema/1-0-0#", + "description": "Schema for an Iglu resolver's configuration", + "self": { + "vendor": "com.snowplowanalytics.iglu", + "name": "resolver-config", + "format": "jsonschema", + "version": "1-0-1" + }, + + "type": "object", + + "properties": { + + "cacheSize": { + "type": "integer", + "minimum": 0 + }, + + "repositories": { + "type": "array", + "items": { + "type": "object", + + "properties": { + + "name": { + "type": "string" + }, + + "priority": { + "type": "integer" + }, + + "vendorPrefixes": { + "type": "array", + "items": { + "type": "string" + } + }, + + "connection": { + "type": "object", + "oneOf": [ + { + "properties": { + "embedded": { + "type": "object", + "properties": { + "path": { + "type": "string" + } + }, + "required": ["path"], + "additionalProperties": false + } + }, + "required": ["embedded"], + "additionalProperties": false + }, + { + "properties": { + "http": { + "type": "object", + "properties": { + "uri": { + "type": "string", + "format": "uri" + }, + "apikey": { + "type": ["string", "null"] + } + }, + "required": ["uri"], + "additionalProperties": false + } + }, + "required": ["http"], + "additionalProperties": false + } + ] + } + }, + "required": ["name", "priority", "vendorPrefixes", "connection"], + "additionalProperties": false + } + } + + }, + + "required": ["cacheSize", "repositories"], + "additionalProperties": false +} diff --git a/modules/loader/src/main/resources/iglu-client-embedded/com.snowplowanalytics.iglu/resolver-config/jsonschema/1-0-2 b/modules/loader/src/main/resources/iglu-client-embedded/com.snowplowanalytics.iglu/resolver-config/jsonschema/1-0-2 new file mode 100644 index 0000000..0b9129a --- /dev/null +++ b/modules/loader/src/main/resources/iglu-client-embedded/com.snowplowanalytics.iglu/resolver-config/jsonschema/1-0-2 @@ -0,0 +1,97 @@ +{ + "$schema": "http://iglucentral.com/schemas/com.snowplowanalytics.self-desc/schema/jsonschema/1-0-0#", + "description": "Schema for an Iglu resolver's configuration", + "self": { + "vendor": "com.snowplowanalytics.iglu", + "name": "resolver-config", + "format": "jsonschema", + "version": "1-0-2" + }, + + "type": "object", + + "properties": { + + "cacheSize": { + "type": "number" + }, + + "cacheTtl": { + "type": ["integer", "null"], + "minimum": 1 + }, + + "repositories": { + "type": "array", + "items": { + "type": "object", + + "properties": { + + "name": { + "type": "string" + }, + + "priority": { + "type": "number" + }, + + "vendorPrefixes": { + "type": "array", + "items": { + "type": "string" + } + }, + + "connection": { + "type": "object", + "oneOf": [ + { + "properties": { + "embedded": { + "type": "object", + "properties": { + "path": { + "type": "string" + } + }, + "required": ["path"], + "additionalProperties": false + } + }, + "required": ["embedded"], + "additionalProperties": false + }, + { + "properties": { + "http": { + "type": "object", + "properties": { + "uri": { + "type": "string", + "format": "uri" + }, + "apikey": { + "type": ["string", "null"] + } + }, + "required": ["uri"], + "additionalProperties": false + } + }, + "required": ["http"], + "additionalProperties": false + } + ] + } + }, + "required": ["name", "priority", "vendorPrefixes", "connection"], + "additionalProperties": false + } + } + + }, + + "required": ["cacheSize", "repositories"], + "additionalProperties": false +} diff --git a/modules/loader/src/main/resources/iglu-client-embedded/com.snowplowanalytics.iglu/resolver-config/jsonschema/1-0-3 b/modules/loader/src/main/resources/iglu-client-embedded/com.snowplowanalytics.iglu/resolver-config/jsonschema/1-0-3 new file mode 100644 index 0000000..199fa7a --- /dev/null +++ b/modules/loader/src/main/resources/iglu-client-embedded/com.snowplowanalytics.iglu/resolver-config/jsonschema/1-0-3 @@ -0,0 +1,97 @@ +{ + "$schema": "http://iglucentral.com/schemas/com.snowplowanalytics.self-desc/schema/jsonschema/1-0-0#", + "description": "Schema for an Iglu resolver's configuration", + "self": { + "vendor": "com.snowplowanalytics.iglu", + "name": "resolver-config", + "format": "jsonschema", + "version": "1-0-3" + }, + + "type": "object", + + "properties": { + + "cacheSize": { + "type": "number" + }, + + "cacheTtl": { + "type": ["integer", "null"], + "minimum": 0 + }, + + "repositories": { + "type": "array", + "items": { + "type": "object", + + "properties": { + + "name": { + "type": "string" + }, + + "priority": { + "type": "number" + }, + + "vendorPrefixes": { + "type": "array", + "items": { + "type": "string" + } + }, + + "connection": { + "type": "object", + "oneOf": [ + { + "properties": { + "embedded": { + "type": "object", + "properties": { + "path": { + "type": "string" + } + }, + "required": ["path"], + "additionalProperties": false + } + }, + "required": ["embedded"], + "additionalProperties": false + }, + { + "properties": { + "http": { + "type": "object", + "properties": { + "uri": { + "type": "string", + "format": "uri" + }, + "apikey": { + "type": ["string", "null"] + } + }, + "required": ["uri"], + "additionalProperties": false + } + }, + "required": ["http"], + "additionalProperties": false + } + ] + } + }, + "required": ["name", "priority", "vendorPrefixes", "connection"], + "additionalProperties": false + } + } + + }, + + "required": ["cacheSize", "repositories"], + "additionalProperties": false +} diff --git a/modules/loader/src/main/scala/com/snowplowanalytics/snowplow/postgres/config/Cli.scala b/modules/loader/src/main/scala/com/snowplowanalytics/snowplow/postgres/config/Cli.scala index d06a52c..ace488c 100644 --- a/modules/loader/src/main/scala/com/snowplowanalytics/snowplow/postgres/config/Cli.scala +++ b/modules/loader/src/main/scala/com/snowplowanalytics/snowplow/postgres/config/Cli.scala @@ -31,7 +31,11 @@ import io.circe.config.parser.{decode => hoconDecode} import scala.io.Source -import com.snowplowanalytics.iglu.client.Client +import com.snowplowanalytics.iglu.client.{CirceValidator, Client} +import com.snowplowanalytics.iglu.client.resolver.Resolver +import com.snowplowanalytics.iglu.client.resolver.registries.Registry +import com.snowplowanalytics.iglu.core.SelfDescribingData +import com.snowplowanalytics.iglu.core.circe.CirceIgluCodecs._ import com.snowplowanalytics.snowplow.badrows.Processor @@ -79,6 +83,8 @@ object Cli { private def fromRawConfig[F[_]: Async: Clock](rawConfig: RawConfig): EitherT[F, String, Cli[F]] = for { resolverJson <- loadJson(rawConfig.resolver).toEitherT[F] + resolverSdj <- EitherT.fromEither[F](resolverJson.as[SelfDescribingData[Json]]).leftMap(_.show) + _ <- Client[F, Json](Resolver(List(Registry.EmbeddedRegistry), None), CirceValidator).check(resolverSdj).leftMap(_.show) igluClient <- Client.parseDefault[F](resolverJson).leftMap(_.show) configHocon <- loadHocon(rawConfig.config).toEitherT[F] appConfig <- hoconDecode[LoaderConfig](configHocon).leftMap(e => s"Could not parse config: ${e.show}").toEitherT[F]