Skip to content

Commit 22b2afb

Browse files
author
Laurie T. Malau
committed
add metrics
1 parent 4a5f8ec commit 22b2afb

File tree

4 files changed

+53
-0
lines changed

4 files changed

+53
-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(pws.state);
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: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,3 +151,25 @@ 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+
labelNames: ["state"],
159+
registers: [prometheusClient.register],
160+
});
161+
162+
export function increasePrebuildsStartedCounter(state: string) {
163+
prebuildsStartedTotal.inc({ state });
164+
}
165+
166+
const prebuildsEndedTotal = new prometheusClient.Counter({
167+
name: "gitpod_prebuilds_ended_total",
168+
help: "Counter of total prebuilds ended.",
169+
labelNames: ["state"],
170+
registers: [prometheusClient.register],
171+
});
172+
173+
export function increasePrebuildsEndedCounter(state: string) {
174+
prebuildsEndedTotal.inc({ state });
175+
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,10 @@ export class PrebuildUpdaterDB implements PrebuildUpdater {
7979
span.setTag("updatePrebuildWorkspace.prebuild.state", updatedPrebuild.state);
8080
span.setTag("updatePrebuildWorkspace.prebuild.error", updatedPrebuild.error);
8181

82+
if (updatedPrebuild.state && updatedPrebuild.state !== "building") {
83+
this.prometheusExporter.increasePrebuildsEndedCounter(updatedPrebuild.state);
84+
}
85+
8286
if (writeToDB) {
8387
await this.workspaceDB.trace({ span }).storePrebuiltWorkspace(updatedPrebuild);
8488
}

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

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ 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 prebuildsStartedTotal: prom.Counter<string>;
22+
protected readonly prebuildsEndedTotal: prom.Counter<string>;
2123

2224
protected readonly workspaceInstanceUpdateStartedTotal: prom.Counter<string>;
2325
protected readonly workspaceInstanceUpdateCompletedSeconds: prom.Histogram<string>;
@@ -73,6 +75,18 @@ export class PrometheusMetricsExporter {
7375
labelNames: ["db_write", "workspace_cluster", "workspace_instance_type", "outcome"],
7476
buckets: prom.exponentialBuckets(2, 2, 8),
7577
});
78+
79+
this.prebuildsStartedTotal = new prom.Counter({
80+
name: "gitpod_prebuilds_started_total",
81+
help: "Counter of total prebuilds started.",
82+
labelNames: ["state"],
83+
});
84+
85+
this.prebuildsEndedTotal = new prom.Counter({
86+
name: "gitpod_prebuilds_ended_total",
87+
help: "Counter of total prebuilds ended.",
88+
labelNames: ["state"],
89+
});
7690
}
7791

7892
observeWorkspaceStartupTime(instance: WorkspaceInstance): void {
@@ -142,4 +156,12 @@ export class PrometheusMetricsExporter {
142156
.labels(String(dbWrite), workspaceCluster, WorkspaceType[type], outcome)
143157
.observe(durationSeconds);
144158
}
159+
160+
increasePrebuildsStartedCounter(state: string) {
161+
this.prebuildsStartedTotal.inc({ state });
162+
}
163+
164+
increasePrebuildsEndedCounter(state: string) {
165+
this.prebuildsEndedTotal.inc({ state });
166+
}
145167
}

0 commit comments

Comments
 (0)