@@ -128,7 +128,7 @@ func Users(ctx context.Context, logger slog.Logger, clk quartz.Clock, registerer
128128}
129129
130130// Workspaces tracks the total number of workspaces with labels on status.
131- func Workspaces (ctx context.Context ,logger slog.Logger ,registerer prometheus.Registerer ,db database.Store ,duration time.Duration ) (func (),UpdateWorkspaceTimingMetricsFn , error ) {
131+ func Workspaces (ctx context.Context ,logger slog.Logger ,registerer prometheus.Registerer ,db database.Store ,duration time.Duration ) (func (),error ) {
132132if duration == 0 {
133133duration = defaultRefreshRate
134134}
@@ -143,7 +143,7 @@ func Workspaces(ctx context.Context, logger slog.Logger, registerer prometheus.R
143143Help :"DEPRECATED: use coderd_api_workspace_latest_build instead" ,
144144}, []string {"status" })
145145if err := registerer .Register (workspaceLatestBuildTotalsDeprecated );err != nil {
146- return nil ,nil , err
146+ return nil ,err
147147}
148148
149149workspaceLatestBuildTotals := prometheus .NewGaugeVec (prometheus.GaugeOpts {
@@ -153,7 +153,7 @@ func Workspaces(ctx context.Context, logger slog.Logger, registerer prometheus.R
153153Help :"The current number of workspace builds by status for all non-deleted workspaces." ,
154154}, []string {"status" })
155155if err := registerer .Register (workspaceLatestBuildTotals );err != nil {
156- return nil ,nil , err
156+ return nil ,err
157157}
158158
159159workspaceLatestBuildStatuses := prometheus .NewGaugeVec (prometheus.GaugeOpts {
@@ -162,7 +162,7 @@ func Workspaces(ctx context.Context, logger slog.Logger, registerer prometheus.R
162162Help :"The current workspace statuses by template, transition, and owner for all non-deleted workspaces." ,
163163}, []string {"status" ,"template_name" ,"template_version" ,"workspace_owner" ,"workspace_transition" })
164164if err := registerer .Register (workspaceLatestBuildStatuses );err != nil {
165- return nil ,nil , err
165+ return nil ,err
166166}
167167
168168workspaceCreationTotal := prometheus .NewCounterVec (
@@ -175,65 +175,7 @@ func Workspaces(ctx context.Context, logger slog.Logger, registerer prometheus.R
175175[]string {"organization_name" ,"template_name" ,"preset_name" },
176176)
177177if err := registerer .Register (workspaceCreationTotal );err != nil {
178- return nil ,nil ,err
179- }
180-
181- workspaceCreationTimings := prometheus .NewHistogramVec (prometheus.HistogramOpts {
182- Namespace :"coderd" ,
183- Subsystem :"" ,
184- Name :"workspace_creation_duration_seconds" ,
185- Help :"Time to create a workspace by organization, template, preset, and type (regular or prebuild)." ,
186- Buckets : []float64 {
187- 1 ,// 1s
188- 10 ,
189- 30 ,
190- 60 ,// 1min
191- 60 * 5 ,
192- 60 * 10 ,
193- 60 * 30 ,// 30min
194- 60 * 60 ,// 1hr
195- },
196- NativeHistogramBucketFactor :1.1 ,
197- // Max number of native buckets kept at once to bound memory.
198- NativeHistogramMaxBucketNumber :100 ,
199- // Merge/flush small buckets periodically to control churn.
200- NativeHistogramMinResetDuration :time .Hour ,
201- // Treat tiny values as zero (helps with noisy near-zero latencies).
202- NativeHistogramZeroThreshold :0 ,
203- NativeHistogramMaxZeroThreshold :0 ,
204- }, []string {"organization_name" ,"template_name" ,"preset_name" ,"type" })
205- if err := registerer .Register (workspaceCreationTimings );err != nil {
206- return nil ,nil ,err
207- }
208-
209- workspaceClaimTimings := prometheus .NewHistogramVec (prometheus.HistogramOpts {
210- Namespace :"coderd" ,
211- Subsystem :"" ,
212- Name :"prebuilt_workspace_claim_duration_seconds" ,
213- Help :"Time to claim a prebuilt workspace by organization, template, and preset." ,
214- Buckets : []float64 {
215- 1 ,// 1s
216- 5 ,
217- 10 ,
218- 20 ,
219- 30 ,
220- 60 ,// 1m
221- 120 ,// 2m
222- 180 ,// 3m
223- 240 ,// 4m
224- 300 ,// 5m
225- },
226- NativeHistogramBucketFactor :1.1 ,
227- // Max number of native buckets kept at once to bound memory.
228- NativeHistogramMaxBucketNumber :100 ,
229- // Merge/flush small buckets periodically to control churn.
230- NativeHistogramMinResetDuration :time .Hour ,
231- // Treat tiny values as zero (helps with noisy near-zero latencies).
232- NativeHistogramZeroThreshold :0 ,
233- NativeHistogramMaxZeroThreshold :0 ,
234- }, []string {"organization_name" ,"template_name" ,"preset_name" })
235- if err := registerer .Register (workspaceClaimTimings );err != nil {
236- return nil ,nil ,err
178+ return nil ,err
237179}
238180
239181ctx ,cancelFunc := context .WithCancel (ctx )
@@ -318,71 +260,7 @@ func Workspaces(ctx context.Context, logger slog.Logger, registerer prometheus.R
318260return func () {
319261cancelFunc ()
320262<- done
321- },updateWorkspaceTimingsMetrics (workspaceCreationTimings ,workspaceClaimTimings ),nil
322- }
323-
324- type WorkspaceTimingType int
325-
326- const (
327- Unsupported WorkspaceTimingType = iota
328- WorkspaceCreation
329- PrebuildCreation
330- PrebuildClaim
331- )
332-
333- const (
334- workspaceTypeRegular = "regular"
335- workspaceTypePrebuild = "prebuild"
336- )
337-
338- type UpdateWorkspaceTimingMetricsFn func (
339- workspaceTimingType WorkspaceTimingType ,
340- organizationName string ,
341- templateName string ,
342- presetName string ,
343- buildTime float64 ,
344- )
345-
346- func GetTimingType (isPrebuild bool ,isClaim bool ,isWorkspaceFirstBuild bool )WorkspaceTimingType {
347- switch {
348- case isPrebuild :
349- return PrebuildCreation
350- case isClaim :
351- return PrebuildClaim
352- case isWorkspaceFirstBuild :
353- return WorkspaceCreation
354- default :
355- return Unsupported
356- }
357- }
358-
359- func updateWorkspaceTimingsMetrics (
360- workspaceCreationTimings * prometheus.HistogramVec ,
361- workspaceClaimTimings * prometheus.HistogramVec ,
362- )UpdateWorkspaceTimingMetricsFn {
363- return func (
364- workspaceTimingType WorkspaceTimingType ,
365- organizationName string ,
366- templateName string ,
367- presetName string ,
368- buildTime float64 ,
369- ) {
370- switch workspaceTimingType {
371- case WorkspaceCreation :
372- // Regular workspace creation (without prebuild pool)
373- workspaceCreationTimings .
374- WithLabelValues (organizationName ,templateName ,presetName ,workspaceTypeRegular ).Observe (buildTime )
375- case PrebuildCreation :
376- // Prebuilt workspace creation duration
377- workspaceCreationTimings .
378- WithLabelValues (organizationName ,templateName ,presetName ,workspaceTypePrebuild ).Observe (buildTime )
379- case PrebuildClaim :
380- // Prebuilt workspace claim duration
381- workspaceClaimTimings .
382- WithLabelValues (organizationName ,templateName ,presetName ).Observe (buildTime )
383- default :
384- }
385- }
263+ },nil
386264}
387265
388266// Agents tracks the total number of workspaces with labels on status.