@@ -2336,40 +2336,42 @@ func (s *server) completeWorkspaceBuildJob(ctx context.Context, job database.Pro
23362336}
23372337
23382338// Update workspace (regular and prebuild) timing metrics
2339- if s .metrics != nil {
2340- // Only consider 'start' workspace builds
2341- if workspaceBuild .Transition == database .WorkspaceTransitionStart {
2342- // Get the updated job to report the metrics with correct data
2343- updatedJob ,err := s .Database .GetProvisionerJobByID (ctx ,jobID )
2344- if err != nil {
2345- s .Logger .Error (ctx ,"get updated job from database" ,slog .Error (err ))
2346- }else
2347- // Only consider 'succeeded' provisioner jobs
2348- if updatedJob .JobStatus == database .ProvisionerJobStatusSucceeded {
2349- presetName := ""
2350- if workspaceBuild .TemplateVersionPresetID .Valid {
2351- preset ,err := s .Database .GetPresetByID (ctx ,workspaceBuild .TemplateVersionPresetID .UUID )
2352- if err != nil {
2353- if ! errors .Is (err ,sql .ErrNoRows ) {
2354- s .Logger .Error (ctx ,"get preset by ID for workspace timing metrics" ,slog .Error (err ))
2355- }
2356- }else {
2357- presetName = preset .Name
2339+ // Only consider 'start' workspace builds
2340+ if s .metrics != nil && workspaceBuild .Transition == database .WorkspaceTransitionStart {
2341+ // Get the updated job to report the metrics with correct data
2342+ updatedJob ,err := s .Database .GetProvisionerJobByID (ctx ,jobID )
2343+ if err != nil {
2344+ s .Logger .Error (ctx ,"get updated job from database" ,slog .Error (err ))
2345+ }else
2346+ // Only consider 'succeeded' provisioner jobs
2347+ if updatedJob .JobStatus == database .ProvisionerJobStatusSucceeded {
2348+ presetName := ""
2349+ if workspaceBuild .TemplateVersionPresetID .Valid {
2350+ preset ,err := s .Database .GetPresetByID (ctx ,workspaceBuild .TemplateVersionPresetID .UUID )
2351+ if err != nil {
2352+ if ! errors .Is (err ,sql .ErrNoRows ) {
2353+ s .Logger .Error (ctx ,"get preset by ID for workspace timing metrics" ,slog .Error (err ))
23582354}
2355+ }else {
2356+ presetName = preset .Name
23592357}
2358+ }
23602359
2361- buildTime := updatedJob .CompletedAt .Time .Sub (updatedJob .StartedAt .Time ).Seconds ()
2360+ buildTime := updatedJob .CompletedAt .Time .Sub (updatedJob .StartedAt .Time ).Seconds ()
2361+ flags := WorkspaceTimingFlags {
2362+ // Is a prebuilt workspace creation build
2363+ IsPrebuild :input .PrebuiltWorkspaceBuildStage .IsPrebuild (),
2364+ // Is a prebuilt workspace claim build
2365+ IsClaim :input .PrebuiltWorkspaceBuildStage .IsPrebuiltWorkspaceClaim (),
2366+ // Is a regular workspace creation build
2367+ // Only consider the first build number for regular workspaces
2368+ IsFirstBuild :workspaceBuild .BuildNumber == 1 ,
2369+ }
2370+ // Only track metrics for prebuild creation, prebuild claims and workspace creation
2371+ if flags .IsTrackable () {
23622372s .metrics .UpdateWorkspaceTimingsMetrics (
23632373ctx ,
2364- WorkspaceTimingFlags {
2365- // Is a prebuilt workspace creation build
2366- IsPrebuild :input .PrebuiltWorkspaceBuildStage .IsPrebuild (),
2367- // Is a prebuilt workspace claim build
2368- IsClaim :input .PrebuiltWorkspaceBuildStage .IsPrebuiltWorkspaceClaim (),
2369- // Is a regular workspace creation build
2370- // Only consider the first build number for regular workspaces
2371- IsFirstBuild :workspaceBuild .BuildNumber == 1 ,
2372- },
2374+ flags ,
23732375workspace .OrganizationName ,
23742376workspace .TemplateName ,
23752377presetName ,