(view *InspectView)
| 261 | } |
| 262 | |
| 263 | func inspectNextAction(view *InspectView) InspectNextAction { |
| 264 | if view == nil { |
| 265 | return InspectNextActionWaitingForSession |
| 266 | } |
| 267 | if inspectHasRecoveryDiagnostic(view.Diagnostics) { |
| 268 | return InspectNextActionRecoveryRequired |
| 269 | } |
| 270 | if view.CurrentRun == nil { |
| 271 | if isTerminalTaskStatus(view.Task.Status) { |
| 272 | return InspectNextActionTerminal |
| 273 | } |
| 274 | return InspectNextActionWaitingForSession |
| 275 | } |
| 276 | switch view.CurrentRun.Status.Normalize() { |
| 277 | case TaskRunStatusQueued: |
| 278 | if inspectHasDiagnostic(view.Diagnostics, diagnosticcontract.CodeTaskRunStranded) { |
| 279 | return InspectNextActionStranded |
| 280 | } |
| 281 | if view.Scheduler.Paused { |
| 282 | return InspectNextActionWaitingForSession |
| 283 | } |
| 284 | if view.SessionCatalogPresent && view.EligibleSessionCount > 0 { |
| 285 | return InspectNextActionClaimAvailable |
| 286 | } |
| 287 | return InspectNextActionWaitingForSession |
| 288 | case TaskRunStatusClaimed, TaskRunStatusStarting, TaskRunStatusRunning: |
| 289 | return InspectNextActionRunning |
| 290 | case TaskRunStatusCompleted, TaskRunStatusFailed, TaskRunStatusCanceled: |
| 291 | return InspectNextActionTerminal |
| 292 | default: |
| 293 | return InspectNextActionWaitingForSession |
| 294 | } |
| 295 | } |
| 296 | |
| 297 | func inspectHasRecoveryDiagnostic(items []diagnosticcontract.DiagnosticItem) bool { |
| 298 | for _, code := range []string{ |
no test coverage detected