@@ -49,18 +49,83 @@ WHERE tvp.desired_instances IS NOT NULL -- Consider only presets that have a pre
4949 AND (t .id = sqlc .narg (' template_id' )::uuid OR sqlc .narg (' template_id' ) IS NULL );
5050
5151-- name: GetRunningPrebuiltWorkspaces :many
52+ WITH
53+ latest_prebuilds
54+ AS (
55+ SELECT
56+ workspaces .name ,
57+ workspaces .template_id ,
58+ latest_build .id ,
59+ latest_build .workspace_id ,
60+ latest_build .template_version_id ,
61+ latest_build .job_id ,
62+ latest_build .template_version_preset_id ,
63+ latest_build .created_at
64+ FROM
65+ workspaces
66+ LEFT JOIN LATERAL (
67+ SELECT
68+ workspace_builds .id ,
69+ workspace_builds .workspace_id ,
70+ workspace_builds .template_version_id ,
71+ workspace_builds .job_id ,
72+ workspace_builds .template_version_preset_id ,
73+ workspace_builds .transition ,
74+ workspace_builds .created_at ,
75+ provisioner_jobs .job_status
76+ FROM
77+ workspace_builds
78+ JOIN provisioner_jobs ON
79+ provisioner_jobs .id
80+ = workspace_builds .job_id
81+ WHERE
82+ workspace_builds .workspace_id
83+ = workspaces .id
84+ ORDER BY
85+ workspace_builds .build_number
86+ DESC
87+ LIMIT
88+ 1
89+ )
90+ AS latest_build ON true
91+ WHERE
92+ workspaces .deleted = false
93+ AND workspaces .owner_id
94+ = ' c42fdf75-3097-471c-8c33-fb52454d81c0' ::UUID
95+ AND latest_build .transition
96+ = ' start' ::workspace_transition
97+ AND latest_build .job_status
98+ = ' succeeded' ::provisioner_job_status
99+ ),
100+ agent_readiness
101+ AS (
102+ SELECT
103+ latest_prebuilds .workspace_id AS workspace_id,
104+ BOOL_AND(workspace_agents .lifecycle_state = ' ready' ::workspace_agent_lifecycle_state)::boolean AS ready
105+ FROM
106+ latest_prebuilds
107+ LEFT JOIN workspace_resources ON
108+ workspace_resources .job_id = latest_prebuilds .job_id
109+ LEFT JOIN workspace_agents ON
110+ workspace_agents .resource_id = workspace_resources .id
111+ GROUP BY
112+ latest_prebuilds .workspace_id
113+ )
52114SELECT
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);
115+ latest_prebuilds .id ,
116+ latest_prebuilds .name ,
117+ latest_prebuilds .template_id ,
118+ latest_prebuilds .template_version_id ,
119+ latest_prebuilds .template_version_preset_id AS current_preset_id,
120+ agent_readiness .ready ,
121+ latest_prebuilds .created_at
122+ FROM
123+ latest_prebuilds
124+ JOIN agent_readiness ON
125+ agent_readiness .workspace_id = latest_prebuilds .workspace_id
126+ WHERE
127+ agent_readiness .ready
128+ ;
64129
65130-- name: CountInProgressPrebuilds :many
66131-- CountInProgressPrebuilds returns the number of in-progress prebuilds, grouped by preset ID and transition.
0 commit comments