taskFromDBTaskAndWorkspace creates a codersdk.Task response from the task database record and workspace.
(dbTask database.Task, ws codersdk.Workspace)
| 259 | // taskFromDBTaskAndWorkspace creates a codersdk.Task response from the task |
| 260 | // database record and workspace. |
| 261 | func taskFromDBTaskAndWorkspace(dbTask database.Task, ws codersdk.Workspace) codersdk.Task { |
| 262 | var taskAgentLifecycle *codersdk.WorkspaceAgentLifecycle |
| 263 | var taskAgentHealth *codersdk.WorkspaceAgentHealth |
| 264 | var taskAppHealth *codersdk.WorkspaceAppHealth |
| 265 | |
| 266 | if dbTask.WorkspaceAgentLifecycleState.Valid { |
| 267 | taskAgentLifecycle = ptr.Ref(codersdk.WorkspaceAgentLifecycle(dbTask.WorkspaceAgentLifecycleState.WorkspaceAgentLifecycleState)) |
| 268 | } |
| 269 | if dbTask.WorkspaceAppHealth.Valid { |
| 270 | taskAppHealth = ptr.Ref(codersdk.WorkspaceAppHealth(dbTask.WorkspaceAppHealth.WorkspaceAppHealth)) |
| 271 | } |
| 272 | |
| 273 | // If we have an agent ID from the task, find the agent health info |
| 274 | if dbTask.WorkspaceAgentID.Valid { |
| 275 | findTaskAgentLoop: |
| 276 | for _, resource := range ws.LatestBuild.Resources { |
| 277 | for _, agent := range resource.Agents { |
| 278 | if agent.ID == dbTask.WorkspaceAgentID.UUID { |
| 279 | taskAgentHealth = &agent.Health |
| 280 | break findTaskAgentLoop |
| 281 | } |
| 282 | } |
| 283 | } |
| 284 | } |
| 285 | |
| 286 | currentState := deriveTaskCurrentState(dbTask, ws, taskAgentLifecycle, taskAppHealth) |
| 287 | |
| 288 | return codersdk.Task{ |
| 289 | ID: dbTask.ID, |
| 290 | OrganizationID: dbTask.OrganizationID, |
| 291 | OwnerID: dbTask.OwnerID, |
| 292 | OwnerName: dbTask.OwnerUsername, |
| 293 | OwnerAvatarURL: dbTask.OwnerAvatarUrl, |
| 294 | Name: dbTask.Name, |
| 295 | DisplayName: dbTask.DisplayName, |
| 296 | TemplateID: ws.TemplateID, |
| 297 | TemplateVersionID: dbTask.TemplateVersionID, |
| 298 | TemplateName: ws.TemplateName, |
| 299 | TemplateDisplayName: ws.TemplateDisplayName, |
| 300 | TemplateIcon: ws.TemplateIcon, |
| 301 | WorkspaceID: dbTask.WorkspaceID, |
| 302 | WorkspaceName: ws.Name, |
| 303 | WorkspaceBuildNumber: dbTask.WorkspaceBuildNumber.Int32, |
| 304 | WorkspaceStatus: ws.LatestBuild.Status, |
| 305 | WorkspaceAgentID: dbTask.WorkspaceAgentID, |
| 306 | WorkspaceAgentLifecycle: taskAgentLifecycle, |
| 307 | WorkspaceAgentHealth: taskAgentHealth, |
| 308 | WorkspaceAppID: dbTask.WorkspaceAppID, |
| 309 | InitialPrompt: dbTask.Prompt, |
| 310 | Status: codersdk.TaskStatus(dbTask.Status), |
| 311 | CurrentState: currentState, |
| 312 | CreatedAt: dbTask.CreatedAt, |
| 313 | UpdatedAt: ws.UpdatedAt, |
| 314 | } |
| 315 | } |
| 316 | |
| 317 | // appStatusStateToTaskState converts a WorkspaceAppStatusState to a |
| 318 | // TaskState. The two enums mostly share values but "failure" in the |
no test coverage detected