X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/c276ce4c8dd3cf27ad6d17eca9af473f353fda55..fec23dba0d04028d842cc0e2f832ec84828f5bae:/src/store/processes/process.ts diff --git a/src/store/processes/process.ts b/src/store/processes/process.ts index 467fc8a9..ab8093b8 100644 --- a/src/store/processes/process.ts +++ b/src/store/processes/process.ts @@ -2,13 +2,12 @@ // // SPDX-License-Identifier: AGPL-3.0 -import { ContainerRequestResource } from '../../models/container-request'; -import { ContainerResource } from '../../models/container'; +import { ContainerRequestResource, ContainerRequestState } from '../../models/container-request'; +import { ContainerResource, ContainerState } from '../../models/container'; import { ResourcesState, getResource } from '~/store/resources/resources'; import { filterResources } from '../resources/resources'; -import { ResourceKind, Resource } from '~/models/resource'; +import { ResourceKind, Resource, extractUuidKind } from '~/models/resource'; import { getTimeDiff } from '~/common/formatters'; -import { SubprocessesStatus } from '~/views/process-panel/process-subprocesses-card'; import { ArvadosTheme } from '~/common/custom-theme'; export interface Process { @@ -16,16 +15,29 @@ export interface Process { container?: ContainerResource; } +export enum ProcessStatus { + CANCELLED = 'Cancelled', + COMPLETED = 'Completed', + DRAFT = 'Draft', + FAILED = 'Failed', + LOCKED = 'Locked', + QUEUED = 'Queued', + RUNNING = 'Running', + UNKNOWN = 'Unknown', +} + export const getProcess = (uuid: string) => (resources: ResourcesState): Process | undefined => { - const containerRequest = getResource(uuid)(resources); - if (containerRequest) { - if (containerRequest.containerUuid) { - const container = getResource(containerRequest.containerUuid)(resources); - if (container) { - return { containerRequest, container }; + if (extractUuidKind(uuid) === ResourceKind.CONTAINER_REQUEST) { + const containerRequest = getResource(uuid)(resources); + if (containerRequest) { + if (containerRequest.containerUuid) { + const container = getResource(containerRequest.containerUuid)(resources); + if (container) { + return { containerRequest, container }; + } } + return { containerRequest }; } - return { containerRequest }; } return; }; @@ -49,29 +61,49 @@ export const getProcessRuntime = ({ container }: Process) => ? getTimeDiff(container.finishedAt || '', container.startedAt || '') : 0; -export const getProcessStatusColor = (status: string, { customs }: ArvadosTheme) => { +export const getProcessStatusColor = (status: string, { customs, palette }: ArvadosTheme) => { switch (status) { - case SubprocessesStatus.COMPLETED: + case ProcessStatus.RUNNING: + return customs.colors.blue500; + case ProcessStatus.COMPLETED: return customs.colors.green700; - case SubprocessesStatus.CANCELED: - return customs.colors.red900; - case SubprocessesStatus.QUEUED: - return customs.colors.grey500; - case SubprocessesStatus.FAILED: + case ProcessStatus.CANCELLED: + case ProcessStatus.FAILED: return customs.colors.red900; - case SubprocessesStatus.ACTIVE: - return customs.colors.blue500; default: - return customs.colors.grey500; + return palette.grey["500"]; } }; -export const getProcessStatus = (process: Process) => - process.container - ? process.container.state - : process.containerRequest.state; +export const getProcessStatus = ({ containerRequest, container }: Process): ProcessStatus => { + switch (true) { + case containerRequest.state === ContainerRequestState.UNCOMMITTED: + return ProcessStatus.DRAFT; + + case containerRequest.priority === 0: + case container && container.state === ContainerState.CANCELLED: + return ProcessStatus.CANCELLED; + + case container && container.state === ContainerState.QUEUED: + return ProcessStatus.QUEUED; + + case container && container.state === ContainerState.LOCKED: + return ProcessStatus.LOCKED; + + case container && container.state === ContainerState.RUNNING: + return ProcessStatus.RUNNING; + + case container && container.state === ContainerState.COMPLETE && container.exitCode === 0: + return ProcessStatus.COMPLETED; + + case container && container.state === ContainerState.COMPLETE && container.exitCode !== 0: + return ProcessStatus.FAILED; + + default: + return ProcessStatus.UNKNOWN; + } +}; const isSubprocess = (containerUuid: string) => (resource: Resource) => resource.kind === ResourceKind.CONTAINER_REQUEST && (resource as ContainerRequestResource).requestingContainerUuid === containerUuid; -