@@ -49,18 +49,83 @@ WHERE tvp.desired_instances IS NOT NULL -- Consider only presets that have a pre
49
49
AND (t .id = sqlc .narg (' template_id' )::uuidOR sqlc .narg (' template_id' ) ISNULL );
50
50
51
51
-- 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_jobsON
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_buildON 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_resourcesON
108
+ workspace_resources .job_id = latest_prebuilds .job_id
109
+ LEFT JOIN workspace_agentsON
110
+ workspace_agents .resource_id = workspace_resources .id
111
+ GROUP BY
112
+ latest_prebuilds .workspace_id
113
+ )
52
114
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 bON 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_readinessON
125
+ agent_readiness .workspace_id = latest_prebuilds .workspace_id
126
+ WHERE
127
+ agent_readiness .ready
128
+ ;
64
129
65
130
-- name: CountInProgressPrebuilds :many
66
131
-- CountInProgressPrebuilds returns the number of in-progress prebuilds, grouped by preset ID and transition.