@@ -49,18 +49,45 @@ WHERE tvp.desired_instances IS NOT NULL -- Consider only presets that have a pre
49
49
AND (t .id = sqlc .narg (' template_id' )::uuid OR sqlc .narg (' template_id' ) IS NULL );
50
50
51
51
-- name: GetRunningPrebuiltWorkspaces :many
52
+ WITH latest_prebuilds AS (
53
+ SELECT
54
+ workspaces .id ,
55
+ workspaces .name ,
56
+ workspaces .template_id ,
57
+ workspace_latest_builds .template_version_id ,
58
+ workspace_latest_builds .template_version_preset_id ,
59
+ workspace_latest_builds .job_id ,
60
+ workspaces .created_at
61
+ FROM workspace_latest_builds
62
+ JOIN workspaces ON workspaces .id = workspace_latest_builds .workspace_id
63
+ WHERE workspace_latest_builds .transition = ' start' ::workspace_transition
64
+ AND workspace_latest_builds .job_status = ' succeeded' ::provisioner_job_status
65
+ AND workspaces .owner_id = ' c42fdf75-3097-471c-8c33-fb52454d81c0' ::UUID
66
+ AND NOT workspaces .deleted
67
+ ),
68
+ ready_agents AS (
69
+ SELECT
70
+ latest_prebuilds .job_id ,
71
+ BOOL_AND(workspace_agents .lifecycle_state = ' ready' ::workspace_agent_lifecycle_state)::boolean AS ready
72
+ FROM latest_prebuilds
73
+ JOIN workspace_resources ON workspace_resources .job_id = latest_prebuilds .job_id
74
+ JOIN workspace_agents ON workspace_agents .resource_id = workspace_resources .id
75
+ WHERE workspace_agents .deleted = false
76
+ AND workspace_agents .parent_id IS NULL
77
+ GROUP BY latest_prebuilds .job_id
78
+ )
52
79
SELECT
53
- p .id ,
54
- p .name ,
55
- p .template_id ,
56
- b .template_version_id ,
57
- p . current_preset_id AS current_preset_id,
58
- p . ready ,
59
- p . created_at
60
- FROM workspace_prebuilds p
61
- INNER JOIN workspace_latest_builds b ON b . workspace_id = p . id
62
- WHERE ( b . transition = ' start ' ::workspace_transition
63
- AND b . job_status = ' succeeded ' ::provisioner_job_status) ;
80
+ latest_prebuilds .id ,
81
+ latest_prebuilds .name ,
82
+ latest_prebuilds .template_id ,
83
+ latest_prebuilds .template_version_id ,
84
+ -- TODO(cian): this can be null, which differs from prebuilt_workspaces view.
85
+ latest_prebuilds . template_version_preset_id AS current_preset_id ,
86
+ COALESCE( ready_agents . ready , false):: boolean AS ready,
87
+ latest_prebuilds . created_at
88
+ FROM latest_prebuilds
89
+ LEFT JOIN ready_agents ON ready_agents . job_id = latest_prebuilds . job_id
90
+ ;
64
91
65
92
-- name: CountInProgressPrebuilds :many
66
93
-- CountInProgressPrebuilds returns the number of in-progress prebuilds, grouped by preset ID and transition.
0 commit comments