From 371d0c206fa58acecd161f21ac91337210126275 Mon Sep 17 00:00:00 2001 From: Andrew Farries Date: Mon, 31 Oct 2022 16:56:26 +0000 Subject: [PATCH] Add imageBuildsCompletedTotal metric Add a counter to track the number of image builds recorded as completed by `server`, broken down by outcome (succeeded, failed). --- components/server/src/prometheus-metrics.ts | 11 +++++++++++ components/server/src/workspace/workspace-starter.ts | 10 ++++++++++ 2 files changed, 21 insertions(+) diff --git a/components/server/src/prometheus-metrics.ts b/components/server/src/prometheus-metrics.ts index 9f06939a359779..2637e60a8ea0d9 100644 --- a/components/server/src/prometheus-metrics.ts +++ b/components/server/src/prometheus-metrics.ts @@ -21,6 +21,7 @@ export function registerServerMetrics(registry: prometheusClient.Registry) { registry.registerMetric(prebuildsStartedTotal); registry.registerMetric(stripeClientRequestsCompletedDurationSeconds); registry.registerMetric(imageBuildsStartedTotal); + registry.registerMetric(imageBuildsCompletedTotal); } const loginCounter = new prometheusClient.Counter({ @@ -175,3 +176,13 @@ export const imageBuildsStartedTotal = new prometheusClient.Counter({ export function increaseImageBuildsStartedTotal() { imageBuildsStartedTotal.inc(); } + +export const imageBuildsCompletedTotal = new prometheusClient.Counter({ + name: "gitpod_server_image_builds_completed_total", + help: "counter of the total number of image builds recorded as completed on server", + labelNames: ["outcome"], +}); + +export function increaseImageBuildsCompletedTotal(outcome: "succeeded" | "failed") { + imageBuildsCompletedTotal.inc({ outcome }); +} diff --git a/components/server/src/workspace/workspace-starter.ts b/components/server/src/workspace/workspace-starter.ts index 4deb4fb8fd958b..f2b0f230478ecb 100644 --- a/components/server/src/workspace/workspace-starter.ts +++ b/components/server/src/workspace/workspace-starter.ts @@ -114,6 +114,7 @@ import { ExtendedUser } from "@gitpod/ws-manager/lib/constraints"; import { FailedInstanceStartReason, increaseFailedInstanceStartCounter, + increaseImageBuildsCompletedTotal, increaseImageBuildsStartedTotal, increaseSuccessfulInstanceStartCounter, } from "../prometheus-metrics"; @@ -1280,6 +1281,10 @@ export class WorkspaceStarter { // ...and wait for the build to finish buildResult = await result.buildPromise; if (buildResult.getStatus() == BuildStatus.DONE_FAILURE) { + // Register a failed image build only if the image actually needed to be built; ie the build was not a no-op. + if (result.actuallyNeedsBuild) { + increaseImageBuildsCompletedTotal("failed"); + } throw new Error(buildResult.getMessage()); } } catch (err) { @@ -1302,6 +1307,11 @@ export class WorkspaceStarter { } } + // Register a successful image build only if the image actually needed to be built; ie the build was not a no-op. + if (result.actuallyNeedsBuild) { + increaseImageBuildsCompletedTotal("succeeded"); + } + // We have just found out how our base image is called - remember that. // Note: it's intentional that we overwrite existing baseImageNameResolved values here so that one by one the refs here become absolute (i.e. digested form). // This prevents the "rebuilds" for old workspaces.