Skip to content

Commit 91da6e6

Browse files
author
Laurie T. Malau
committed
add metrics
1 parent 7d6a91c commit 91da6e6

File tree

4 files changed

+31
-0
lines changed

4 files changed

+31
-0
lines changed

components/server/ee/src/workspace/workspace-factory.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import { ErrorCodes } from "@gitpod/gitpod-protocol/lib/messaging/error";
3030
import { HostContextProvider } from "../../../src/auth/host-context-provider";
3131
import { UserDB } from "@gitpod/gitpod-db/lib";
3232
import { UserCounter } from "../user/user-counter";
33+
import { increasePrebuildsStartedCounter } from "../../../src/prometheus-metrics";
3334

3435
@injectable()
3536
export class WorkspaceFactoryEE extends WorkspaceFactory {
@@ -177,6 +178,10 @@ export class WorkspaceFactoryEE extends WorkspaceFactory {
177178
statusVersion: 0,
178179
});
179180

181+
if (pws) {
182+
increasePrebuildsStartedCounter();
183+
}
184+
180185
log.debug(
181186
{ userId: user.id, workspaceId: ws.id },
182187
`Registered workspace prebuild: ${pws.id} for ${commitContext.repository.cloneUrl}:${commitContext.revision}`,

components/server/src/prometheus-metrics.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,3 +151,13 @@ const instanceStartsFailedTotal = new prometheusClient.Counter({
151151
export function increaseFailedInstanceStartCounter(reason: "clusterSelectionFailed" | "startOnClusterFailed") {
152152
instanceStartsFailedTotal.inc({ reason });
153153
}
154+
155+
const prebuildsStartedTotal = new prometheusClient.Counter({
156+
name: "gitpod_prebuilds_started_total",
157+
help: "Counter of total prebuilds started.",
158+
registers: [prometheusClient.register],
159+
});
160+
161+
export function increasePrebuildsStartedCounter() {
162+
prebuildsStartedTotal.inc();
163+
}

components/ws-manager-bridge/ee/src/prebuild-updater-db.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ export class PrebuildUpdaterDB implements PrebuildUpdater {
7070
prebuild.statusVersion = status.statusVersion;
7171

7272
const update = this.prebuildStateMapper.mapWorkspaceStatusToPrebuild(status);
73+
const terminatingStates = ["available", "timeout", "aborted", "failed"];
7374
if (update) {
7475
const updatedPrebuild = {
7576
...prebuild,
@@ -79,6 +80,10 @@ export class PrebuildUpdaterDB implements PrebuildUpdater {
7980
span.setTag("updatePrebuildWorkspace.prebuild.state", updatedPrebuild.state);
8081
span.setTag("updatePrebuildWorkspace.prebuild.error", updatedPrebuild.error);
8182

83+
if (updatedPrebuild.state && terminatingStates.includes(updatedPrebuild.state)) {
84+
this.prometheusExporter.increasePrebuildsCompletedCounter(updatedPrebuild.state, writeToDB);
85+
}
86+
8287
if (writeToDB) {
8388
await this.workspaceDB.trace({ span }).storePrebuiltWorkspace(updatedPrebuild);
8489
}

components/ws-manager-bridge/src/prometheus-metrics-exporter.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ export class PrometheusMetricsExporter {
1818
protected readonly clusterCordoned: prom.Gauge<string>;
1919
protected readonly statusUpdatesTotal: prom.Counter<string>;
2020
protected readonly stalePrebuildEventsTotal: prom.Counter<string>;
21+
protected readonly prebuildsCompletedTotal: prom.Counter<string>;
2122

2223
protected readonly workspaceInstanceUpdateStartedTotal: prom.Counter<string>;
2324
protected readonly workspaceInstanceUpdateCompletedSeconds: prom.Histogram<string>;
@@ -73,6 +74,12 @@ export class PrometheusMetricsExporter {
7374
labelNames: ["db_write", "workspace_cluster", "workspace_instance_type", "outcome"],
7475
buckets: prom.exponentialBuckets(2, 2, 8),
7576
});
77+
78+
this.prebuildsCompletedTotal = new prom.Counter({
79+
name: "gitpod_prebuilds_completed_total",
80+
help: "Counter of total prebuilds ended.",
81+
labelNames: ["state", "isGoverning"],
82+
});
7683
}
7784

7885
observeWorkspaceStartupTime(instance: WorkspaceInstance): void {
@@ -142,4 +149,8 @@ export class PrometheusMetricsExporter {
142149
.labels(String(dbWrite), workspaceCluster, WorkspaceType[type], outcome)
143150
.observe(durationSeconds);
144151
}
152+
153+
increasePrebuildsCompletedCounter(state: string, isGoverning: boolean) {
154+
this.prebuildsCompletedTotal.labels(state, String(isGoverning)).inc();
155+
}
145156
}

0 commit comments

Comments
 (0)