Skip to content

feat: add prebuilds metrics collector #17547

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Apr 28, 2025
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Renaming prebuilds to "prebuilt workspaces" in metrics
Signed-off-by: Danny Kopping <dannykopping@gmail.com>
  • Loading branch information
dannykopping committed Apr 25, 2025
commit 7b78523e09750156b68f2879fccf65261f79cf15
31 changes: 12 additions & 19 deletions enterprise/coderd/prebuilds/metricscollector.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,44 +16,38 @@ import (
var (
labels = []string{"template_name", "preset_name", "organization_name"}
createdPrebuildsDesc = prometheus.NewDesc(
"coderd_prebuilds_created_total",
"The number of prebuilds that have been created to meet the desired count set by presets.",
"coderd_prebuilt_workspaces_created_total",
"The number of prebuilt workspaces that have been created to meet the desired count set by presets.",
labels,
nil,
)
failedPrebuildsDesc = prometheus.NewDesc(
"coderd_prebuilds_failed_total",
"The number of prebuilds that failed to build during creation.",
"coderd_prebuilt_workspaces_failed_total",
"The number of prebuilt workspaces that failed to build.",
labels,
nil,
)
claimedPrebuildsDesc = prometheus.NewDesc(
"coderd_prebuilds_claimed_total",
"The number of prebuilds that were claimed by a user. Each count means that a user created a workspace using a preset and was assigned a prebuild instead of a brand new workspace.",
labels,
nil,
)
usedPresetsDesc = prometheus.NewDesc(
"coderd_prebuilds_used_presets",
"The number of times a preset was used to build a prebuild.",
"coderd_prebuilt_workspaces_claimed_total",
"The number of prebuilt workspaces that were claimed by a user. Each count means that a user created a workspace using a preset and claimed a prebuilt workspace instead of a brand new workspace being created.",
labels,
nil,
)
desiredPrebuildsDesc = prometheus.NewDesc(
"coderd_prebuilds_desired",
"The number of prebuilds desired by each preset of each template.",
"coderd_prebuilt_workspaces_desired",
"The number of prebuilt workspaces desired by each preset of each template.",
labels,
nil,
)
runningPrebuildsDesc = prometheus.NewDesc(
"coderd_prebuilds_running",
"The number of prebuilds that are currently running. Running prebuilds have successfully started, but they may not be ready to be claimed by a user yet.",
"coderd_prebuilt_workspaces_running",
"The number of prebuilt workspaces that are currently running. Running prebuilt workspaces have successfully started, but includes both eligible and ineligible workspaces.",
labels,
nil,
)
eligiblePrebuildsDesc = prometheus.NewDesc(
"coderd_prebuilds_eligible",
"The number of eligible prebuilds. Eligible prebuilds are prebuilds that are ready to be claimed by a user.",
"coderd_prebuilt_workspaces_eligible",
"The number of eligible prebuilt workspaces. Eligible prebuilt workspaces are ones whose agent is marked 'ready', and can be claimed by a user.",
labels,
nil,
)
Expand All @@ -79,7 +73,6 @@ func (*MetricsCollector) Describe(descCh chan<- *prometheus.Desc) {
descCh <- createdPrebuildsDesc
descCh <- failedPrebuildsDesc
descCh <- claimedPrebuildsDesc
descCh <- usedPresetsDesc
descCh <- desiredPrebuildsDesc
descCh <- runningPrebuildsDesc
descCh <- eligiblePrebuildsDesc
Expand Down
50 changes: 25 additions & 25 deletions enterprise/coderd/prebuilds/metricscollector_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,10 +58,10 @@ func TestMetricsCollector(t *testing.T) {
// * a prebuild that was claimed should not be deemed running, not eligible.
ownerIDs: []uuid.UUID{agplprebuilds.SystemUserID, uuid.New()},
metrics: []metricCheck{
{"coderd_prebuilds_created_total", ptr.To(1.0), true},
{"coderd_prebuilds_desired", ptr.To(1.0), false},
// {"coderd_prebuilds_running", ptr.To(0.0), false},
// {"coderd_prebuilds_eligible", ptr.To(0.0), false},
{"coderd_prebuilt_workspaces_created_total", ptr.To(1.0), true},
{"coderd_prebuilt_workspaces_desired", ptr.To(1.0), false},
{"coderd_prebuilt_workspaces_running", ptr.To(0.0), false},
{"coderd_prebuilt_workspaces_eligible", ptr.To(0.0), false},
},
templateDeleted: []bool{false},
},
Expand All @@ -72,10 +72,10 @@ func TestMetricsCollector(t *testing.T) {
initiatorIDs: []uuid.UUID{agplprebuilds.SystemUserID},
ownerIDs: []uuid.UUID{agplprebuilds.SystemUserID},
metrics: []metricCheck{
{"coderd_prebuilds_created_total", ptr.To(1.0), true},
{"coderd_prebuilds_desired", ptr.To(1.0), false},
{"coderd_prebuilds_running", ptr.To(1.0), false},
{"coderd_prebuilds_eligible", ptr.To(0.0), false},
{"coderd_prebuilt_workspaces_created_total", ptr.To(1.0), true},
{"coderd_prebuilt_workspaces_desired", ptr.To(1.0), false},
{"coderd_prebuilt_workspaces_running", ptr.To(1.0), false},
{"coderd_prebuilt_workspaces_eligible", ptr.To(0.0), false},
},
templateDeleted: []bool{false},
},
Expand All @@ -86,26 +86,26 @@ func TestMetricsCollector(t *testing.T) {
initiatorIDs: []uuid.UUID{agplprebuilds.SystemUserID},
ownerIDs: []uuid.UUID{agplprebuilds.SystemUserID, uuid.New()},
metrics: []metricCheck{
{"coderd_prebuilds_created_total", ptr.To(1.0), true},
{"coderd_prebuilds_failed_total", ptr.To(1.0), true},
{"coderd_prebuilds_desired", ptr.To(1.0), false},
{"coderd_prebuilds_running", ptr.To(0.0), false},
{"coderd_prebuilds_eligible", ptr.To(0.0), false},
{"coderd_prebuilt_workspaces_created_total", ptr.To(1.0), true},
{"coderd_prebuilt_workspaces_failed_total", ptr.To(1.0), true},
{"coderd_prebuilt_workspaces_desired", ptr.To(1.0), false},
{"coderd_prebuilt_workspaces_running", ptr.To(0.0), false},
{"coderd_prebuilt_workspaces_eligible", ptr.To(0.0), false},
},
templateDeleted: []bool{false},
},
{
name: "prebuild assigned",
name: "prebuild claimed",
transitions: allTransitions,
jobStatuses: allJobStatuses,
initiatorIDs: []uuid.UUID{agplprebuilds.SystemUserID},
ownerIDs: []uuid.UUID{uuid.New()},
metrics: []metricCheck{
{"coderd_prebuilds_created_total", ptr.To(1.0), true},
{"coderd_prebuilds_claimed_total", ptr.To(1.0), true},
{"coderd_prebuilds_desired", ptr.To(1.0), false},
{"coderd_prebuilds_running", ptr.To(0.0), false},
{"coderd_prebuilds_eligible", ptr.To(0.0), false},
{"coderd_prebuilt_workspaces_created_total", ptr.To(1.0), true},
{"coderd_prebuilt_workspaces_claimed_total", ptr.To(1.0), true},
{"coderd_prebuilt_workspaces_desired", ptr.To(1.0), false},
{"coderd_prebuilt_workspaces_running", ptr.To(0.0), false},
{"coderd_prebuilt_workspaces_eligible", ptr.To(0.0), false},
},
templateDeleted: []bool{false},
},
Expand All @@ -116,9 +116,9 @@ func TestMetricsCollector(t *testing.T) {
initiatorIDs: []uuid.UUID{uuid.New()},
ownerIDs: []uuid.UUID{uuid.New()},
metrics: []metricCheck{
{"coderd_prebuilds_desired", ptr.To(1.0), false},
{"coderd_prebuilds_running", ptr.To(0.0), false},
{"coderd_prebuilds_eligible", ptr.To(0.0), false},
{"coderd_prebuilt_workspaces_desired", ptr.To(1.0), false},
{"coderd_prebuilt_workspaces_running", ptr.To(0.0), false},
{"coderd_prebuilt_workspaces_eligible", ptr.To(0.0), false},
},
templateDeleted: []bool{false},
},
Expand All @@ -129,7 +129,7 @@ func TestMetricsCollector(t *testing.T) {
initiatorIDs: []uuid.UUID{agplprebuilds.SystemUserID},
ownerIDs: []uuid.UUID{agplprebuilds.SystemUserID, uuid.New()},
metrics: []metricCheck{
{"coderd_prebuilds_desired", ptr.To(0.0), false},
{"coderd_prebuilt_workspaces_desired", ptr.To(0.0), false},
},
templateDeleted: []bool{true},
},
Expand All @@ -140,8 +140,8 @@ func TestMetricsCollector(t *testing.T) {
initiatorIDs: []uuid.UUID{agplprebuilds.SystemUserID},
ownerIDs: []uuid.UUID{agplprebuilds.SystemUserID},
metrics: []metricCheck{
{"coderd_prebuilds_running", ptr.To(1.0), false},
{"coderd_prebuilds_eligible", ptr.To(0.0), false},
{"coderd_prebuilt_workspaces_running", ptr.To(1.0), false},
{"coderd_prebuilt_workspaces_eligible", ptr.To(0.0), false},
},
templateDeleted: []bool{true},
},
Expand Down