diff --git a/deploy/deploy.schema.json b/deploy/deploy.schema.json index 4e954ecc..ebec122f 100644 --- a/deploy/deploy.schema.json +++ b/deploy/deploy.schema.json @@ -391,10 +391,28 @@ "workbenchRuntime": { "type": "object", "properties": { + "client": { "$ref": "#/$defs/workbenchRuntimeClient" }, + "postgres": { "$ref": "#/$defs/workbenchRuntimePostgres" }, "cache": { "$ref": "#/$defs/workbenchRuntimeCache" } }, "additionalProperties": false }, + "workbenchRuntimeClient": { + "type": "object", + "properties": { + "timeoutMs": { "type": "integer", "minimum": 1 } + }, + "additionalProperties": false + }, + "workbenchRuntimePostgres": { + "type": "object", + "properties": { + "poolMax": { "type": "integer", "minimum": 1 }, + "queryTimeoutMs": { "type": "integer", "minimum": 1 }, + "readyTimeoutMs": { "type": "integer", "minimum": 1 } + }, + "additionalProperties": false + }, "workbenchRuntimeCache": { "type": "object", "properties": { diff --git a/deploy/deploy.yaml b/deploy/deploy.yaml index 5281198e..29180725 100644 --- a/deploy/deploy.yaml +++ b/deploy/deploy.yaml @@ -307,6 +307,12 @@ lanes: queryRetryInitialDelayMs: 250 queryRetryMaxDelayMs: 5000 workbenchRuntime: + client: + timeoutMs: 4500 + postgres: + poolMax: 4 + queryTimeoutMs: 4500 + readyTimeoutMs: 2000 cache: redis: enabled: true @@ -557,7 +563,6 @@ lanes: HWLAB_BOOTSTRAP_ADMIN_API_KEY: secretRef:hwlab-v03-master-server-admin-api-key/api-key HWLAB_USER_BILLING_URL: http://hwlab-user-billing.hwlab-v03.svc.cluster.local:6670 HWLAB_WORKBENCH_RUNTIME_URL: http://hwlab-workbench-runtime.hwlab-v03.svc.cluster.local:6671 - HWLAB_WORKBENCH_RUNTIME_TIMEOUT_MS: "1800" HWLAB_WORKBENCH_FACTS_QUERY_MAX_ATTEMPTS: "2" HWLAB_WORKBENCH_FACTS_QUERY_BACKOFF_BASE_MS: "120" HWLAB_WORKBENCH_FACTS_QUERY_BACKOFF_MAX_MS: "250" @@ -588,9 +593,6 @@ lanes: env: HWLAB_WORKBENCH_RUNTIME_DB_URL: secretRef:hwlab-cloud-api-v03-db/database-url HWLAB_WORKBENCH_RUNTIME_PORT: "6671" - HWLAB_WORKBENCH_RUNTIME_DB_POOL_MAX: "32" - HWLAB_WORKBENCH_RUNTIME_QUERY_TIMEOUT_MS: "1500" - HWLAB_WORKBENCH_RUNTIME_READY_TIMEOUT_MS: "2000" OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: http://otel-collector.platform-infra.svc.cluster.local:4318/v1/traces OTEL_SERVICE_NAME: hwlab-workbench-runtime - serviceId: hwlab-user-billing diff --git a/scripts/gitops-render.mjs b/scripts/gitops-render.mjs index a23c73de..38bad9e0 100644 --- a/scripts/gitops-render.mjs +++ b/scripts/gitops-render.mjs @@ -939,6 +939,8 @@ function deployServicesForProfile(deploy, profile) { copy.env, serviceDeclarationEnvForProfile(deploy, profile, service.serviceId), runtimeStoreEnvForProfile(deploy, profile, service.serviceId), + workbenchRuntimeClientEnvForProfile(deploy, profile, service.serviceId), + workbenchRuntimePostgresEnvForProfile(deploy, profile, service.serviceId), workbenchRuntimeRedisEnvForProfile(deploy, profile, service.serviceId) ); return [service.serviceId, copy]; @@ -952,6 +954,8 @@ function deployServicesForProfile(deploy, profile) { env: mergeEnvMaps( serviceDeclarationEnvForProfile(deploy, profile, override.serviceId), runtimeStoreEnvForProfile(deploy, profile, override.serviceId), + workbenchRuntimeClientEnvForProfile(deploy, profile, override.serviceId), + workbenchRuntimePostgresEnvForProfile(deploy, profile, override.serviceId), workbenchRuntimeRedisEnvForProfile(deploy, profile, override.serviceId) ) }; @@ -1049,6 +1053,26 @@ function workbenchRuntimeRedisEnvForProfile(deploy, profile, serviceId) { return env; } +function workbenchRuntimeClientEnvForProfile(deploy, profile, serviceId) { + if (!isRuntimeLane(profile) || serviceId !== "hwlab-cloud-api") return {}; + const client = runtimeLaneConfig(deploy, profile)?.workbenchRuntime?.client; + if (!client || typeof client !== "object" || Array.isArray(client)) return {}; + const env = {}; + if (Number.isInteger(client.timeoutMs)) env.HWLAB_WORKBENCH_RUNTIME_TIMEOUT_MS = String(client.timeoutMs); + return env; +} + +function workbenchRuntimePostgresEnvForProfile(deploy, profile, serviceId) { + if (!isRuntimeLane(profile) || serviceId !== "hwlab-workbench-runtime") return {}; + const postgres = runtimeLaneConfig(deploy, profile)?.workbenchRuntime?.postgres; + if (!postgres || typeof postgres !== "object" || Array.isArray(postgres)) return {}; + const env = {}; + if (Number.isInteger(postgres.poolMax)) env.HWLAB_WORKBENCH_RUNTIME_DB_POOL_MAX = String(postgres.poolMax); + if (Number.isInteger(postgres.queryTimeoutMs)) env.HWLAB_WORKBENCH_RUNTIME_QUERY_TIMEOUT_MS = String(postgres.queryTimeoutMs); + if (Number.isInteger(postgres.readyTimeoutMs)) env.HWLAB_WORKBENCH_RUNTIME_READY_TIMEOUT_MS = String(postgres.readyTimeoutMs); + return env; +} + function workbenchRuntimeRedisConfigForProfile(deploy, profile) { if (!isRuntimeLane(profile)) return null; const label = `deploy.lanes.${profile}.workbenchRuntime.cache.redis`;