import PropTypes from 'prop-types' import React from 'react' import { Button, EmptyState, EmptyStateBody, EmptyStateIcon, Modal, ModalVariant, Title } from '@patternfly/react-core' import { CheckCircleIcon } from '@patternfly/react-icons' import { Table, Thead, Tr, Th, Tbody, Td } from '@patternfly/react-table' import { useJobReport } from '../../data/project' function formatDuration(seconds) { if (seconds < 60) { return `${seconds}s` } const minutes = Math.floor(seconds / 60) const remainingSeconds = seconds % 60 if (minutes < 60) { return `${minutes}m ${remainingSeconds}s` } const hours = Math.floor(minutes / 60) const remainingMinutes = minutes % 60 return `${hours}h ${remainingMinutes}m ${remainingSeconds}s` } function JobReportModal({ jobId, isOpen, onClose }) { const { data: report, isLoading } = useJobReport(jobId, { enabled: isOpen }) const logs = report?.logs || [] const error = report?.error const summary = report?.summary const createdAt = report?.createdAt const startedAt = report?.startedAt const actions = [ , ] return ( {isLoading &&
Loading report...
} {!isLoading && (createdAt || startedAt) && (
{createdAt && (
Created: {new Date(createdAt).toLocaleString()}
)} {startedAt && (
Started: {new Date(startedAt).toLocaleString()}
)}
)} {!isLoading && logs.length === 0 && !error && ( <> {summary && (summary.runtimeSeconds !== undefined || summary.waitTimeSeconds !== undefined) && (
{summary.runtimeSeconds !== undefined && (
Runtime: {formatDuration(summary.runtimeSeconds)}
)} {summary.waitTimeSeconds !== undefined && (
Queue Wait Time: {formatDuration(summary.waitTimeSeconds)}
)}
)} No warnings or errors This simulation completed successfully with no issues. )} {!isLoading && error && (
Error
Type: {error.type}
Message: {error.message}
{error.stackTrace && (
Stack Trace
                                    {error.stackTrace}
                                
)}
)} {!isLoading && logs.length > 0 && (
{summary && (
Summary: {summary.totalWarnings} warning(s), {summary.totalErrors} error(s) {summary.runtimeSeconds !== undefined && ( <> {' | '} Runtime: {formatDuration(summary.runtimeSeconds)} )} {summary.waitTimeSeconds !== undefined && ( <> {' | '} Queue Wait Time: {formatDuration(summary.waitTimeSeconds)} )}
)} {logs.map((log, index) => ( ))}
Time Level Logger Message
{new Date(log.timestamp).toLocaleTimeString()} {log.level} {log.logger} {log.message}
)}
) } JobReportModal.propTypes = { jobId: PropTypes.number.isRequired, isOpen: PropTypes.bool, onClose: PropTypes.func.isRequired, } JobReportModal.defaultProps = { isOpen: false, } export default JobReportModal