diff --git a/schemas/vector/metatileQueuePopulator/full/v1.schema.json b/schemas/vector/metatileQueuePopulator/full/v1.schema.json new file mode 100644 index 00000000..f9466b99 --- /dev/null +++ b/schemas/vector/metatileQueuePopulator/full/v1.schema.json @@ -0,0 +1,45 @@ +{ + "$id": "https://mapcolonies.com/vector/metatileQueuePopulator/full/v1", + "type": "object", + "title": "metatileQueuePopulatorFullV1", + "description": "Metatile Queue Populator's full schema", + "unevaluatedProperties": false, + "allOf": [ + { + "$ref": "https://mapcolonies.com/vector/metatileQueuePopulator/shared/v1" + }, + { + "type": "object", + "required": ["db"], + "properties": { + "db": { + "$ref": "https://mapcolonies.com/common/db/full/v2" + } + } + }, + { + "$ref": "#/definitions/appSchema" + } + ], + "definitions": { + "appSchema": { + "type": "object", + "required": ["app"], + "properties": { + "app": { + "description": "app configuration", + "type": "object", + "default": {}, + "properties": { + "projectName": { + "type": "string", + "description": "The name of the project", + "x-env-value": "APP_PROJECT_NAME" + } + }, + "required": ["projectName"] + } + } + } + } +} diff --git a/schemas/vector/metatileQueuePopulator/shared/v1.configs.json b/schemas/vector/metatileQueuePopulator/shared/v1.configs.json new file mode 100644 index 00000000..3e73041e --- /dev/null +++ b/schemas/vector/metatileQueuePopulator/shared/v1.configs.json @@ -0,0 +1,71 @@ +[ + { + "name": "vector-metatilequeuepopulator-shared", + "value": { + "telemetry": { + "shared": { + "serviceName": "metatileQueuePopulator" + }, + "tracing": { + "isEnabled": false + }, + "logger": { + "level": "info", + "prettyPrint": false + }, + "metrics": { + "enabled": true, + "buckets": [0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10, 15, 50, 250, 500] + } + }, + "openapiConfig": { + "filePath": "./openapi3.yaml", + "basePath": "/docs", + "rawPath": "/api", + "uiPath": "/api" + }, + "server": { + "port": 8080, + "request": { + "payload": { + "limit": "1mb" + } + }, + "response": { + "compression": { + "enabled": true, + "options": null + } + } + }, + "app": { + "consumeDelay": { + "enabled": true, + "delaySec": 60, + "tilesQueueSizeLimit": 400000 + }, + "enableRequestQueueHandling": true, + "force": { + "api": false, + "expiredTiles": false + }, + "metatileSize": 8, + "requestQueueCheckIntervalSec": 30, + "tilesBatchSize": 10000 + }, + "db": { + "$ref": { "configName": "db-connection", "version": "latest" }, + "ssl": { + "enabled": false + } + }, + "queue": { + "expireInSeconds": 600, + "retryBackoff": true, + "retryLimit": 3, + "retryDelaySeconds": 60, + "retentionHours": 87660 + } + } + } +] diff --git a/schemas/vector/metatileQueuePopulator/v1.schema.json b/schemas/vector/metatileQueuePopulator/shared/v1.schema.json similarity index 88% rename from schemas/vector/metatileQueuePopulator/v1.schema.json rename to schemas/vector/metatileQueuePopulator/shared/v1.schema.json index 1cec9e63..90ac1368 100644 --- a/schemas/vector/metatileQueuePopulator/v1.schema.json +++ b/schemas/vector/metatileQueuePopulator/shared/v1.schema.json @@ -1,8 +1,8 @@ { - "$id": "https://mapcolonies.com/vector/metatileQueuePopulator/v1", + "$id": "https://mapcolonies.com/vector/metatileQueuePopulator/shared/v1", "type": "object", - "title": "metatileQueuePopulatorV1", - "description": "Metatile Queue Populator's schema", + "title": "metatileQueuePopulatorSharedV1", + "description": "Metatile Queue Populator's shared schema", "allOf": [ { "$ref": "https://mapcolonies.com/common/boilerplate/v2" @@ -19,7 +19,7 @@ "required": ["db"], "properties": { "db": { - "$ref": "https://mapcolonies.com/common/db/full/v1" + "$ref": "https://mapcolonies.com/common/db/partial/v1" } } }, @@ -38,14 +38,7 @@ "app": { "description": "app configuration", "type": "object", - "default": {}, - "unevaluatedProperties": false, "properties": { - "projectName": { - "type": "string", - "description": "The name of the project", - "x-env-value": "APP_PROJECT_NAME" - }, "enableRequestQueueHandling": { "type": "boolean", "description": "Flag to enable request queue handling", @@ -100,6 +93,13 @@ }, "then": { "required": ["delaySec", "tilesQueueSizeLimit"] + }, + "else": { + "properties": { + "enabled": { + "const": false + } + } } }, "force": { @@ -121,15 +121,7 @@ } } }, - "required": [ - "projectName", - "enableRequestQueueHandling", - "requestQueueCheckIntervalSec", - "tilesBatchSize", - "metatileSize", - "consumeDelay", - "force" - ] + "required": ["enableRequestQueueHandling", "requestQueueCheckIntervalSec", "tilesBatchSize", "metatileSize", "consumeDelay", "force"] } } }, @@ -141,7 +133,6 @@ "description": "queue configuration", "type": "object", "default": {}, - "unevaluatedProperties": false, "properties": { "expireInSeconds": { "type": "integer", @@ -186,7 +177,6 @@ "description": "metrics configuration", "type": "object", "default": {}, - "unevaluatedProperties": false, "properties": { "enabled": { "type": "boolean", diff --git a/schemas/vector/retiler/full/v1.schema.json b/schemas/vector/retiler/full/v1.schema.json new file mode 100644 index 00000000..9f4c0e12 --- /dev/null +++ b/schemas/vector/retiler/full/v1.schema.json @@ -0,0 +1,170 @@ +{ + "$id": "https://mapcolonies.com/vector/retiler/full/v1", + "type": "object", + "title": "vectorRetilerFullSchemaV1", + "description": "Vector's Retiler full schema", + "unevaluatedProperties": false, + "allOf": [ + { + "$ref": "https://mapcolonies.com/vector/retiler/shared/v1" + }, + { + "type": "object", + "required": ["app"], + "properties": { + "app": { + "type": "object", + "description": "Application configuration", + "required": ["queueName", "map", "project", "tilesStorage", "jobQueue", "parallelism"], + "properties": { + "project": { + "$ref": "#/definitions/project" + }, + "forceProcess": { + "type": "boolean", + "description": "Force process all tiles", + "default": false, + "x-env-value": "APP_FORCE_PROCESS" + }, + "queueName": { + "type": "string", + "description": "Job queue name", + "default": "retiler-queue", + "x-env-value": "QUEUE_NAME" + }, + "parallelism": { + "type": "integer", + "description": "Number of parallel jobs", + "default": 1, + "x-env-value": "APP_PARALLELISM" + }, + "jobQueue": { + "$ref": "#/definitions/jobQueue" + }, + "map": { + "$ref": "#/definitions/map" + }, + "tilesStorage": { + "type": "object", + "description": "Tiles storage configuration", + "required": ["layout"], + "properties": { + "layout": { + "$ref": "#/definitions/tilesStorageLayout" + } + } + } + } + } + } + } + ], + "definitions": { + "project": { + "type": "object", + "description": "Project configuration", + "required": ["name", "stateUrl"], + "properties": { + "name": { + "type": "string", + "description": "Project name", + "x-env-value": "APP_PROJECT_NAME" + }, + "stateUrl": { + "type": "string", + "description": "Project rendered state URL", + "x-env-value": "APP_PROJECT_STATE_URL" + } + } + }, + "jobQueue": { + "type": "object", + "required": ["pgBoss"], + "properties": { + "pgBoss": { + "allOf": [ + { + "$ref": "https://mapcolonies.com/common/db/full/v2" + } + ] + } + } + }, + "map": { + "type": "object", + "description": "DigitalMap provider configuration", + "required": ["provider", "url", "wms"], + "properties": { + "provider": { + "enum": ["wms", "arcgis"], + "description": "DigitalMap provider kind", + "x-env-value": "MAP_PROVIDER" + }, + "url": { + "type": "string", + "description": "DigitalMap provider URL", + "x-env-value": "MAP_URL" + }, + "wms": { + "type": "object", + "required": ["version"], + "properties": { + "version": { + "$comment": "Should I use enum instead of string?", + "type": "string", + "description": "WMS version", + "default": "1.3.0", + "x-env-value": "MAP_WMS_VERSION" + }, + "layers": { + "type": "string", + "description": "WMS layers", + "x-env-value": "MAP_WMS_LAYERS" + }, + "styles": { + "type": "string", + "description": "WMS styles", + "x-env-value": "MAP_WMS_STYLES" + }, + "isZoomLayers": { + "type": "boolean", + "description": "Is zoom layers project", + "default": false, + "x-env-value": "MAP_WMS_ZOOM_LAYERS", + "$comment": "This will be deleted in the future with new QGIS versions" + } + } + } + }, + "if": { + "properties": { + "provider": { + "const": "wms" + } + } + }, + "then": { + "required": ["wms"], + "properties": { + "wms": { + "type": "object", + "required": ["layers", "styles"] + } + } + }, + "else": {} + }, + "tilesStorageLayout": { + "type": "object", + "required": ["format"], + "properties": { + "format": { + "type": "string", + "pattern": "^.+\\{z\\}\\/\\{x\\}\\/\\{y\\}\\..+$", + "description": "Tiles storage layout format", + "x-env-value": "TILES_STORAGE_LAYOUT_FORMAT" + } + } + } + } +} diff --git a/schemas/vector/retiler/shared/v1.configs.json b/schemas/vector/retiler/shared/v1.configs.json new file mode 100644 index 00000000..159d73cf --- /dev/null +++ b/schemas/vector/retiler/shared/v1.configs.json @@ -0,0 +1,58 @@ +[ + { + "name": "vector-retiler-shared", + "value": { + "telemetry": { + "shared": { + "serviceName": "retiler" + }, + "tracing": { + "isEnabled": false + }, + "logger": { + "level": "info", + "prettyPrint": false + } + }, + "openapiConfig": { + "filePath": "./openapi3.yaml", + "basePath": "/docs", + "rawPath": "/api", + "uiPath": "/api" + }, + "server": { + "port": 8080, + "request": { + "payload": { + "limit": "1mb" + } + }, + "response": {} + }, + "app": { + "forceProcess": false, + "jobQueue": { + "pgBoss": { "noSupervisor": true }, + "waitTimeout": 60000 + }, + "map": { + "format": "image/png", + "client": { + "timeoutMs": 600000 + } + }, + "parallelism": 15, + "tilesStorage": { + "providers": [], + "layout": { + "shouldFlipY": true + }, + "shouldFilterBlankTiles": true + } + }, + "detiler": { + "enabled": false + } + } + } +] diff --git a/schemas/vector/retiler/v1.schema.json b/schemas/vector/retiler/shared/v1.schema.json similarity index 73% rename from schemas/vector/retiler/v1.schema.json rename to schemas/vector/retiler/shared/v1.schema.json index 7919939c..d58e71b2 100644 --- a/schemas/vector/retiler/v1.schema.json +++ b/schemas/vector/retiler/shared/v1.schema.json @@ -1,7 +1,7 @@ { - "$id": "https://mapcolonies.com/vector/retiler/v1", + "$id": "https://mapcolonies.com/vector/retiler/shared/v1", "type": "object", - "title": "vectorRetilerSchemaV1", + "title": "vectorRetilerSharedSchemaV1", "description": "Vector's Retiler schema", "allOf": [ { @@ -14,23 +14,14 @@ "app": { "type": "object", "description": "Application configuration", - "required": ["queueName", "map", "project", "tilesStorage", "jobQueue", "parallelism"], + "required": ["map", "tilesStorage", "jobQueue", "parallelism"], "properties": { - "project": { - "$ref": "#/definitions/project" - }, "forceProcess": { "type": "boolean", "description": "Force process all tiles", "default": false, "x-env-value": "APP_FORCE_PROCESS" }, - "queueName": { - "type": "string", - "description": "Job queue name", - "default": "retiler-queue", - "x-env-value": "QUEUE_NAME" - }, "parallelism": { "type": "integer", "description": "Number of parallel jobs", @@ -46,8 +37,7 @@ "tilesStorage": { "type": "object", "description": "Tiles storage configuration", - "required": ["providers", "layout"], - "unevaluatedProperties": false, + "required": ["layout", "providers"], "properties": { "providers": { "$ref": "#/definitions/tilesStorageProviders" @@ -113,37 +103,18 @@ } ], "definitions": { - "project": { - "type": "object", - "description": "Project configuration", - "required": ["name", "stateUrl"], - "properties": { - "name": { - "type": "string", - "description": "Project name", - "x-env-value": "APP_PROJECT_NAME" - }, - "stateUrl": { - "type": "string", - "description": "Project rendered state URL", - "x-env-value": "APP_PROJECT_STATE_URL" - } - } - }, "jobQueue": { "type": "object", - "required": ["waitTimeout", "pgBoss"], + "required": ["waitTimeout"], "properties": { "waitTimeout": { "type": "integer", + "default": 60000, "description": "Job queue wait timeout in milliseconds", "x-env-value": "QUEUE_WAIT_TIMEOUT" }, "pgBoss": { "allOf": [ - { - "$ref": "https://mapcolonies.com/common/db/full/v2" - }, { "type": "object", "properties": { @@ -161,18 +132,8 @@ "map": { "type": "object", "description": "DigitalMap provider configuration", - "required": ["provider", "url", "format", "wms", "client"], + "required": ["format", "client"], "properties": { - "provider": { - "enum": ["wms", "arcgis"], - "description": "DigitalMap provider kind", - "x-env-value": "MAP_PROVIDER" - }, - "url": { - "type": "string", - "description": "DigitalMap provider URL", - "x-env-value": "MAP_URL" - }, "format": { "enum": ["jpg", "jpeg", "image/jpeg", "image/png", "image/webp"], "description": "DigitalMap provider output format", @@ -189,36 +150,6 @@ "x-env-value": "MAP_CLIENT_TIMEOUT_MS" } } - }, - "wms": { - "type": "object", - "required": ["version", "layers", "styles"], - "properties": { - "version": { - "$comment": "Should I use enum instead of string?", - "type": "string", - "description": "WMS version", - "default": "1.3.0", - "x-env-value": "MAP_WMS_VERSION" - }, - "layers": { - "type": "string", - "description": "WMS layers", - "x-env-value": "MAP_WMS_LAYERS" - }, - "styles": { - "type": "string", - "description": "WMS styles", - "x-env-value": "MAP_WMS_STYLES" - }, - "isZoomLayers": { - "type": "boolean", - "description": "Is zoom layers project", - "default": false, - "x-env-value": "MAP_WMS_ZOOM_LAYERS", - "$comment": "This will be deleted in the future with new QGIS versions" - } - } } } }, @@ -265,7 +196,6 @@ "fsTilesStorageProvider": { "type": "object", "required": ["kind", "basePath"], - "unevaluatedProperties": false, "description": "File system tiles storage provider", "properties": { "kind": { @@ -281,7 +211,7 @@ "tilesStorageProviders": { "type": "array", "items": { - "anyOf": [ + "oneOf": [ { "$ref": "#/definitions/s3TilesStorageProvider" }, @@ -295,14 +225,7 @@ }, "tilesStorageLayout": { "type": "object", - "required": ["format"], - "unevaluatedProperties": false, "properties": { - "format": { - "type": "string", - "description": "Tiles storage layout format", - "x-env-value": "TILES_STORAGE_LAYOUT_FORMAT" - }, "shouldFlipY": { "type": "boolean", "description": "Should flip Y",