1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
5 import React from 'react';
14 } from "@material-ui/core";
15 import ExpandMoreIcon from '@material-ui/icons/ExpandMore';
16 import { RuntimeStatus } from "models/runtime-status";
17 import { ArvadosTheme } from 'common/custom-theme';
18 import classNames from 'classnames';
20 type CssRules = 'root'
30 | 'disabledPanelSummary';
32 const styles: StyleRulesCallback<CssRules> = (theme: ArvadosTheme) => ({
34 marginBottom: theme.spacing.unit * 1,
40 paddingLeft: theme.spacing.unit * 1,
41 paddingRight: theme.spacing.unit * 1,
44 whiteSpace: 'pre-line',
47 paddingLeft: theme.spacing.unit * 1,
48 paddingRight: theme.spacing.unit * 1,
54 whiteSpace: 'pre-line',
57 color: theme.customs.colors.red900,
60 backgroundColor: theme.customs.colors.red100,
64 backgroundColor: theme.customs.colors.yellow100,
67 color: theme.customs.colors.yellow900,
69 disabledPanelSummary: {
71 pointerEvents: 'none',
74 export interface ProcessRuntimeStatusDataProps {
75 runtimeStatus: RuntimeStatus | undefined;
76 containerCount: number;
79 type ProcessRuntimeStatusProps = ProcessRuntimeStatusDataProps & WithStyles<CssRules>;
81 export const ProcessRuntimeStatus = withStyles(styles)(
82 ({ runtimeStatus, containerCount, classes }: ProcessRuntimeStatusProps) => {
83 return <div className={classes.root}>
84 { runtimeStatus?.error &&
85 <div data-cy='process-runtime-status-error'><ExpansionPanel className={classes.error} elevation={0}>
86 <ExpansionPanelSummary className={classNames(classes.summary, classes.detailsText)} expandIcon={<ExpandMoreIcon />}>
87 <Typography className={classNames(classes.heading, classes.errorColor)}>
88 {`Error: ${runtimeStatus.error }`}
90 </ExpansionPanelSummary>
91 <ExpansionPanelDetails className={classes.details}>
92 <Typography className={classNames(classes.errorColor, classes.detailsText)}>
93 {runtimeStatus?.errorDetail || 'No additional error details available'}
95 </ExpansionPanelDetails>
96 </ExpansionPanel></div>
98 { runtimeStatus?.warning &&
99 <div data-cy='process-runtime-status-warning' ><ExpansionPanel className={classes.warning} elevation={0}>
100 <ExpansionPanelSummary className={classNames(classes.summary, classes.detailsText)} expandIcon={<ExpandMoreIcon />}>
101 <Typography className={classNames(classes.heading, classes.warningColor)}>
102 {`Warning: ${runtimeStatus.warning }`}
104 </ExpansionPanelSummary>
105 <ExpansionPanelDetails className={classes.details}>
106 <Typography className={classNames(classes.warningColor, classes.detailsText)}>
107 {runtimeStatus?.warningDetail || 'No additional warning details available'}
109 </ExpansionPanelDetails>
110 </ExpansionPanel></div>
112 { containerCount > 1 &&
113 <div data-cy='process-runtime-status-warning' ><ExpansionPanel className={classes.warning} elevation={0} expanded={false}>
114 <ExpansionPanelSummary className={classNames(classes.summary, classes.detailsText, classes.disabledPanelSummary)}>
115 <Typography className={classNames(classes.heading, classes.warningColor)}>
116 {`Warning: Process retried ${containerCount - 1} time${containerCount > 2 ? 's' : ''} due to failure.`}
118 </ExpansionPanelSummary>
119 </ExpansionPanel></div>