@backstage-community/plugin-tekton 3.22.2 → 3.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -0
- package/dist/components/Charts/PipelineBars.esm.js +33 -29
- package/dist/components/Charts/PipelineBars.esm.js.map +1 -1
- package/dist/components/Icons/CriticalRiskIcon.esm.js +8 -6
- package/dist/components/Icons/CriticalRiskIcon.esm.js.map +1 -1
- package/dist/components/Icons/EqualsIcon.esm.js +8 -6
- package/dist/components/Icons/EqualsIcon.esm.js.map +1 -1
- package/dist/components/Icons/LinkToSbomIcon.esm.js +5 -5
- package/dist/components/Icons/LinkToSbomIcon.esm.js.map +1 -1
- package/dist/components/Icons/OutputIcon.esm.js +6 -8
- package/dist/components/Icons/OutputIcon.esm.js.map +1 -1
- package/dist/components/Icons/SignedBadge.esm.js +3 -3
- package/dist/components/Icons/SignedBadge.esm.js.map +1 -1
- package/dist/components/Icons/ViewLogsIcon.esm.js +6 -8
- package/dist/components/Icons/ViewLogsIcon.esm.js.map +1 -1
- package/dist/components/PipelineRunList/PipelineRunColumnHeader.esm.js +43 -41
- package/dist/components/PipelineRunList/PipelineRunColumnHeader.esm.js.map +1 -1
- package/dist/components/PipelineRunList/PipelineRunList.esm.js +92 -68
- package/dist/components/PipelineRunList/PipelineRunList.esm.js.map +1 -1
- package/dist/components/PipelineRunList/PipelineRunListSearchBar.esm.js +13 -10
- package/dist/components/PipelineRunList/PipelineRunListSearchBar.esm.js.map +1 -1
- package/dist/components/PipelineRunList/PipelineRunOutput.esm.js +17 -11
- package/dist/components/PipelineRunList/PipelineRunOutput.esm.js.map +1 -1
- package/dist/components/PipelineRunList/PipelineRunRow.esm.js +39 -24
- package/dist/components/PipelineRunList/PipelineRunRow.esm.js.map +1 -1
- package/dist/components/PipelineRunList/PipelineRunRowActions.esm.js +88 -76
- package/dist/components/PipelineRunList/PipelineRunRowActions.esm.js.map +1 -1
- package/dist/components/PipelineRunList/PipelineRunSBOMLink.esm.js +4 -4
- package/dist/components/PipelineRunList/PipelineRunSBOMLink.esm.js.map +1 -1
- package/dist/components/PipelineRunList/PipelineRunTableBody.esm.js +9 -8
- package/dist/components/PipelineRunList/PipelineRunTableBody.esm.js.map +1 -1
- package/dist/components/PipelineRunList/PipelineRunTaskStatus.esm.js +2 -2
- package/dist/components/PipelineRunList/PipelineRunTaskStatus.esm.js.map +1 -1
- package/dist/components/PipelineRunList/PipelineRunVulnerabilities.esm.js +90 -20
- package/dist/components/PipelineRunList/PipelineRunVulnerabilities.esm.js.map +1 -1
- package/dist/components/PipelineRunList/PipelineTableHeader.esm.js +26 -19
- package/dist/components/PipelineRunList/PipelineTableHeader.esm.js.map +1 -1
- package/dist/components/PipelineRunList/PlrStatus.esm.js +2 -2
- package/dist/components/PipelineRunList/PlrStatus.esm.js.map +1 -1
- package/dist/components/PipelineRunList/ResourceBadge.esm.js +6 -2
- package/dist/components/PipelineRunList/ResourceBadge.esm.js.map +1 -1
- package/dist/components/PipelineRunLogs/PipelineRunLogDialog.esm.js +52 -40
- package/dist/components/PipelineRunLogs/PipelineRunLogDialog.esm.js.map +1 -1
- package/dist/components/PipelineRunLogs/PipelineRunLogDownloader.esm.js +31 -23
- package/dist/components/PipelineRunLogs/PipelineRunLogDownloader.esm.js.map +1 -1
- package/dist/components/PipelineRunLogs/PipelineRunLogViewer.esm.js +46 -24
- package/dist/components/PipelineRunLogs/PipelineRunLogViewer.esm.js.map +1 -1
- package/dist/components/PipelineRunLogs/PipelineRunLogs.esm.js +30 -20
- package/dist/components/PipelineRunLogs/PipelineRunLogs.esm.js.map +1 -1
- package/dist/components/PipelineRunLogs/PodLogsDownloadLink.esm.js +15 -9
- package/dist/components/PipelineRunLogs/PodLogsDownloadLink.esm.js.map +1 -1
- package/dist/components/PipelineRunLogs/TaskStatusStepper.esm.js +43 -36
- package/dist/components/PipelineRunLogs/TaskStatusStepper.esm.js.map +1 -1
- package/dist/components/PipelineRunOutput/PipelineRunOutputDialog.esm.js +32 -22
- package/dist/components/PipelineRunOutput/PipelineRunOutputDialog.esm.js.map +1 -1
- package/dist/components/Router.esm.js +2 -2
- package/dist/components/Router.esm.js.map +1 -1
- package/dist/components/Tekton/TektonCIComponent.esm.js +5 -4
- package/dist/components/Tekton/TektonCIComponent.esm.js.map +1 -1
- package/dist/components/common/ClusterSelector.esm.js +17 -13
- package/dist/components/common/ClusterSelector.esm.js.map +1 -1
- package/dist/components/common/ErrorPanel.esm.js +25 -17
- package/dist/components/common/ErrorPanel.esm.js.map +1 -1
- package/dist/components/common/PermissionAlert.esm.js +8 -2
- package/dist/components/common/PermissionAlert.esm.js.map +1 -1
- package/dist/components/common/StatusSelector.esm.js +19 -12
- package/dist/components/common/StatusSelector.esm.js.map +1 -1
- package/dist/components/common/TableExpandCollapse.esm.js +26 -21
- package/dist/components/common/TableExpandCollapse.esm.js.map +1 -1
- package/dist/components/pipeline-topology/PipelineLayout.esm.js +14 -13
- package/dist/components/pipeline-topology/PipelineLayout.esm.js.map +1 -1
- package/dist/components/pipeline-topology/PipelineRunVisualization.esm.js +2 -2
- package/dist/components/pipeline-topology/PipelineRunVisualization.esm.js.map +1 -1
- package/dist/components/pipeline-topology/PipelineTaskNode.esm.js +63 -59
- package/dist/components/pipeline-topology/PipelineTaskNode.esm.js.map +1 -1
- package/dist/components/pipeline-topology/PipelineVisualization.esm.js +9 -6
- package/dist/components/pipeline-topology/PipelineVisualization.esm.js.map +1 -1
- package/dist/components/pipeline-topology/PipelineVisualizationStepList.esm.js +28 -19
- package/dist/components/pipeline-topology/PipelineVisualizationStepList.esm.js.map +1 -1
- package/dist/components/pipeline-topology/PipelineVisualizationView.esm.js +11 -7
- package/dist/components/pipeline-topology/PipelineVisualizationView.esm.js.map +1 -1
- package/dist/components/pipeline-topology/TaskGroupEdge.esm.js +2 -2
- package/dist/components/pipeline-topology/TaskGroupEdge.esm.js.map +1 -1
- package/dist/components/pipeline-topology/pipelineComponentFactory.esm.js.map +1 -1
- package/dist/hooks/TektonResourcesContext.esm.js +12 -10
- package/dist/hooks/TektonResourcesContext.esm.js.map +1 -1
- package/dist/hooks/useDarkTheme.esm.js +2 -2
- package/dist/hooks/useDarkTheme.esm.js.map +1 -1
- package/dist/hooks/usePipelineRunScanResults.esm.js +2 -2
- package/dist/hooks/usePipelineRunScanResults.esm.js.map +1 -1
- package/dist/hooks/usePodLogsOfPipelineRun.esm.js +31 -50
- package/dist/hooks/usePodLogsOfPipelineRun.esm.js.map +1 -1
- package/dist/hooks/useTektonObjectsResponse.esm.js +11 -11
- package/dist/hooks/useTektonObjectsResponse.esm.js.map +1 -1
- package/dist/index.d.ts +50 -4
- package/dist/index.esm.js +1 -0
- package/dist/index.esm.js.map +1 -1
- package/dist/translation.esm.js +81 -0
- package/dist/translation.esm.js.map +1 -0
- package/package.json +19 -18
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PipelineTaskNode.esm.js","sources":["../../../src/components/pipeline-topology/PipelineTaskNode.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport
|
|
1
|
+
{"version":3,"file":"PipelineTaskNode.esm.js","sources":["../../../src/components/pipeline-topology/PipelineTaskNode.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport type { LegacyRef } from 'react';\n\nimport { useState, useContext, useRef, useMemo, memo } from 'react';\n\nimport { Tooltip } from '@patternfly/react-core';\nimport {\n DEFAULT_LAYER,\n DEFAULT_WHEN_OFFSET,\n GraphElement,\n Layer,\n Node,\n RunStatus,\n ScaleDetailsLevel,\n TaskNode,\n TOP_LAYER,\n useDetailsLevel,\n useHover,\n WhenDecorator,\n WithContextMenuProps,\n WithSelectionProps,\n} from '@patternfly/react-topology';\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport { observer } from 'mobx-react';\n\nimport { PipelineTaskWithStatus, TaskRunKind } from '@janus-idp/shared-react';\n\nimport { NodeType } from '../../consts/pipeline-topology-const';\nimport {\n TEKTON_PIPELINE_RUN,\n TEKTON_PIPELINE_TASK,\n} from '../../consts/tekton-const';\nimport { TektonResourcesContext } from '../../hooks/TektonResourcesContext';\nimport { StepStatus } from '../../types/taskRun';\nimport { TektonResourcesContextData } from '../../types/types';\nimport { createStepStatus } from '../../utils/pipeline-step-utils';\nimport { getTaskStatus } from '../../utils/pipelineRun-utils';\nimport PipelineRunLogDialog from '../PipelineRunLogs/PipelineRunLogDialog';\nimport { PipelineVisualizationStepList } from './PipelineVisualizationStepList';\n\nimport './PipelineTaskNode.css';\n\ntype PipelineTaskNodeProps = {\n element: Node;\n} & WithContextMenuProps &\n WithSelectionProps &\n GraphElement;\n\nconst PipelineTaskNode = ({\n element,\n onContextMenu,\n contextMenuOpen,\n ...rest\n}: PipelineTaskNodeProps) => {\n const [open, setOpen] = useState<boolean>(false);\n const { watchResourcesData } = useContext<TektonResourcesContextData>(\n TektonResourcesContext,\n );\n const data = element.getData();\n const triggerRef = useRef<SVGGElement | null>(null);\n\n const pipelineRun = data.pipelineRun;\n const [hover, hoverRef] = useHover();\n const detailsLevel = useDetailsLevel();\n const isFinallyTask = element.getType() === NodeType.FINALLY_NODE;\n\n const pods = watchResourcesData?.pods?.data || [];\n const taskRuns = watchResourcesData?.taskruns?.data || [];\n const openDialog = () => {\n setOpen(true);\n };\n\n const closeDialog = () => {\n setOpen(false);\n };\n\n const computedTask: PipelineTaskWithStatus = data.task;\n const stepList =\n computedTask?.status?.steps || computedTask?.taskSpec?.steps || [];\n\n const taskStatus = getTaskStatus(data.pipelineRun, data.task);\n\n const stepStatusList: StepStatus[] = stepList.map((step: { name: string }) =>\n createStepStatus(step, taskStatus),\n );\n const succeededStepsCount = stepStatusList.filter(\n ({ status }) => status === RunStatus.Succeeded,\n ).length;\n\n const badge =\n stepStatusList.length > 0 && data.status\n ? `${succeededStepsCount}/${stepStatusList.length}`\n : null;\n\n const passedData = useMemo(() => {\n const newData = { ...data };\n Object.keys(newData).forEach(key => {\n if (newData[key] === undefined) {\n delete newData[key];\n }\n });\n return newData;\n }, [data]);\n\n const hasTaskIcon = !!(data.taskIconClass || data.taskIcon);\n const whenDecorator = data.whenStatus ? (\n <WhenDecorator\n element={element}\n status={data.whenStatus}\n leftOffset={\n hasTaskIcon\n ? DEFAULT_WHEN_OFFSET + (element.getBounds().height - 4) * 0.75\n : DEFAULT_WHEN_OFFSET\n }\n />\n ) : null;\n const activeTaskId = taskRuns.find(\n (tr: TaskRunKind) =>\n tr?.metadata?.labels?.[TEKTON_PIPELINE_RUN] ===\n pipelineRun?.metadata?.name &&\n tr?.metadata?.labels?.[TEKTON_PIPELINE_TASK] === data.task?.name,\n )?.metadata?.name;\n\n const taskNode = (\n <>\n <PipelineRunLogDialog\n pipelineRun={pipelineRun}\n open={open}\n closeDialog={closeDialog}\n pods={pods}\n taskRuns={taskRuns}\n activeTask={activeTaskId}\n />\n <TaskNode\n className=\"bs-tkn-pipeline-task-node\"\n element={element}\n onContextMenu={data.showContextMenu ? onContextMenu : undefined}\n contextMenuOpen={contextMenuOpen}\n scaleNode={\n (hover || contextMenuOpen) && detailsLevel !== ScaleDetailsLevel.high\n }\n hideDetailsAtMedium\n {...passedData}\n {...rest}\n badge={badge}\n truncateLength={element.getData()?.label?.length}\n onSelect={activeTaskId && openDialog}\n >\n {whenDecorator}\n </TaskNode>\n </>\n );\n\n return (\n <Layer\n id={\n detailsLevel !== ScaleDetailsLevel.high && (hover || contextMenuOpen)\n ? TOP_LAYER\n : DEFAULT_LAYER\n }\n >\n <g\n data-test={`task ${element.getLabel()}`}\n className=\"bs-tkn-pipeline-task-node\"\n ref={hoverRef as LegacyRef<SVGGElement>}\n >\n <Tooltip\n position=\"bottom\"\n enableFlip={false}\n content={\n <PipelineVisualizationStepList\n isSpecOverview={!data.status}\n taskName={element.getLabel()}\n steps={stepStatusList}\n isFinallyTask={isFinallyTask}\n />\n }\n triggerRef={triggerRef}\n >\n <g ref={triggerRef}>{taskNode}</g>\n </Tooltip>\n </g>\n </Layer>\n );\n};\n\nexport default memo(observer(PipelineTaskNode));\n"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { jsx, Fragment } from 'react/jsx-runtime';
|
|
2
2
|
import { useDarkTheme } from '../../hooks/useDarkTheme.esm.js';
|
|
3
3
|
import { getGraphDataModel } from '../../utils/pipeline-topology-utils.esm.js';
|
|
4
4
|
import { PipelineLayout } from './PipelineLayout.esm.js';
|
|
5
5
|
import './PipelineVisualization.css.esm.js';
|
|
6
|
+
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
7
|
+
import { tektonTranslationRef } from '../../translation.esm.js';
|
|
6
8
|
|
|
7
9
|
const PipelineVisualization = ({
|
|
8
10
|
pipelineRun,
|
|
@@ -10,14 +12,15 @@ const PipelineVisualization = ({
|
|
|
10
12
|
}) => {
|
|
11
13
|
useDarkTheme();
|
|
12
14
|
const model = getGraphDataModel(pipelineRun ?? void 0, taskRuns ?? []);
|
|
13
|
-
|
|
15
|
+
const { t } = useTranslationRef(tektonTranslationRef);
|
|
16
|
+
return /* @__PURE__ */ jsx(Fragment, { children: !model || model.nodes.length === 0 && model.edges.length === 0 ? /* @__PURE__ */ jsx("div", { "data-testid": "pipeline-no-tasks", children: t("pipelineVisualization.noTasksDescription") }) : /* @__PURE__ */ jsx(
|
|
14
17
|
"div",
|
|
15
18
|
{
|
|
16
19
|
"data-testid": "pipelineRun-visualization",
|
|
17
|
-
className: "bs-tkn-pipeline-visualization__layout"
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
));
|
|
20
|
+
className: "bs-tkn-pipeline-visualization__layout",
|
|
21
|
+
children: /* @__PURE__ */ jsx(PipelineLayout, { model })
|
|
22
|
+
}
|
|
23
|
+
) });
|
|
21
24
|
};
|
|
22
25
|
|
|
23
26
|
export { PipelineVisualization };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PipelineVisualization.esm.js","sources":["../../../src/components/pipeline-topology/PipelineVisualization.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport
|
|
1
|
+
{"version":3,"file":"PipelineVisualization.esm.js","sources":["../../../src/components/pipeline-topology/PipelineVisualization.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { PipelineRunKind, TaskRunKind } from '@janus-idp/shared-react';\n\nimport { useDarkTheme } from '../../hooks/useDarkTheme';\nimport { getGraphDataModel } from '../../utils/pipeline-topology-utils';\nimport { PipelineLayout } from './PipelineLayout';\n\nimport './PipelineVisualization.css';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { tektonTranslationRef } from '../../translation';\n\ntype PipelineVisualizationProps = {\n pipelineRun: PipelineRunKind | null;\n taskRuns: TaskRunKind[];\n};\n\nexport const PipelineVisualization = ({\n pipelineRun,\n taskRuns,\n}: PipelineVisualizationProps) => {\n useDarkTheme();\n\n const model = getGraphDataModel(pipelineRun ?? undefined, taskRuns ?? []);\n const { t } = useTranslationRef(tektonTranslationRef);\n\n return (\n <>\n {!model || (model.nodes.length === 0 && model.edges.length === 0) ? (\n <div data-testid=\"pipeline-no-tasks\">\n {t('pipelineVisualization.noTasksDescription')}\n </div>\n ) : (\n <div\n data-testid=\"pipelineRun-visualization\"\n className=\"bs-tkn-pipeline-visualization__layout\"\n >\n <PipelineLayout model={model} />\n </div>\n )}\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;;;AA8BO,MAAM,wBAAwB,CAAC;AAAA,EACpC,WAAA;AAAA,EACA;AACF,CAAkC,KAAA;AAChC,EAAa,YAAA,EAAA;AAEb,EAAA,MAAM,QAAQ,iBAAkB,CAAA,WAAA,IAAe,MAAW,EAAA,QAAA,IAAY,EAAE,CAAA;AACxE,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,oBAAoB,CAAA;AAEpD,EAAA,uCAEK,QAAC,EAAA,CAAA,KAAA,IAAU,MAAM,KAAM,CAAA,MAAA,KAAW,KAAK,KAAM,CAAA,KAAA,CAAM,MAAW,KAAA,CAAA,uBAC5D,KAAI,EAAA,EAAA,aAAA,EAAY,qBACd,QAAE,EAAA,CAAA,CAAA,0CAA0C,GAC/C,CAEA,mBAAA,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,aAAY,EAAA,2BAAA;AAAA,MACZ,SAAU,EAAA,uCAAA;AAAA,MAEV,QAAA,kBAAA,GAAA,CAAC,kBAAe,KAAc,EAAA;AAAA;AAAA,GAGpC,EAAA,CAAA;AAEJ;;;;"}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import classNames from 'classnames';
|
|
3
3
|
import { Status } from '@janus-idp/shared-react';
|
|
4
4
|
import './PipelineVisualizationStepList.css.esm.js';
|
|
5
|
+
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
6
|
+
import { tektonTranslationRef } from '../../translation.esm.js';
|
|
5
7
|
|
|
6
8
|
const TooltipColoredStatusIcon = ({
|
|
7
9
|
status
|
|
8
10
|
}) => {
|
|
9
|
-
const icon = /* @__PURE__ */
|
|
11
|
+
const icon = /* @__PURE__ */ jsx(Status, { status, iconOnly: true });
|
|
10
12
|
return icon;
|
|
11
13
|
};
|
|
12
14
|
const PipelineVisualizationStepList = ({
|
|
@@ -16,23 +18,30 @@ const PipelineVisualizationStepList = ({
|
|
|
16
18
|
isFinallyTask,
|
|
17
19
|
hideHeader
|
|
18
20
|
}) => {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
21
|
+
const { t } = useTranslationRef(tektonTranslationRef);
|
|
22
|
+
return /* @__PURE__ */ jsxs("div", { className: "bs-tkn-pipeline-visualization-step-list", children: [
|
|
23
|
+
!hideHeader && /* @__PURE__ */ jsx("div", { className: "bs-tkn-pipeline-visualization-step-list__task-name", children: taskName }),
|
|
24
|
+
isFinallyTask && /* @__PURE__ */ jsx("div", { className: "bs-tkn-pipeline-visualization-step-list__task-type", children: t("pipelineVisualization.stepList.finallyTaskTitle") }),
|
|
25
|
+
steps?.map(({ duration, name, status }) => {
|
|
26
|
+
return /* @__PURE__ */ jsxs(
|
|
27
|
+
"div",
|
|
28
|
+
{
|
|
29
|
+
className: classNames(
|
|
30
|
+
"bs-tkn-pipeline-visualization-step-list__step",
|
|
31
|
+
{
|
|
32
|
+
"bs-tkn-pipeline-visualization-step-list__step--task-run": !isSpecOverview
|
|
33
|
+
}
|
|
34
|
+
),
|
|
35
|
+
children: [
|
|
36
|
+
!isSpecOverview ? /* @__PURE__ */ jsx("div", { className: "bs-tkn-pipeline-visualization-step-list__icon", children: /* @__PURE__ */ jsx(TooltipColoredStatusIcon, { status }) }) : /* @__PURE__ */ jsx("span", { className: "bs-tkn-pipeline-visualization-step-list__bullet", children: "\u2022" }),
|
|
37
|
+
/* @__PURE__ */ jsx("div", { className: "bs-tkn-pipeline-visualization-step-list__name", children: name }),
|
|
38
|
+
!isSpecOverview && /* @__PURE__ */ jsx("div", { className: "bs-tkn-pipeline-visualization-step-list__duration", children: duration })
|
|
39
|
+
]
|
|
40
|
+
},
|
|
41
|
+
name
|
|
42
|
+
);
|
|
43
|
+
})
|
|
44
|
+
] });
|
|
36
45
|
};
|
|
37
46
|
|
|
38
47
|
export { PipelineVisualizationStepList };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PipelineVisualizationStepList.esm.js","sources":["../../../src/components/pipeline-topology/PipelineVisualizationStepList.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport
|
|
1
|
+
{"version":3,"file":"PipelineVisualizationStepList.esm.js","sources":["../../../src/components/pipeline-topology/PipelineVisualizationStepList.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { RunStatus } from '@patternfly/react-topology';\nimport classNames from 'classnames';\n\nimport { Status } from '@janus-idp/shared-react';\n\nimport { StepStatus } from '../../types/taskRun';\n\nimport './PipelineVisualizationStepList.css';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { tektonTranslationRef } from '../../translation';\n\nexport type PipelineVisualizationStepListProps = {\n isSpecOverview: boolean;\n taskName: string;\n steps: StepStatus[];\n isFinallyTask?: boolean;\n hideHeader?: boolean;\n};\n\ntype TooltipColoredStatusIconProps = {\n status: RunStatus;\n};\n\nconst TooltipColoredStatusIcon = ({\n status,\n}: TooltipColoredStatusIconProps) => {\n const icon = <Status status={status} iconOnly />;\n return icon;\n};\n\nexport const PipelineVisualizationStepList = ({\n isSpecOverview,\n taskName,\n steps,\n isFinallyTask,\n hideHeader,\n}: PipelineVisualizationStepListProps) => {\n const { t } = useTranslationRef(tektonTranslationRef);\n return (\n <div className=\"bs-tkn-pipeline-visualization-step-list\">\n {!hideHeader && (\n <div className=\"bs-tkn-pipeline-visualization-step-list__task-name\">\n {taskName}\n </div>\n )}\n {isFinallyTask && (\n <div className=\"bs-tkn-pipeline-visualization-step-list__task-type\">\n {t('pipelineVisualization.stepList.finallyTaskTitle')}\n </div>\n )}\n {steps?.map(({ duration, name, status }) => {\n return (\n <div\n className={classNames(\n 'bs-tkn-pipeline-visualization-step-list__step',\n {\n 'bs-tkn-pipeline-visualization-step-list__step--task-run':\n !isSpecOverview,\n },\n )}\n key={name}\n >\n {!isSpecOverview ? (\n <div className=\"bs-tkn-pipeline-visualization-step-list__icon\">\n <TooltipColoredStatusIcon status={status} />\n </div>\n ) : (\n <span className=\"bs-tkn-pipeline-visualization-step-list__bullet\">\n •\n </span>\n )}\n <div className=\"bs-tkn-pipeline-visualization-step-list__name\">\n {name}\n </div>\n {!isSpecOverview && (\n <div className=\"bs-tkn-pipeline-visualization-step-list__duration\">\n {duration}\n </div>\n )}\n </div>\n );\n })}\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;;;AAsCA,MAAM,2BAA2B,CAAC;AAAA,EAChC;AACF,CAAqC,KAAA;AACnC,EAAA,MAAM,IAAO,mBAAA,GAAA,CAAC,MAAO,EAAA,EAAA,MAAA,EAAgB,UAAQ,IAAC,EAAA,CAAA;AAC9C,EAAO,OAAA,IAAA;AACT,CAAA;AAEO,MAAM,gCAAgC,CAAC;AAAA,EAC5C,cAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAA0C,KAAA;AACxC,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,oBAAoB,CAAA;AACpD,EACE,uBAAA,IAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAU,yCACZ,EAAA,QAAA,EAAA;AAAA,IAAA,CAAC,UACA,oBAAA,GAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAU,sDACZ,QACH,EAAA,QAAA,EAAA,CAAA;AAAA,IAED,iCACE,GAAA,CAAA,KAAA,EAAA,EAAI,WAAU,oDACZ,EAAA,QAAA,EAAA,CAAA,CAAE,iDAAiD,CACtD,EAAA,CAAA;AAAA,IAED,OAAO,GAAI,CAAA,CAAC,EAAE,QAAU,EAAA,IAAA,EAAM,QAAa,KAAA;AAC1C,MACE,uBAAA,IAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAW,EAAA,UAAA;AAAA,YACT,+CAAA;AAAA,YACA;AAAA,cACE,2DACE,CAAC;AAAA;AACL,WACF;AAAA,UAGC,QAAA,EAAA;AAAA,YAAA,CAAC,cACA,mBAAA,GAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAU,iDACb,QAAC,kBAAA,GAAA,CAAA,wBAAA,EAAA,EAAyB,MAAgB,EAAA,CAAA,EAC5C,CAEA,mBAAA,GAAA,CAAC,MAAK,EAAA,EAAA,SAAA,EAAU,mDAAkD,QAElE,EAAA,QAAA,EAAA,CAAA;AAAA,4BAED,GAAA,CAAA,KAAA,EAAA,EAAI,SAAU,EAAA,+CAAA,EACZ,QACH,EAAA,IAAA,EAAA,CAAA;AAAA,YACC,CAAC,cACA,oBAAA,GAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAU,qDACZ,QACH,EAAA,QAAA,EAAA;AAAA;AAAA,SAAA;AAAA,QAjBG;AAAA,OAmBP;AAAA,KAEH;AAAA,GACH,EAAA,CAAA;AAEJ;;;;"}
|
|
@@ -1,34 +1,38 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useContext, useMemo } from 'react';
|
|
2
3
|
import { Progress, EmptyState } from '@backstage/core-components';
|
|
3
4
|
import { isEmpty } from 'lodash';
|
|
4
5
|
import { TektonResourcesContext } from '../../hooks/TektonResourcesContext.esm.js';
|
|
5
6
|
import { getPipelineRun } from '../../utils/pipelineRun-utils.esm.js';
|
|
6
7
|
import { PipelineVisualization } from './PipelineVisualization.esm.js';
|
|
7
8
|
import './PipelineVisualization.css.esm.js';
|
|
9
|
+
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
10
|
+
import { tektonTranslationRef } from '../../translation.esm.js';
|
|
8
11
|
|
|
9
12
|
const PipelineVisualizationView = ({
|
|
10
13
|
pipelineRun
|
|
11
14
|
}) => {
|
|
12
|
-
const { loaded, responseError, watchResourcesData } =
|
|
15
|
+
const { loaded, responseError, watchResourcesData } = useContext(
|
|
13
16
|
TektonResourcesContext
|
|
14
17
|
);
|
|
15
|
-
const
|
|
18
|
+
const { t } = useTranslationRef(tektonTranslationRef);
|
|
19
|
+
const pipelineRunResource = useMemo(
|
|
16
20
|
() => getPipelineRun(watchResourcesData?.pipelineruns?.data ?? [], pipelineRun),
|
|
17
21
|
[watchResourcesData, pipelineRun]
|
|
18
22
|
);
|
|
19
23
|
if (!loaded)
|
|
20
|
-
return /* @__PURE__ */
|
|
24
|
+
return /* @__PURE__ */ jsx("div", { "data-testid": "tekton-progress", children: /* @__PURE__ */ jsx(Progress, {}) });
|
|
21
25
|
if (loaded && (responseError || isEmpty(pipelineRunResource))) {
|
|
22
|
-
return /* @__PURE__ */
|
|
26
|
+
return /* @__PURE__ */ jsx(
|
|
23
27
|
EmptyState,
|
|
24
28
|
{
|
|
25
29
|
missing: "data",
|
|
26
|
-
description: "
|
|
30
|
+
description: t("pipelineVisualization.emptyState.description"),
|
|
27
31
|
title: ""
|
|
28
32
|
}
|
|
29
33
|
);
|
|
30
34
|
}
|
|
31
|
-
return /* @__PURE__ */
|
|
35
|
+
return /* @__PURE__ */ jsx(
|
|
32
36
|
PipelineVisualization,
|
|
33
37
|
{
|
|
34
38
|
pipelineRun: pipelineRunResource,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PipelineVisualizationView.esm.js","sources":["../../../src/components/pipeline-topology/PipelineVisualizationView.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport
|
|
1
|
+
{"version":3,"file":"PipelineVisualizationView.esm.js","sources":["../../../src/components/pipeline-topology/PipelineVisualizationView.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { useContext, useMemo } from 'react';\n\nimport { EmptyState, Progress } from '@backstage/core-components';\n\nimport { isEmpty } from 'lodash';\n\nimport { TektonResourcesContext } from '../../hooks/TektonResourcesContext';\nimport { getPipelineRun } from '../../utils/pipelineRun-utils';\nimport { PipelineVisualization } from './PipelineVisualization';\n\nimport './PipelineVisualization.css';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { tektonTranslationRef } from '../../translation';\n\ntype PipelineVisualizationViewProps = {\n pipelineRun: string;\n};\n\nexport const PipelineVisualizationView = ({\n pipelineRun,\n}: PipelineVisualizationViewProps) => {\n const { loaded, responseError, watchResourcesData } = useContext(\n TektonResourcesContext,\n );\n const { t } = useTranslationRef(tektonTranslationRef);\n\n const pipelineRunResource = useMemo(\n () =>\n getPipelineRun(watchResourcesData?.pipelineruns?.data ?? [], pipelineRun),\n [watchResourcesData, pipelineRun],\n );\n\n if (!loaded)\n return (\n <div data-testid=\"tekton-progress\">\n <Progress />\n </div>\n );\n\n if (loaded && (responseError || isEmpty(pipelineRunResource))) {\n return (\n <EmptyState\n missing=\"data\"\n description={t('pipelineVisualization.emptyState.description')}\n title=\"\"\n />\n );\n }\n\n return (\n <PipelineVisualization\n pipelineRun={pipelineRunResource}\n taskRuns={watchResourcesData?.taskruns?.data ?? []}\n />\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;AAiCO,MAAM,4BAA4B,CAAC;AAAA,EACxC;AACF,CAAsC,KAAA;AACpC,EAAA,MAAM,EAAE,MAAA,EAAQ,aAAe,EAAA,kBAAA,EAAuB,GAAA,UAAA;AAAA,IACpD;AAAA,GACF;AACA,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,oBAAoB,CAAA;AAEpD,EAAA,MAAM,mBAAsB,GAAA,OAAA;AAAA,IAC1B,MACE,cAAe,CAAA,kBAAA,EAAoB,cAAc,IAAQ,IAAA,IAAI,WAAW,CAAA;AAAA,IAC1E,CAAC,oBAAoB,WAAW;AAAA,GAClC;AAEA,EAAA,IAAI,CAAC,MAAA;AACH,IAAA,2BACG,KAAI,EAAA,EAAA,aAAA,EAAY,iBACf,EAAA,QAAA,kBAAA,GAAA,CAAC,YAAS,CACZ,EAAA,CAAA;AAGJ,EAAA,IAAI,MAAW,KAAA,aAAA,IAAiB,OAAQ,CAAA,mBAAmB,CAAI,CAAA,EAAA;AAC7D,IACE,uBAAA,GAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,OAAQ,EAAA,MAAA;AAAA,QACR,WAAA,EAAa,EAAE,8CAA8C,CAAA;AAAA,QAC7D,KAAM,EAAA;AAAA;AAAA,KACR;AAAA;AAIJ,EACE,uBAAA,GAAA;AAAA,IAAC,qBAAA;AAAA,IAAA;AAAA,MACC,WAAa,EAAA,mBAAA;AAAA,MACb,QAAU,EAAA,kBAAA,EAAoB,QAAU,EAAA,IAAA,IAAQ;AAAC;AAAA,GACnD;AAEJ;;;;"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { TaskEdge } from '@patternfly/react-topology';
|
|
3
3
|
import { observer } from 'mobx-react';
|
|
4
4
|
import { GROUPED_PIPELINE_NODE_SEPARATION_HORIZONTAL } from '../../consts/pipeline-topology-const.esm.js';
|
|
5
5
|
|
|
6
|
-
const TaskGroupEdge = (props) => /* @__PURE__ */
|
|
6
|
+
const TaskGroupEdge = (props) => /* @__PURE__ */ jsx(
|
|
7
7
|
TaskEdge,
|
|
8
8
|
{
|
|
9
9
|
nodeSeparation: GROUPED_PIPELINE_NODE_SEPARATION_HORIZONTAL,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaskGroupEdge.esm.js","sources":["../../../src/components/pipeline-topology/TaskGroupEdge.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport
|
|
1
|
+
{"version":3,"file":"TaskGroupEdge.esm.js","sources":["../../../src/components/pipeline-topology/TaskGroupEdge.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Edge, TaskEdge } from '@patternfly/react-topology';\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport { observer } from 'mobx-react';\n\nimport { GROUPED_PIPELINE_NODE_SEPARATION_HORIZONTAL } from '../../consts/pipeline-topology-const';\n\ninterface TaskEdgeProps {\n element: Edge;\n}\n\nconst TaskGroupEdge = (props: TaskEdgeProps) => (\n <TaskEdge\n nodeSeparation={GROUPED_PIPELINE_NODE_SEPARATION_HORIZONTAL}\n {...props}\n />\n);\n\nexport default observer(TaskGroupEdge);\n"],"names":[],"mappings":";;;;;AAyBA,MAAM,aAAA,GAAgB,CAAC,KACrB,qBAAA,GAAA;AAAA,EAAC,QAAA;AAAA,EAAA;AAAA,IACC,cAAgB,EAAA,2CAAA;AAAA,IACf,GAAG;AAAA;AACN,CAAA;AAGF,sBAAe,SAAS,aAAa,CAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipelineComponentFactory.esm.js","sources":["../../../src/components/pipeline-topology/pipelineComponentFactory.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport
|
|
1
|
+
{"version":3,"file":"pipelineComponentFactory.esm.js","sources":["../../../src/components/pipeline-topology/pipelineComponentFactory.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport type { ComponentType } from 'react';\n\nimport {\n ComponentFactory,\n DagreLayout,\n DefaultTaskGroup,\n Graph,\n GraphComponent,\n GraphElement,\n LayoutFactory,\n ModelKind,\n PipelineDagreLayout,\n SpacerNode,\n TaskEdge,\n withPanZoom,\n} from '@patternfly/react-topology';\n\nimport { NodeType, PipelineLayout } from '../../consts/pipeline-topology-const';\nimport { getLayoutData } from '../../utils/pipeline-topology-utils';\nimport PipelineTaskNode from './PipelineTaskNode';\nimport TaskGroupEdge from './TaskGroupEdge';\n\nconst GROUPED_EDGE_TYPE = 'GROUPED_EDGE';\n\nexport const layoutFactory: LayoutFactory = (type: string, graph: Graph) => {\n switch (type) {\n case PipelineLayout.DAGRE_BUILDER:\n case PipelineLayout.DAGRE_BUILDER_SPACED:\n return new DagreLayout(graph, {\n // Hack to get around undesirable defaults\n linkDistance: 0,\n nodeDistance: 0,\n groupDistance: 0,\n collideDistance: 0,\n simulationSpeed: 0,\n chargeStrength: 0,\n allowDrag: false,\n layoutOnDrag: false,\n ...getLayoutData(type),\n });\n case PipelineLayout.DAGRE_VIEWER:\n return new PipelineDagreLayout(graph, { nodesep: 25 });\n default:\n return undefined;\n }\n};\n\nconst pipelineComponentFactory: ComponentFactory = (\n kind: ModelKind,\n type: string,\n): ComponentType<{ element: GraphElement }> | undefined => {\n if (kind === ModelKind.graph) {\n return withPanZoom()(GraphComponent) as ComponentType<{\n element: GraphElement;\n }>;\n }\n if (kind === ModelKind.edge) {\n return TaskEdge as ComponentType<{ element: GraphElement }>;\n }\n if (kind === ModelKind.node) {\n switch (type) {\n case NodeType.TASK_NODE:\n case NodeType.FINALLY_NODE:\n return PipelineTaskNode as ComponentType<any>;\n case 'task-group':\n case NodeType.FINALLY_GROUP:\n return DefaultTaskGroup as ComponentType<{\n element: GraphElement;\n }>;\n case NodeType.SPACER_NODE:\n return SpacerNode as ComponentType<{ element: GraphElement }>;\n case 'finally-spacer-edge':\n case NodeType.EDGE:\n return TaskEdge as ComponentType<{ element: GraphElement }>;\n case GROUPED_EDGE_TYPE:\n return TaskGroupEdge as ComponentType<{ element: GraphElement }>;\n default:\n return undefined;\n }\n }\n return undefined;\n};\n\nexport default pipelineComponentFactory;\n"],"names":[],"mappings":";;;;;;AAqCA,MAAM,iBAAoB,GAAA,cAAA;AAEb,MAAA,aAAA,GAA+B,CAAC,IAAA,EAAc,KAAiB,KAAA;AAC1E,EAAA,QAAQ,IAAM;AAAA,IACZ,KAAK,cAAe,CAAA,aAAA;AAAA,IACpB,KAAK,cAAe,CAAA,oBAAA;AAClB,MAAO,OAAA,IAAI,YAAY,KAAO,EAAA;AAAA;AAAA,QAE5B,YAAc,EAAA,CAAA;AAAA,QACd,YAAc,EAAA,CAAA;AAAA,QACd,aAAe,EAAA,CAAA;AAAA,QACf,eAAiB,EAAA,CAAA;AAAA,QACjB,eAAiB,EAAA,CAAA;AAAA,QACjB,cAAgB,EAAA,CAAA;AAAA,QAChB,SAAW,EAAA,KAAA;AAAA,QACX,YAAc,EAAA,KAAA;AAAA,QACd,GAAG,cAAc,IAAI;AAAA,OACtB,CAAA;AAAA,IACH,KAAK,cAAe,CAAA,YAAA;AAClB,MAAA,OAAO,IAAI,mBAAoB,CAAA,KAAA,EAAO,EAAE,OAAA,EAAS,IAAI,CAAA;AAAA,IACvD;AACE,MAAO,OAAA,MAAA;AAAA;AAEb;AAEM,MAAA,wBAAA,GAA6C,CACjD,IAAA,EACA,IACyD,KAAA;AACzD,EAAI,IAAA,IAAA,KAAS,UAAU,KAAO,EAAA;AAC5B,IAAO,OAAA,WAAA,GAAc,cAAc,CAAA;AAAA;AAIrC,EAAI,IAAA,IAAA,KAAS,UAAU,IAAM,EAAA;AAC3B,IAAO,OAAA,QAAA;AAAA;AAET,EAAI,IAAA,IAAA,KAAS,UAAU,IAAM,EAAA;AAC3B,IAAA,QAAQ,IAAM;AAAA,MACZ,KAAK,QAAS,CAAA,SAAA;AAAA,MACd,KAAK,QAAS,CAAA,YAAA;AACZ,QAAO,OAAA,gBAAA;AAAA,MACT,KAAK,YAAA;AAAA,MACL,KAAK,QAAS,CAAA,aAAA;AACZ,QAAO,OAAA,gBAAA;AAAA,MAGT,KAAK,QAAS,CAAA,WAAA;AACZ,QAAO,OAAA,UAAA;AAAA,MACT,KAAK,qBAAA;AAAA,MACL,KAAK,QAAS,CAAA,IAAA;AACZ,QAAO,OAAA,QAAA;AAAA,MACT,KAAK,iBAAA;AACH,QAAO,OAAA,aAAA;AAAA,MACT;AACE,QAAO,OAAA,MAAA;AAAA;AACX;AAEF,EAAO,OAAA,MAAA;AACT;;;;"}
|
|
@@ -1,16 +1,18 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { createContext } from 'react';
|
|
2
2
|
import { ComputedStatus } from '@janus-idp/shared-react';
|
|
3
3
|
|
|
4
|
-
const TektonResourcesContext =
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
4
|
+
const TektonResourcesContext = createContext(
|
|
5
|
+
{
|
|
6
|
+
clusters: [],
|
|
7
|
+
selectedStatus: ComputedStatus.All,
|
|
8
|
+
setSelectedCluster: () => {
|
|
9
|
+
},
|
|
10
|
+
setSelectedStatus: () => {
|
|
11
|
+
},
|
|
12
|
+
setIsExpanded: () => {
|
|
13
|
+
}
|
|
12
14
|
}
|
|
13
|
-
|
|
15
|
+
);
|
|
14
16
|
|
|
15
17
|
export { TektonResourcesContext };
|
|
16
18
|
//# sourceMappingURL=TektonResourcesContext.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TektonResourcesContext.esm.js","sources":["../../src/hooks/TektonResourcesContext.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport
|
|
1
|
+
{"version":3,"file":"TektonResourcesContext.esm.js","sources":["../../src/hooks/TektonResourcesContext.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { createContext } from 'react';\n\nimport { ComputedStatus } from '@janus-idp/shared-react';\n\nimport { TektonResourcesContextData } from '../types/types';\n\nexport const TektonResourcesContext = createContext<TektonResourcesContextData>(\n {\n clusters: [],\n selectedStatus: ComputedStatus.All,\n setSelectedCluster: () => {},\n setSelectedStatus: () => {},\n setIsExpanded: () => {},\n },\n);\n"],"names":[],"mappings":";;;AAqBO,MAAM,sBAAyB,GAAA,aAAA;AAAA,EACpC;AAAA,IACE,UAAU,EAAC;AAAA,IACX,gBAAgB,cAAe,CAAA,GAAA;AAAA,IAC/B,oBAAoB,MAAM;AAAA,KAAC;AAAA,IAC3B,mBAAmB,MAAM;AAAA,KAAC;AAAA,IAC1B,eAAe,MAAM;AAAA;AAAC;AAE1B;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { useEffect } from 'react';
|
|
2
2
|
import { useTheme } from '@material-ui/core/styles';
|
|
3
3
|
|
|
4
4
|
const THEME_DARK = "dark";
|
|
@@ -7,7 +7,7 @@ const useDarkTheme = () => {
|
|
|
7
7
|
const {
|
|
8
8
|
palette: { type }
|
|
9
9
|
} = useTheme();
|
|
10
|
-
|
|
10
|
+
useEffect(() => {
|
|
11
11
|
const htmlTagElement = document.documentElement;
|
|
12
12
|
if (type === THEME_DARK) {
|
|
13
13
|
htmlTagElement.classList.add(THEME_DARK_CLASS);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDarkTheme.esm.js","sources":["../../src/hooks/useDarkTheme.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport
|
|
1
|
+
{"version":3,"file":"useDarkTheme.esm.js","sources":["../../src/hooks/useDarkTheme.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { useEffect } from 'react';\n\nimport { useTheme } from '@material-ui/core/styles';\n\nconst THEME_DARK = 'dark';\nconst THEME_DARK_CLASS = 'pf-v6-theme-dark';\n\nexport const useDarkTheme = () => {\n const {\n palette: { type },\n } = useTheme();\n\n useEffect(() => {\n const htmlTagElement = document.documentElement;\n if (type === THEME_DARK) {\n htmlTagElement.classList.add(THEME_DARK_CLASS);\n } else {\n htmlTagElement.classList.remove(THEME_DARK_CLASS);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [type]);\n};\n"],"names":[],"mappings":";;;AAmBA,MAAM,UAAa,GAAA,MAAA;AACnB,MAAM,gBAAmB,GAAA,kBAAA;AAElB,MAAM,eAAe,MAAM;AAChC,EAAM,MAAA;AAAA,IACJ,OAAA,EAAS,EAAE,IAAK;AAAA,MACd,QAAS,EAAA;AAEb,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,iBAAiB,QAAS,CAAA,eAAA;AAChC,IAAA,IAAI,SAAS,UAAY,EAAA;AACvB,MAAe,cAAA,CAAA,SAAA,CAAU,IAAI,gBAAgB,CAAA;AAAA,KACxC,MAAA;AACL,MAAe,cAAA,CAAA,SAAA,CAAU,OAAO,gBAAgB,CAAA;AAAA;AAClD,GAEF,EAAG,CAAC,IAAI,CAAC,CAAA;AACX;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { useMemo } from 'react';
|
|
2
2
|
|
|
3
3
|
const SCAN_OUTPUT_SUFFIX = "SCAN_OUTPUT";
|
|
4
4
|
const getPipelineRunScanResults = (pipelineRun) => (pipelineRun.status?.results || pipelineRun.status?.pipelineResults)?.reduce(
|
|
@@ -23,7 +23,7 @@ const getPipelineRunScanResults = (pipelineRun) => (pipelineRun.status?.results
|
|
|
23
23
|
{}
|
|
24
24
|
) || {};
|
|
25
25
|
const usePipelineRunScanResults = (pipelineRun) => {
|
|
26
|
-
return
|
|
26
|
+
return useMemo(() => {
|
|
27
27
|
if (!pipelineRun) {
|
|
28
28
|
return {};
|
|
29
29
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePipelineRunScanResults.esm.js","sources":["../../src/hooks/usePipelineRunScanResults.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport
|
|
1
|
+
{"version":3,"file":"usePipelineRunScanResults.esm.js","sources":["../../src/hooks/usePipelineRunScanResults.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { useMemo } from 'react';\n\nimport { PipelineRunKind } from '@janus-idp/shared-react';\n\nimport { PipelineRunScanResults } from '../types/types';\n\nconst SCAN_OUTPUT_SUFFIX = 'SCAN_OUTPUT';\n\nexport const getPipelineRunScanResults = (\n pipelineRun: PipelineRunKind,\n): PipelineRunScanResults =>\n (pipelineRun.status?.results || pipelineRun.status?.pipelineResults)?.reduce(\n (acc, result) => {\n if (result.name?.endsWith(SCAN_OUTPUT_SUFFIX)) {\n if (!acc.vulnerabilities) {\n acc.vulnerabilities = { critical: 0, high: 0, medium: 0, low: 0 };\n }\n try {\n const taskVulnerabilities = JSON.parse(result.value);\n if (taskVulnerabilities.vulnerabilities) {\n acc.vulnerabilities.critical +=\n taskVulnerabilities.vulnerabilities.critical || 0;\n acc.vulnerabilities.high +=\n taskVulnerabilities.vulnerabilities.high || 0;\n acc.vulnerabilities.medium +=\n taskVulnerabilities.vulnerabilities.medium || 0;\n acc.vulnerabilities.low +=\n taskVulnerabilities.vulnerabilities.low || 0;\n }\n } catch (e) {\n // ignore\n }\n }\n return acc;\n },\n {} as PipelineRunScanResults,\n ) || {};\n\nexport const usePipelineRunScanResults = (\n pipelineRun: PipelineRunKind,\n): PipelineRunScanResults => {\n return useMemo(() => {\n if (!pipelineRun) {\n return {};\n }\n\n return getPipelineRunScanResults(pipelineRun);\n }, [pipelineRun]);\n};\n"],"names":[],"mappings":";;AAqBA,MAAM,kBAAqB,GAAA,aAAA;AAEd,MAAA,yBAAA,GAA4B,CACvC,WAEC,KAAA,CAAA,WAAA,CAAY,QAAQ,OAAW,IAAA,WAAA,CAAY,QAAQ,eAAkB,GAAA,MAAA;AAAA,EACpE,CAAC,KAAK,MAAW,KAAA;AACf,IAAA,IAAI,MAAO,CAAA,IAAA,EAAM,QAAS,CAAA,kBAAkB,CAAG,EAAA;AAC7C,MAAI,IAAA,CAAC,IAAI,eAAiB,EAAA;AACxB,QAAI,GAAA,CAAA,eAAA,GAAkB,EAAE,QAAU,EAAA,CAAA,EAAG,MAAM,CAAG,EAAA,MAAA,EAAQ,CAAG,EAAA,GAAA,EAAK,CAAE,EAAA;AAAA;AAElE,MAAI,IAAA;AACF,QAAA,MAAM,mBAAsB,GAAA,IAAA,CAAK,KAAM,CAAA,MAAA,CAAO,KAAK,CAAA;AACnD,QAAA,IAAI,oBAAoB,eAAiB,EAAA;AACvC,UAAA,GAAA,CAAI,eAAgB,CAAA,QAAA,IAClB,mBAAoB,CAAA,eAAA,CAAgB,QAAY,IAAA,CAAA;AAClD,UAAA,GAAA,CAAI,eAAgB,CAAA,IAAA,IAClB,mBAAoB,CAAA,eAAA,CAAgB,IAAQ,IAAA,CAAA;AAC9C,UAAA,GAAA,CAAI,eAAgB,CAAA,MAAA,IAClB,mBAAoB,CAAA,eAAA,CAAgB,MAAU,IAAA,CAAA;AAChD,UAAA,GAAA,CAAI,eAAgB,CAAA,GAAA,IAClB,mBAAoB,CAAA,eAAA,CAAgB,GAAO,IAAA,CAAA;AAAA;AAC/C,eACO,CAAG,EAAA;AAAA;AAEZ;AAEF,IAAO,OAAA,GAAA;AAAA,GACT;AAAA,EACA;AACF,CAAA,IAAK;AAEM,MAAA,yBAAA,GAA4B,CACvC,WAC2B,KAAA;AAC3B,EAAA,OAAO,QAAQ,MAAM;AACnB,IAAA,IAAI,CAAC,WAAa,EAAA;AAChB,MAAA,OAAO,EAAC;AAAA;AAGV,IAAA,OAAO,0BAA0B,WAAW,CAAA;AAAA,GAC9C,EAAG,CAAC,WAAW,CAAC,CAAA;AAClB;;;;"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import useInterval from 'react-use/lib/useInterval';
|
|
1
|
+
import { useContext } from 'react';
|
|
2
|
+
import { useQuery } from '@tanstack/react-query';
|
|
4
3
|
import { useApi } from '@backstage/core-plugin-api';
|
|
5
4
|
import { kubernetesProxyApiRef } from '../types/types.esm.js';
|
|
6
5
|
import { TektonResourcesContext } from './TektonResourcesContext.esm.js';
|
|
@@ -9,58 +8,40 @@ const usePodLogsOfPipelineRun = ({
|
|
|
9
8
|
pod,
|
|
10
9
|
intervalMs = 5e3
|
|
11
10
|
}) => {
|
|
12
|
-
const [loadingData, setLoadingData] = React__default.useState(true);
|
|
13
|
-
const [, setPodInfo] = React__default.useState(pod?.metadata?.name ?? "");
|
|
14
11
|
const kubernetesProxyApi = useApi(kubernetesProxyApiRef);
|
|
15
|
-
const { clusters, selectedCluster } =
|
|
12
|
+
const { clusters, selectedCluster } = useContext(
|
|
13
|
+
TektonResourcesContext
|
|
14
|
+
);
|
|
16
15
|
const currCluster = clusters.length > 0 && clusters[selectedCluster || 0] || "";
|
|
17
16
|
const containersList = pod?.spec?.containers || [];
|
|
18
|
-
const
|
|
19
|
-
async (podScope) => {
|
|
20
|
-
const { podName, podNamespace, containerName, clusterName } = podScope;
|
|
21
|
-
return await kubernetesProxyApi.getPodLogs({
|
|
22
|
-
podName,
|
|
23
|
-
namespace: podNamespace,
|
|
24
|
-
containerName,
|
|
25
|
-
clusterName
|
|
26
|
-
});
|
|
27
|
-
},
|
|
28
|
-
[kubernetesProxyApi]
|
|
29
|
-
);
|
|
30
|
-
const { value, error, loading, retry } = useAsyncRetry(async () => {
|
|
31
|
-
const requests = [];
|
|
32
|
-
containersList.map((container, _idx) => {
|
|
33
|
-
if (pod?.metadata?.name && pod?.metadata?.namespace && container) {
|
|
34
|
-
const podScope = {
|
|
35
|
-
containerName: container.name,
|
|
36
|
-
podName: pod.metadata.name,
|
|
37
|
-
podNamespace: pod.metadata.namespace,
|
|
38
|
-
clusterName: currCluster
|
|
39
|
-
};
|
|
40
|
-
requests.push(getLogs(podScope));
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
return requests.length > 0 ? Promise.all(requests) : [];
|
|
44
|
-
}, [containersList, pod, getLogs]);
|
|
17
|
+
const podKey = pod?.metadata?.name;
|
|
45
18
|
const stopPolling = pod?.status?.phase === "Succeeded" || pod?.status?.phase === "Failed";
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
19
|
+
const { data, error, isLoading, isFetching } = useQuery({
|
|
20
|
+
queryKey: ["podLogs", podKey, currCluster],
|
|
21
|
+
queryFn: async () => {
|
|
22
|
+
const requests = containersList.map((container) => {
|
|
23
|
+
if (pod?.metadata?.name && pod?.metadata?.namespace && container) {
|
|
24
|
+
return kubernetesProxyApi.getPodLogs({
|
|
25
|
+
podName: pod.metadata.name,
|
|
26
|
+
namespace: pod.metadata.namespace,
|
|
27
|
+
containerName: container.name,
|
|
28
|
+
clusterName: currCluster
|
|
29
|
+
});
|
|
54
30
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
31
|
+
return Promise.resolve({ text: "" });
|
|
32
|
+
}).filter(Boolean);
|
|
33
|
+
return Promise.all(requests);
|
|
34
|
+
},
|
|
35
|
+
enabled: !!pod?.metadata?.name && containersList.length > 0,
|
|
36
|
+
refetchInterval: stopPolling ? false : intervalMs,
|
|
37
|
+
staleTime: 6e4
|
|
38
|
+
// Keep the data fresh for 1 minute instead of constantly refetching.
|
|
39
|
+
});
|
|
40
|
+
return {
|
|
41
|
+
value: data,
|
|
42
|
+
error,
|
|
43
|
+
loading: isLoading || isFetching
|
|
44
|
+
};
|
|
64
45
|
};
|
|
65
46
|
|
|
66
47
|
export { usePodLogsOfPipelineRun };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePodLogsOfPipelineRun.esm.js","sources":["../../src/hooks/usePodLogsOfPipelineRun.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport
|
|
1
|
+
{"version":3,"file":"usePodLogsOfPipelineRun.esm.js","sources":["../../src/hooks/usePodLogsOfPipelineRun.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { useContext } from 'react';\nimport { useQuery } from '@tanstack/react-query';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { V1Container, V1Pod } from '@kubernetes/client-node';\n\nimport {\n kubernetesProxyApiRef,\n TektonResourcesContextData,\n} from '../types/types';\nimport { TektonResourcesContext } from './TektonResourcesContext';\n\nexport interface ContainerScope {\n podName: string;\n podNamespace: string;\n clusterName: string;\n containerName: string;\n}\n\ninterface PodLogsOptions {\n pod: V1Pod;\n intervalMs?: number;\n}\n\nexport const usePodLogsOfPipelineRun = ({\n pod,\n intervalMs = 5000,\n}: PodLogsOptions) => {\n const kubernetesProxyApi = useApi(kubernetesProxyApiRef);\n const { clusters, selectedCluster } = useContext<TektonResourcesContextData>(\n TektonResourcesContext,\n );\n const currCluster =\n (clusters.length > 0 && clusters[selectedCluster || 0]) || '';\n const containersList = pod?.spec?.containers || [];\n\n const podKey = pod?.metadata?.name;\n const stopPolling =\n pod?.status?.phase === 'Succeeded' || pod?.status?.phase === 'Failed';\n\n const { data, error, isLoading, isFetching } = useQuery({\n queryKey: ['podLogs', podKey, currCluster],\n queryFn: async () => {\n const requests = containersList\n .map((container: V1Container) => {\n if (pod?.metadata?.name && pod?.metadata?.namespace && container) {\n return kubernetesProxyApi.getPodLogs({\n podName: pod.metadata.name,\n namespace: pod.metadata.namespace,\n containerName: container.name,\n clusterName: currCluster,\n });\n }\n\n return Promise.resolve({ text: '' });\n })\n .filter(Boolean);\n\n return Promise.all(requests);\n },\n enabled: !!pod?.metadata?.name && containersList.length > 0,\n refetchInterval: stopPolling ? false : intervalMs,\n staleTime: 60000, // Keep the data fresh for 1 minute instead of constantly refetching.\n });\n\n return {\n value: data,\n error,\n loading: isLoading || isFetching,\n };\n};\n"],"names":[],"mappings":";;;;;;AAsCO,MAAM,0BAA0B,CAAC;AAAA,EACtC,GAAA;AAAA,EACA,UAAa,GAAA;AACf,CAAsB,KAAA;AACpB,EAAM,MAAA,kBAAA,GAAqB,OAAO,qBAAqB,CAAA;AACvD,EAAM,MAAA,EAAE,QAAU,EAAA,eAAA,EAAoB,GAAA,UAAA;AAAA,IACpC;AAAA,GACF;AACA,EAAA,MAAM,cACH,QAAS,CAAA,MAAA,GAAS,KAAK,QAAS,CAAA,eAAA,IAAmB,CAAC,CAAM,IAAA,EAAA;AAC7D,EAAA,MAAM,cAAiB,GAAA,GAAA,EAAK,IAAM,EAAA,UAAA,IAAc,EAAC;AAEjD,EAAM,MAAA,MAAA,GAAS,KAAK,QAAU,EAAA,IAAA;AAC9B,EAAA,MAAM,cACJ,GAAK,EAAA,MAAA,EAAQ,UAAU,WAAe,IAAA,GAAA,EAAK,QAAQ,KAAU,KAAA,QAAA;AAE/D,EAAA,MAAM,EAAE,IAAM,EAAA,KAAA,EAAO,SAAW,EAAA,UAAA,KAAe,QAAS,CAAA;AAAA,IACtD,QAAU,EAAA,CAAC,SAAW,EAAA,MAAA,EAAQ,WAAW,CAAA;AAAA,IACzC,SAAS,YAAY;AACnB,MAAA,MAAM,QAAW,GAAA,cAAA,CACd,GAAI,CAAA,CAAC,SAA2B,KAAA;AAC/B,QAAA,IAAI,KAAK,QAAU,EAAA,IAAA,IAAQ,GAAK,EAAA,QAAA,EAAU,aAAa,SAAW,EAAA;AAChE,UAAA,OAAO,mBAAmB,UAAW,CAAA;AAAA,YACnC,OAAA,EAAS,IAAI,QAAS,CAAA,IAAA;AAAA,YACtB,SAAA,EAAW,IAAI,QAAS,CAAA,SAAA;AAAA,YACxB,eAAe,SAAU,CAAA,IAAA;AAAA,YACzB,WAAa,EAAA;AAAA,WACd,CAAA;AAAA;AAGH,QAAA,OAAO,OAAQ,CAAA,OAAA,CAAQ,EAAE,IAAA,EAAM,IAAI,CAAA;AAAA,OACpC,CACA,CAAA,MAAA,CAAO,OAAO,CAAA;AAEjB,MAAO,OAAA,OAAA,CAAQ,IAAI,QAAQ,CAAA;AAAA,KAC7B;AAAA,IACA,SAAS,CAAC,CAAC,KAAK,QAAU,EAAA,IAAA,IAAQ,eAAe,MAAS,GAAA,CAAA;AAAA,IAC1D,eAAA,EAAiB,cAAc,KAAQ,GAAA,UAAA;AAAA,IACvC,SAAW,EAAA;AAAA;AAAA,GACZ,CAAA;AAED,EAAO,OAAA;AAAA,IACL,KAAO,EAAA,IAAA;AAAA,IACP,KAAA;AAAA,IACA,SAAS,SAAa,IAAA;AAAA,GACxB;AACF;;;;"}
|