(resources []codersdk.WorkspaceResource, devcontainer codersdk.WorkspaceAgentDevcontainer, index, total int, wro WorkspaceResourcesOptions)
| 192 | } |
| 193 | |
| 194 | func renderDevcontainerRow(resources []codersdk.WorkspaceResource, devcontainer codersdk.WorkspaceAgentDevcontainer, index, total int, wro WorkspaceResourcesOptions) []table.Row { |
| 195 | var rows []table.Row |
| 196 | |
| 197 | // If the devcontainer is running and has an associated agent, we want to |
| 198 | // display the agent's details. Otherwise, we just display the devcontainer |
| 199 | // name and status. |
| 200 | var subAgent *codersdk.WorkspaceAgent |
| 201 | displayName := devcontainer.Name |
| 202 | if devcontainer.Agent != nil && devcontainer.Status == codersdk.WorkspaceAgentDevcontainerStatusRunning { |
| 203 | for _, resource := range resources { |
| 204 | if agent, found := slice.Find(resource.Agents, func(agent codersdk.WorkspaceAgent) bool { |
| 205 | return agent.ID == devcontainer.Agent.ID |
| 206 | }); found { |
| 207 | subAgent = &agent |
| 208 | break |
| 209 | } |
| 210 | } |
| 211 | if subAgent != nil { |
| 212 | displayName = subAgent.Name |
| 213 | displayName += fmt.Sprintf(" (%s, %s)", subAgent.OperatingSystem, subAgent.Architecture) |
| 214 | } |
| 215 | } |
| 216 | |
| 217 | if devcontainer.Container != nil { |
| 218 | displayName += " " + pretty.Sprint(DefaultStyles.Keyword, "["+devcontainer.Container.FriendlyName+"]") |
| 219 | } |
| 220 | |
| 221 | // Build the main row. |
| 222 | row := table.Row{ |
| 223 | fmt.Sprintf(" %s─ %s", renderPipe(index, total), displayName), |
| 224 | } |
| 225 | |
| 226 | // Add status, health, and version columns. |
| 227 | if !wro.HideAgentState { |
| 228 | if subAgent != nil { |
| 229 | row = append(row, renderAgentStatus(*subAgent)) |
| 230 | row = append(row, renderAgentHealth(*subAgent)) |
| 231 | row = append(row, renderAgentVersion(subAgent.Version, wro.ServerVersion)) |
| 232 | } else { |
| 233 | row = append(row, renderDevcontainerStatus(devcontainer.Status)) |
| 234 | row = append(row, "") // No health for devcontainer without agent. |
| 235 | row = append(row, "") // No version for devcontainer without agent. |
| 236 | } |
| 237 | } |
| 238 | |
| 239 | // Add access column. |
| 240 | if !wro.HideAccess { |
| 241 | if subAgent != nil { |
| 242 | accessString := fmt.Sprintf("coder ssh %s.%s", wro.WorkspaceName, subAgent.Name) |
| 243 | row = append(row, pretty.Sprint(DefaultStyles.Code, accessString)) |
| 244 | } else { |
| 245 | row = append(row, "") // No access for devcontainers without agent. |
| 246 | } |
| 247 | } |
| 248 | |
| 249 | rows = append(rows, row) |
| 250 | |
| 251 | // Add error message if present. |
no test coverage detected