From 13a4fb8f8b684037e9fab2ec3f94a17e386ba80b Mon Sep 17 00:00:00 2001 From: zivglik Date: Wed, 31 May 2023 14:06:21 +0300 Subject: [PATCH 1/5] add error msg when status failed scheduling --- src/Routes/Tables/Jobs/NodeLogs.js | 20 ++++++++++++++++++-- src/Routes/Tables/Jobs/graphUtils/nodes.js | 8 ++++++-- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/Routes/Tables/Jobs/NodeLogs.js b/src/Routes/Tables/Jobs/NodeLogs.js index b3fdbf82c..fd1145659 100644 --- a/src/Routes/Tables/Jobs/NodeLogs.js +++ b/src/Routes/Tables/Jobs/NodeLogs.js @@ -30,6 +30,7 @@ import { FlexBox } from 'components/common'; import LogsViewer from 'components/common/LogsViewer'; import { useLogs } from 'hooks/graphql'; import { useDebounceCallback } from '@react-hook/debounce'; +import GRAPH_TYPES from './graphUtils/types'; import OptionBox from './GraphTab/OptionBox'; const Container = styled.div` @@ -217,7 +218,7 @@ const NodeLogs = ({ node, taskDetails }) => { - {node.status !== 'FailedScheduling' ? ( + {node.status !== GRAPH_TYPES.STATUS.FAILED_SCHEDULING ? ( { )} ) : ( - + (node.warnings && ( + + )) || + (node.error && ( + + )) )} diff --git a/src/Routes/Tables/Jobs/graphUtils/nodes.js b/src/Routes/Tables/Jobs/graphUtils/nodes.js index 8327cfb33..ac8077687 100644 --- a/src/Routes/Tables/Jobs/graphUtils/nodes.js +++ b/src/Routes/Tables/Jobs/graphUtils/nodes.js @@ -76,7 +76,11 @@ const statusToGroup = status => const setNodeGroup = node => { const { status } = node; - return { ...node, group: statusToGroup(status) }; + const groupValue = + status === STATUS.FAILED_SCHEDULING && !!node.warnings + ? NODE_GROUPS.WARNING + : statusToGroup(status); + return { ...node, group: groupValue }; }; const OverrideGroup = collection => (currentGroup, resultedGroup) => @@ -143,7 +147,7 @@ export const formatNode = (normalizedPipeline, pipelineKind) => node => { id: meta.nodeName, label: meta?.extra?.batch ? `${meta.nodeName} (${meta.extra.batch})` - : `${meta.nodeName} ${node.status === 'FailedScheduling' ? ' (!) ' : ''}`, + : `${meta.nodeName} `, }; /** @type {NodeOptions} */ const batchStyling = isBatch From d8266890e8f9e8cdc961fb5c3abac5c2c047ad6f Mon Sep 17 00:00:00 2001 From: zivglik Date: Thu, 1 Jun 2023 10:27:44 +0300 Subject: [PATCH 2/5] fix error ui --- src/Routes/Tables/Jobs/NodeLogs.js | 38 ++++++++++++++++-------------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/src/Routes/Tables/Jobs/NodeLogs.js b/src/Routes/Tables/Jobs/NodeLogs.js index fd1145659..cd325bb36 100644 --- a/src/Routes/Tables/Jobs/NodeLogs.js +++ b/src/Routes/Tables/Jobs/NodeLogs.js @@ -249,10 +249,10 @@ const NodeLogs = ({ node, taskDetails }) => { )} ) : ( - (node.warnings && ( + (node.warnings.length > 0 && ( @@ -278,21 +278,23 @@ const NodeLogs = ({ node, taskDetails }) => { {errorMsgImage && } {errorMsgImage}{' '} - - {isLoadLog ? ( - - ) : ( - 0 ? logs : logErrorNode} - id={node?.nodeName ?? ''} - emptyDescription={ - logMode === logModes.ALGORITHM - ? 'No algorithm logs' - : 'No system logs' - } - /> - )} - + {node.status !== GRAPH_TYPES.STATUS.FAILED_SCHEDULING && ( + + {isLoadLog ? ( + + ) : ( + 0 ? logs : logErrorNode} + id={node?.nodeName ?? ''} + emptyDescription={ + logMode === logModes.ALGORITHM + ? 'No algorithm logs' + : 'No system logs' + } + /> + )} + + )} ); }; @@ -310,7 +312,7 @@ NodeLogs.propTypes = { endTime: PropTypes.number, batch: PropTypes.arrayOf(PropTypes.object), status: PropTypes.string, - warnings: PropTypes.string, + warnings: PropTypes.arrayOf(PropTypes.string), }).isRequired, }; export default React.memo(NodeLogs); From bf89338367554aa207e8a43bb2d3d81b0aec8906 Mon Sep 17 00:00:00 2001 From: zivglik Date: Thu, 1 Jun 2023 11:07:31 +0300 Subject: [PATCH 3/5] fix error show when has many tasks --- src/Routes/Tables/Jobs/NodeLogs.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Routes/Tables/Jobs/NodeLogs.js b/src/Routes/Tables/Jobs/NodeLogs.js index cd325bb36..3f872c7d5 100644 --- a/src/Routes/Tables/Jobs/NodeLogs.js +++ b/src/Routes/Tables/Jobs/NodeLogs.js @@ -68,6 +68,9 @@ const NodeLogs = ({ node, taskDetails }) => { const [errorMsgImage, setErrorMsgImage] = useState(undefined); const [logErrorNode, setLogErrorNode] = useState([]); const [linkKibana, setLinkKibana] = useState(); + const [isStatusFailedSchedulin] = useState( + node.status === GRAPH_TYPES.STATUS.FAILED_SCHEDULING + ); const oTask = useMemo( () => taskDetails.find(t => t.taskId === currentTask) || taskDetails[0], @@ -199,7 +202,9 @@ const NodeLogs = ({ node, taskDetails }) => { Source :{' '} + setLogMode(value)}> { - {node.status !== GRAPH_TYPES.STATUS.FAILED_SCHEDULING ? ( + {!isStatusFailedSchedulin ? ( Date: Mon, 5 Jun 2023 09:58:27 +0300 Subject: [PATCH 4/5] add Failed Scheduling Task --- src/Routes/Tables/Jobs/NodeLogs.js | 54 +++++++++++++++++----- src/Routes/Tables/Jobs/graphUtils/nodes.js | 2 +- 2 files changed, 43 insertions(+), 13 deletions(-) diff --git a/src/Routes/Tables/Jobs/NodeLogs.js b/src/Routes/Tables/Jobs/NodeLogs.js index 3f872c7d5..8afeefde9 100644 --- a/src/Routes/Tables/Jobs/NodeLogs.js +++ b/src/Routes/Tables/Jobs/NodeLogs.js @@ -58,6 +58,24 @@ const ErrorMsg = { ERROR: 'Algorithm down', }; +const msgAlertFailedScheduling = (typeText, message) => { + const lines = message.split('\n'); + const [firstLine, ...remainingLines] = lines; + + return ( +
+

+ + {typeText} : {firstLine} + +

+ {remainingLines.map(line => ( +
{line}
+ ))} +
+ ); +}; + const NodeLogs = ({ node, taskDetails }) => { const { kibanaUrl } = useSelector(selectors.connection); const [currentTask, setCurrentTask] = useState(undefined); @@ -68,14 +86,19 @@ const NodeLogs = ({ node, taskDetails }) => { const [errorMsgImage, setErrorMsgImage] = useState(undefined); const [logErrorNode, setLogErrorNode] = useState([]); const [linkKibana, setLinkKibana] = useState(); - const [isStatusFailedSchedulin] = useState( - node.status === GRAPH_TYPES.STATUS.FAILED_SCHEDULING + const [isStatusFailedScheduling] = useState( + node?.status === GRAPH_TYPES.STATUS.FAILED_SCHEDULING || false ); + const [ + isStatusFailedSchedulingTask, + setIsStatusFailedSchedulingTask, + ] = useState(false); const oTask = useMemo( () => taskDetails.find(t => t.taskId === currentTask) || taskDetails[0], [currentTask, taskDetails] ); + const { taskId, podName } = oTask; const { logs, msgPodStatus } = useLogs({ @@ -90,6 +113,9 @@ const NodeLogs = ({ node, taskDetails }) => { useEffect(() => { setCurrentTask(taskId); setIsLoadLog(false); + setIsStatusFailedSchedulingTask( + oTask?.status === GRAPH_TYPES.STATUS.FAILED_SCHEDULING || false + ); }, [taskId]); useEffect(() => { @@ -204,7 +230,9 @@ const NodeLogs = ({ node, taskDetails }) => { setLogMode(value)}> { - {!isStatusFailedSchedulin ? ( + {!(isStatusFailedSchedulingTask || isStatusFailedScheduling) ? ( { )} ) : ( - (node.warnings.length > 0 && ( + (node?.warnings?.length > 0 && ( )) || - (node.error && ( + (node?.error && ( - )) + )) || + null )} @@ -283,7 +313,7 @@ const NodeLogs = ({ node, taskDetails }) => { {errorMsgImage && } {errorMsgImage}{' '} - {node.status !== GRAPH_TYPES.STATUS.FAILED_SCHEDULING && ( + {!(isStatusFailedSchedulingTask || isStatusFailedScheduling) && ( {isLoadLog ? ( diff --git a/src/Routes/Tables/Jobs/graphUtils/nodes.js b/src/Routes/Tables/Jobs/graphUtils/nodes.js index ac8077687..8eb3e6e91 100644 --- a/src/Routes/Tables/Jobs/graphUtils/nodes.js +++ b/src/Routes/Tables/Jobs/graphUtils/nodes.js @@ -77,7 +77,7 @@ const statusToGroup = status => const setNodeGroup = node => { const { status } = node; const groupValue = - status === STATUS.FAILED_SCHEDULING && !!node.warnings + status === STATUS.FAILED_SCHEDULING && node.warnings.length > 0 ? NODE_GROUPS.WARNING : statusToGroup(status); return { ...node, group: groupValue }; From 26b349e367afa3698a9250725585e43a40ee0fdc Mon Sep 17 00:00:00 2001 From: zivglik Date: Mon, 5 Jun 2023 12:37:07 +0300 Subject: [PATCH 5/5] fix Warning in task --- src/Routes/Tables/Jobs/GraphTab/Details.js | 16 +++++++++++++--- src/Routes/Tables/Jobs/NodeLogs.js | 4 +--- src/Routes/Tables/Jobs/graphUtils/nodes.js | 9 +++++++-- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/Routes/Tables/Jobs/GraphTab/Details.js b/src/Routes/Tables/Jobs/GraphTab/Details.js index c9b9fc818..ecdf3e4d5 100644 --- a/src/Routes/Tables/Jobs/GraphTab/Details.js +++ b/src/Routes/Tables/Jobs/GraphTab/Details.js @@ -113,13 +113,19 @@ const Details = ({ node, jobId, isDisabledBtnRunDebug }) => { { label: 'Logs', key: 'logs-tab', - children: , + children: ( + + ), }, { label: 'Algorithm Details', key: 'algorithms-tab', children: ( - + { label: 'Input Output Details', key: 'io-details-tab', children: ( - + ), }, ], diff --git a/src/Routes/Tables/Jobs/NodeLogs.js b/src/Routes/Tables/Jobs/NodeLogs.js index 8afeefde9..1be621177 100644 --- a/src/Routes/Tables/Jobs/NodeLogs.js +++ b/src/Routes/Tables/Jobs/NodeLogs.js @@ -137,9 +137,7 @@ const NodeLogs = ({ node, taskDetails }) => { }, [msgPodStatus]); const options = taskDetails.map((task, indexTaskItem) => ( - // TODO: implement a better key - // eslint-disable-next-line - + const setNodeGroup = node => { const { status } = node; + const groupValue = - status === STATUS.FAILED_SCHEDULING && node.warnings.length > 0 + status === STATUS.FAILED_SCHEDULING && node?.warnings?.length > 0 ? NODE_GROUPS.WARNING : statusToGroup(status); return { ...node, group: groupValue }; @@ -87,7 +88,7 @@ const OverrideGroup = collection => (currentGroup, resultedGroup) => collection.has(resultedGroup) ? resultedGroup : currentGroup; const splitBatchToGroups = ( - { nodeName, algorithmName, batchInfo, level = 0, batch }, + { nodeName, algorithmName, batchInfo, level = 0, batch, warnings }, isStreaming ) => { const itemsGroups = batch.map(item => item.status).map(statusToGroup); @@ -113,6 +114,10 @@ const splitBatchToGroups = ( group = overrideGroup(group, NODE_GROUPS.WARNING); group = overrideGroup(group, NODE_GROUPS.ERRORS); + if (warnings?.length > 0) { + group = NODE_GROUPS.WARNING; + } + return { nodeName, algorithmName,