diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 9900ea44097bdf6f05105ead26a1cce449c9ac87..f5d0ff715004ae78700254b199f0480f2ab86124 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -49,7 +49,7 @@ variables: ## common steps cache_lint_test: - image: 'europe-north1-docker.pkg.dev/holi-shared/docker-hub-remote/denoland/deno:2.1.9' + image: 'europe-north1-docker.pkg.dev/holi-shared/docker-hub-remote/denoland/deno:2.1.10' stage: 'test' script: - deno cache --allow-import --lock=deno.lock app/deps.ts app/dev_deps.ts diff --git a/Dockerfile b/Dockerfile index 2a50b997bde4287e0e23bb7f7d4d9393fa46449f..088a6a437530c11ffef1bfa508e6258b7d0f2c71 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM europe-north1-docker.pkg.dev/holi-shared/docker-hub-remote/denoland/deno:2.1.9 +FROM europe-north1-docker.pkg.dev/holi-shared/docker-hub-remote/denoland/deno:2.1.10 # The port that your application listens to. EXPOSE 8005 diff --git a/app/server.ts b/app/server.ts index a34c612a2b6da6081714cc41ca532e64d202d193..0a24736eb0b9832c418d7773c66d650284b9ca95 100644 --- a/app/server.ts +++ b/app/server.ts @@ -102,12 +102,20 @@ export const createGraphQLServer = ( export type GraphQLServer = any export const startServer = (config: ServerConfig): Promise<void> => { - const novuInstance = createNovuInstance(config.novuConfig) - const graphQLServer: GraphQLServer = createGraphQLServer( - novuInstance, - config, - ) - return serve(graphQLServer.handleRequest, { + const novu = createNovuInstance(config.novuConfig) + const graphQLServer: GraphQLServer = createGraphQLServer(novu, config) + + const handler = (request: Request): Response => { + const url = new URL(request.url) + + if (url.pathname === '/health') { + return new Response('OK', { status: 200 }) + } + + return graphQLServer.handleRequest(request) + } + + return serve(handler, { port: config.port, onListen({ port, hostname }) { logger.info( diff --git a/terraform/environments/deployment.tf b/terraform/environments/deployment.tf index e0389608d7b57ec8b5268f798834f92b105c8822..f497837e4471e4178b48b9f68831cd10a11ffe45 100644 --- a/terraform/environments/deployment.tf +++ b/terraform/environments/deployment.tf @@ -73,6 +73,24 @@ resource "google_cloud_run_service" "notifications_api" { memory = local.environment == "production" ? "512Mi" : "256Mi" } } + startup_probe { + http_get { + path = "/health" + } + initial_delay_seconds = 5 + failure_threshold = 3 + period_seconds = 5 + timeout_seconds = 2 + } + liveness_probe { + http_get { + path = "/health" + } + initial_delay_seconds = 10 + period_seconds = 30 + timeout_seconds = 2 + failure_threshold = 3 + } } container_concurrency = 0 # 0 means thread safe, no restriction on max concurrency } @@ -85,7 +103,7 @@ resource "google_cloud_run_service" "notifications_api" { "run.googleapis.com/vpc-access-connector" = data.terraform_remote_state.holi_infra_state.outputs.vpc_access_connector_name # possible values: all-traffic/private-ranges-only(default) https://cloud.google.com/sdk/gcloud/reference/run/services/update#--vpc-egress "run.googleapis.com/vpc-access-egress" = "private-ranges-only" - "run.googleapis.com/startup-cpu-boost" = "true" + "run.googleapis.com/startup-cpu-boost" = "true" } # labels set on the revision level labels = {