|
11 | 11 |
|
12 | 12 | WHENlatest_build.job_status='failed' THEN'error'::task_status |
13 | 13 |
|
| 14 | +WHENlatest_build.job_statusIN ('canceling','canceled') THEN'error'::task_status |
| 15 | + |
14 | 16 | WHENlatest_build.transitionIN ('stop','delete') |
15 | 17 | ANDlatest_build.job_status='succeeded' THEN'paused'::task_status |
16 | 18 |
|
|
19 | 21 |
|
20 | 22 | WHENlatest_build.transition='start'ANDlatest_build.job_statusIN ('running','succeeded') THEN |
21 | 23 | CASE |
22 | | -WHENagent_status.none THEN'initializing'::task_status |
23 | | -WHENagent_status.connecting THEN'initializing'::task_status |
24 | | -WHENagent_status.connected THEN |
| 24 | +WHENagent_status.noneORagent_status.connecting THEN'initializing'::task_status |
| 25 | +-- If the agent is shut down, but the workspace isn't |
| 26 | +-- stopped, show as error. |
| 27 | +WHENagent_status.shutdown THEN'error'::task_status |
| 28 | +-- Start failed also means connected, but we don't |
| 29 | +-- necessarily want to surface an error. |
| 30 | +WHENagent_status.connectedORagent_status.connected_start_failed THEN |
25 | 31 | CASE |
26 | | -WHENapp_status.any_unhealthy THEN'error'::task_status |
27 | | -WHENapp_status.any_initializing THEN'initializing'::task_status |
28 | | -WHENapp_status.all_healthy_or_disabled THEN'active'::task_status |
| 32 | +WHENapp_status.unhealthy THEN'error'::task_status |
| 33 | +WHENapp_status.initializing THEN'initializing'::task_status |
| 34 | +WHENapp_status.healthy_or_disabled THEN'active'::task_status |
| 35 | +-- Fall back to surfacing error in case the app isn't healthy. |
| 36 | +WHENagent_status.connected_start_failed THEN'error'::task_status |
29 | 37 | ELSE'unknown'::task_status |
30 | 38 | END |
31 | 39 | ELSE'unknown'::task_status |
32 | 40 | END |
33 | | - |
34 | 41 | ELSE'unknown'::task_status |
35 | 42 | ENDAS status, |
36 | 43 | task_app.*, |
|
62 | 69 | WHEREworkspace_build.workspace_id=tasks.workspace_id |
63 | 70 | ANDworkspace_build.build_number=task_app.workspace_build_number |
64 | 71 | ) latest_buildON TRUE |
65 | | -CROSS JOIN LATERAL ( |
| 72 | +LEFT JOIN LATERAL ( |
66 | 73 | SELECT |
67 | | -COUNT(*)=0AS none, |
68 | | -bool_or(workspace_agent.lifecycle_stateIN ('created','starting'))AS connecting, |
69 | | -bool_and(workspace_agent.lifecycle_state='ready')AS connected |
| 74 | +workspace_agent.id ISNULLAS none, |
| 75 | +-- This is essentially `IN ('shutting_down', 'shutdown_timeout', 'shutdown_error', 'off')`, |
| 76 | +-- but we cannot use it because the values were added in a migration. |
| 77 | +COALESCE(workspace_agent.lifecycle_state NOTIN ('created','starting','start_timeout','start_error','ready'), false)AS shutdown, |
| 78 | +COALESCE(workspace_agent.lifecycle_stateIN ('created','starting'), false)AS connecting, |
| 79 | +COALESCE(workspace_agent.lifecycle_stateIN ('start_timeout','start_error'), false)AS connected_start_failed, |
| 80 | +COALESCE(workspace_agent.lifecycle_state='ready', false)AS connected |
70 | 81 | FROM workspace_agents workspace_agent |
71 | 82 | WHEREworkspace_agent.id=task_app.workspace_agent_id |
72 | | -) agent_status |
73 | | -CROSS JOIN LATERAL ( |
| 83 | +) agent_statusON TRUE |
| 84 | +LEFT JOIN LATERAL ( |
74 | 85 | SELECT |
75 | | -bool_or(workspace_app.health='unhealthy')ASany_unhealthy, |
76 | | -bool_or(workspace_app.health='initializing')ASany_initializing, |
77 | | -bool_and(workspace_app.healthIN ('healthy','disabled'))ASall_healthy_or_disabled |
| 86 | +COALESCE(workspace_app.health='unhealthy', false)ASunhealthy, |
| 87 | +COALESCE(workspace_app.health='initializing', false)ASinitializing, |
| 88 | +COALESCE(workspace_app.healthIN ('healthy','disabled'), false)AShealthy_or_disabled |
78 | 89 | FROM workspace_apps workspace_app |
79 | 90 | WHEREworkspace_app.id=task_app.workspace_app_id |
80 | | -) app_status |
| 91 | +) app_statusON TRUE |
81 | 92 | WHERE |
82 | 93 | tasks.deleted_at ISNULL; |