@backstage-community/plugin-tekton 3.22.2 → 3.23.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 CHANGED
@@ -1,5 +1,11 @@
1
1
  ### Dependencies
2
2
 
3
+ ## 3.23.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 1d5f33d: Enhance fetching pod logs
8
+
3
9
  ## 3.22.2
4
10
 
5
11
  ### Patch Changes
@@ -2,6 +2,7 @@ import React__default from 'react';
2
2
  import { DismissableBanner, LogViewer } from '@backstage/core-components';
3
3
  import { Paper } from '@material-ui/core';
4
4
  import { Skeleton } from '@material-ui/lab';
5
+ import { QueryClientProvider, QueryClient } from '@tanstack/react-query';
5
6
  import { usePodLogsOfPipelineRun } from '../../hooks/usePodLogsOfPipelineRun.esm.js';
6
7
 
7
8
  const PipelineRunLogViewer = ({ pod }) => {
@@ -48,6 +49,19 @@ ${value[idx].text}`
48
49
  pod && !loading && /* @__PURE__ */ React__default.createElement(LogViewer, { text: text || "No Logs found" })
49
50
  ));
50
51
  };
52
+ const queryClient = new QueryClient({
53
+ defaultOptions: {
54
+ queries: {
55
+ retry: 5,
56
+ refetchOnWindowFocus: false
57
+ }
58
+ }
59
+ });
60
+ const PipelineRunLogViewerWithQueryClient = ({
61
+ pod
62
+ }) => {
63
+ return /* @__PURE__ */ React__default.createElement(QueryClientProvider, { client: queryClient }, /* @__PURE__ */ React__default.createElement(PipelineRunLogViewer, { pod }));
64
+ };
51
65
 
52
- export { PipelineRunLogViewer };
66
+ export { PipelineRunLogViewerWithQueryClient as PipelineRunLogViewer };
53
67
  //# sourceMappingURL=PipelineRunLogViewer.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PipelineRunLogViewer.esm.js","sources":["../../../src/components/PipelineRunLogs/PipelineRunLogViewer.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 React from 'react';\n\nimport { DismissableBanner, LogViewer } from '@backstage/core-components';\n\nimport { V1Container, V1Pod } from '@kubernetes/client-node';\nimport { Paper } from '@material-ui/core';\nimport { Skeleton } from '@material-ui/lab';\n\nimport { usePodLogsOfPipelineRun } from '../../hooks/usePodLogsOfPipelineRun';\n\ntype PipelineRunLogViewerProps = { pod: V1Pod };\n\nexport const PipelineRunLogViewer = ({ pod }: PipelineRunLogViewerProps) => {\n const { value, error, loading } = usePodLogsOfPipelineRun({\n pod,\n });\n\n const containersList = pod?.spec?.containers || [];\n let text = '';\n\n text = containersList.reduce(\n (acc: string, container: V1Container, idx: number) => {\n if (container?.name && value?.[idx]?.text) {\n return acc\n .concat(\n `${container.name.toLocaleUpperCase('en-US')}\\n${value[idx].text}`,\n )\n .concat(idx === containersList.length - 1 ? '' : '\\n');\n }\n return acc;\n },\n '',\n );\n\n return (\n <>\n {error && (\n <DismissableBanner\n message={error?.message}\n variant=\"error\"\n fixed={false}\n id=\"pod-logs\"\n />\n )}\n <Paper\n elevation={1}\n style={{ height: '100%', width: '100%', minHeight: '30rem' }}\n >\n {loading && (\n <Skeleton\n data-testid=\"logs-skeleton\"\n variant=\"rect\"\n width=\"100%\"\n height=\"100%\"\n />\n )}\n {pod && !loading && <LogViewer text={text || 'No Logs found'} />}\n </Paper>\n </>\n );\n};\n"],"names":["React"],"mappings":";;;;;;AA2BO,MAAM,oBAAuB,GAAA,CAAC,EAAE,GAAA,EAAqC,KAAA;AAC1E,EAAA,MAAM,EAAE,KAAA,EAAO,KAAO,EAAA,OAAA,KAAY,uBAAwB,CAAA;AAAA,IACxD;AAAA,GACD,CAAA;AAED,EAAA,MAAM,cAAiB,GAAA,GAAA,EAAK,IAAM,EAAA,UAAA,IAAc,EAAC;AACjD,EAAA,IAAI,IAAO,GAAA,EAAA;AAEX,EAAA,IAAA,GAAO,cAAe,CAAA,MAAA;AAAA,IACpB,CAAC,GAAa,EAAA,SAAA,EAAwB,GAAgB,KAAA;AACpD,MAAA,IAAI,SAAW,EAAA,IAAA,IAAQ,KAAQ,GAAA,GAAG,GAAG,IAAM,EAAA;AACzC,QAAA,OAAO,GACJ,CAAA,MAAA;AAAA,UACC,CAAG,EAAA,SAAA,CAAU,IAAK,CAAA,iBAAA,CAAkB,OAAO,CAAC;AAAA,EAAK,KAAA,CAAM,GAAG,CAAA,CAAE,IAAI,CAAA;AAAA,UAEjE,MAAO,CAAA,GAAA,KAAQ,eAAe,MAAS,GAAA,CAAA,GAAI,KAAK,IAAI,CAAA;AAAA;AAEzD,MAAO,OAAA,GAAA;AAAA,KACT;AAAA,IACA;AAAA,GACF;AAEA,EAAA,mFAEK,KACC,oBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,iBAAA;AAAA,IAAA;AAAA,MACC,SAAS,KAAO,EAAA,OAAA;AAAA,MAChB,OAAQ,EAAA,OAAA;AAAA,MACR,KAAO,EAAA,KAAA;AAAA,MACP,EAAG,EAAA;AAAA;AAAA,GAGP,kBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAW,EAAA,CAAA;AAAA,MACX,OAAO,EAAE,MAAA,EAAQ,QAAQ,KAAO,EAAA,MAAA,EAAQ,WAAW,OAAQ;AAAA,KAAA;AAAA,IAE1D,OACC,oBAAAA,cAAA,CAAA,aAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,aAAY,EAAA,eAAA;AAAA,QACZ,OAAQ,EAAA,MAAA;AAAA,QACR,KAAM,EAAA,MAAA;AAAA,QACN,MAAO,EAAA;AAAA;AAAA,KACT;AAAA,IAED,OAAO,CAAC,OAAA,iDAAY,SAAU,EAAA,EAAA,IAAA,EAAM,QAAQ,eAAiB,EAAA;AAAA,GAElE,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"PipelineRunLogViewer.esm.js","sources":["../../../src/components/PipelineRunLogs/PipelineRunLogViewer.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 React from 'react';\nimport { DismissableBanner, LogViewer } from '@backstage/core-components';\nimport { V1Container, V1Pod } from '@kubernetes/client-node';\nimport { Paper } from '@material-ui/core';\nimport { Skeleton } from '@material-ui/lab';\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport { usePodLogsOfPipelineRun } from '../../hooks/usePodLogsOfPipelineRun';\n\ntype PipelineRunLogViewerProps = { pod: V1Pod };\n\nconst PipelineRunLogViewer = ({ pod }: PipelineRunLogViewerProps) => {\n const { value, error, loading } = usePodLogsOfPipelineRun({\n pod,\n });\n\n const containersList = pod?.spec?.containers || [];\n let text = '';\n\n text = containersList.reduce(\n (acc: string, container: V1Container, idx: number) => {\n if (container?.name && value?.[idx]?.text) {\n return acc\n .concat(\n `${container.name.toLocaleUpperCase('en-US')}\\n${value[idx].text}`,\n )\n .concat(idx === containersList.length - 1 ? '' : '\\n');\n }\n return acc;\n },\n '',\n );\n\n return (\n <>\n {error && (\n <DismissableBanner\n message={error?.message}\n variant=\"error\"\n fixed={false}\n id=\"pod-logs\"\n />\n )}\n <Paper\n elevation={1}\n style={{ height: '100%', width: '100%', minHeight: '30rem' }}\n >\n {loading && (\n <Skeleton\n data-testid=\"logs-skeleton\"\n variant=\"rect\"\n width=\"100%\"\n height=\"100%\"\n />\n )}\n {pod && !loading && <LogViewer text={text || 'No Logs found'} />}\n </Paper>\n </>\n );\n};\n\nconst queryClient = new QueryClient({\n defaultOptions: {\n queries: {\n retry: 5,\n refetchOnWindowFocus: false,\n },\n },\n});\n\nconst PipelineRunLogViewerWithQueryClient = ({\n pod,\n}: PipelineRunLogViewerProps) => {\n return (\n <QueryClientProvider client={queryClient}>\n <PipelineRunLogViewer pod={pod} />\n </QueryClientProvider>\n );\n};\n\nexport { PipelineRunLogViewerWithQueryClient as PipelineRunLogViewer };\n"],"names":["React"],"mappings":";;;;;;;AAyBA,MAAM,oBAAuB,GAAA,CAAC,EAAE,GAAA,EAAqC,KAAA;AACnE,EAAA,MAAM,EAAE,KAAA,EAAO,KAAO,EAAA,OAAA,KAAY,uBAAwB,CAAA;AAAA,IACxD;AAAA,GACD,CAAA;AAED,EAAA,MAAM,cAAiB,GAAA,GAAA,EAAK,IAAM,EAAA,UAAA,IAAc,EAAC;AACjD,EAAA,IAAI,IAAO,GAAA,EAAA;AAEX,EAAA,IAAA,GAAO,cAAe,CAAA,MAAA;AAAA,IACpB,CAAC,GAAa,EAAA,SAAA,EAAwB,GAAgB,KAAA;AACpD,MAAA,IAAI,SAAW,EAAA,IAAA,IAAQ,KAAQ,GAAA,GAAG,GAAG,IAAM,EAAA;AACzC,QAAA,OAAO,GACJ,CAAA,MAAA;AAAA,UACC,CAAG,EAAA,SAAA,CAAU,IAAK,CAAA,iBAAA,CAAkB,OAAO,CAAC;AAAA,EAAK,KAAA,CAAM,GAAG,CAAA,CAAE,IAAI,CAAA;AAAA,UAEjE,MAAO,CAAA,GAAA,KAAQ,eAAe,MAAS,GAAA,CAAA,GAAI,KAAK,IAAI,CAAA;AAAA;AAEzD,MAAO,OAAA,GAAA;AAAA,KACT;AAAA,IACA;AAAA,GACF;AAEA,EAAA,mFAEK,KACC,oBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,iBAAA;AAAA,IAAA;AAAA,MACC,SAAS,KAAO,EAAA,OAAA;AAAA,MAChB,OAAQ,EAAA,OAAA;AAAA,MACR,KAAO,EAAA,KAAA;AAAA,MACP,EAAG,EAAA;AAAA;AAAA,GAGP,kBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAW,EAAA,CAAA;AAAA,MACX,OAAO,EAAE,MAAA,EAAQ,QAAQ,KAAO,EAAA,MAAA,EAAQ,WAAW,OAAQ;AAAA,KAAA;AAAA,IAE1D,OACC,oBAAAA,cAAA,CAAA,aAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,aAAY,EAAA,eAAA;AAAA,QACZ,OAAQ,EAAA,MAAA;AAAA,QACR,KAAM,EAAA,MAAA;AAAA,QACN,MAAO,EAAA;AAAA;AAAA,KACT;AAAA,IAED,OAAO,CAAC,OAAA,iDAAY,SAAU,EAAA,EAAA,IAAA,EAAM,QAAQ,eAAiB,EAAA;AAAA,GAElE,CAAA;AAEJ,CAAA;AAEA,MAAM,WAAA,GAAc,IAAI,WAAY,CAAA;AAAA,EAClC,cAAgB,EAAA;AAAA,IACd,OAAS,EAAA;AAAA,MACP,KAAO,EAAA,CAAA;AAAA,MACP,oBAAsB,EAAA;AAAA;AACxB;AAEJ,CAAC,CAAA;AAED,MAAM,sCAAsC,CAAC;AAAA,EAC3C;AACF,CAAiC,KAAA;AAC/B,EAAA,oDACG,mBAAoB,EAAA,EAAA,MAAA,EAAQ,+BAC1BA,cAAA,CAAA,aAAA,CAAA,oBAAA,EAAA,EAAqB,KAAU,CAClC,CAAA;AAEJ;;;;"}
@@ -4,7 +4,7 @@ import { Paper } from '@material-ui/core';
4
4
  import Grid from '@material-ui/core/Grid';
5
5
  import { getTaskRunsForPipelineRun, pipelineRunFilterReducer } from '@janus-idp/shared-react';
6
6
  import { getSortedTaskRuns, getActiveTaskRun } from '../../utils/taskRun-utils.esm.js';
7
- import { PipelineRunLogViewer } from './PipelineRunLogViewer.esm.js';
7
+ import { PipelineRunLogViewer as PipelineRunLogViewerWithQueryClient } from './PipelineRunLogViewer.esm.js';
8
8
  import { TaskStatusStepper } from './TaskStatusStepper.esm.js';
9
9
 
10
10
  const PipelineRunLogs = ({
@@ -62,7 +62,7 @@ const PipelineRunLogs = ({
62
62
  style: { height: "100%", width: "100%", minHeight: "30rem" }
63
63
  },
64
64
  /* @__PURE__ */ React__default.createElement(LogViewer, { text: "No Logs found" })
65
- ) : /* @__PURE__ */ React__default.createElement(PipelineRunLogViewer, { pod: podData }))));
65
+ ) : /* @__PURE__ */ React__default.createElement(PipelineRunLogViewerWithQueryClient, { pod: podData }))));
66
66
  };
67
67
 
68
68
  export { PipelineRunLogs, PipelineRunLogs as default };
@@ -1 +1 @@
1
- {"version":3,"file":"PipelineRunLogs.esm.js","sources":["../../../src/components/PipelineRunLogs/PipelineRunLogs.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 React from 'react';\n\nimport { LogViewer, Progress } from '@backstage/core-components';\n\nimport { V1Pod } from '@kubernetes/client-node';\nimport { Paper } from '@material-ui/core';\nimport Grid from '@material-ui/core/Grid';\n\nimport {\n getTaskRunsForPipelineRun,\n pipelineRunFilterReducer,\n PipelineRunKind,\n TaskRunKind,\n} from '@janus-idp/shared-react';\n\nimport { getActiveTaskRun, getSortedTaskRuns } from '../../utils/taskRun-utils';\nimport { PipelineRunLogViewer } from './PipelineRunLogViewer';\nimport { TaskStatusStepper } from './TaskStatusStepper';\n\ntype PipelineRunLogsProps = {\n pipelineRun: PipelineRunKind;\n taskRuns: TaskRunKind[];\n pods: V1Pod[];\n activeTask?: string;\n setActiveTask: (t: string) => void;\n};\nexport const PipelineRunLogs = ({\n pipelineRun,\n taskRuns,\n pods,\n activeTask,\n setActiveTask,\n}: PipelineRunLogsProps) => {\n const PLRTaskRuns = getTaskRunsForPipelineRun(pipelineRun, taskRuns);\n const sortedTaskRuns = getSortedTaskRuns(PLRTaskRuns);\n const taskRunFromYaml = PLRTaskRuns?.reduce(\n (acc: { [value: string]: TaskRunKind }, value) => {\n if (value?.metadata?.name) {\n acc[value.metadata.name] = value;\n }\n return acc;\n },\n {},\n );\n\n const completed = pipelineRunFilterReducer(pipelineRun);\n const [lastActiveStepId, setLastActiveStepId] = React.useState<string>('');\n\n React.useEffect(() => {\n const mostRecentFailedOrActiveStep = sortedTaskRuns.find(tr =>\n ['Failed', 'Running'].includes(tr.status),\n );\n\n if (completed && !mostRecentFailedOrActiveStep && !activeTask) {\n setLastActiveStepId(sortedTaskRuns[sortedTaskRuns.length - 1]?.id);\n return;\n }\n\n setLastActiveStepId(\n !activeTask ? (mostRecentFailedOrActiveStep?.id as string) : '',\n );\n }, [sortedTaskRuns, completed, activeTask]);\n\n const currentStepId = activeTask || lastActiveStepId;\n const activeItem = getActiveTaskRun(sortedTaskRuns, currentStepId);\n const podName =\n activeItem && taskRunFromYaml?.[currentStepId]?.status?.podName;\n const podData = React.useMemo(\n () =>\n pods.find(pod => {\n return pod?.metadata?.name === podName;\n }),\n [pods, podName],\n );\n\n return (\n <Grid container>\n <Grid item xs={3}>\n <Paper>\n <TaskStatusStepper\n steps={sortedTaskRuns}\n currentStepId={currentStepId}\n onUserStepChange={setActiveTask}\n />\n </Paper>\n </Grid>\n <Grid item xs={9}>\n {!currentStepId && <Progress />}\n <div style={{ height: '80vh' }}>\n {!podData ? (\n <Paper\n elevation={1}\n style={{ height: '100%', width: '100%', minHeight: '30rem' }}\n >\n <LogViewer text=\"No Logs found\" />\n </Paper>\n ) : (\n <PipelineRunLogViewer pod={podData} />\n )}\n </div>\n </Grid>\n </Grid>\n );\n};\n\nexport default PipelineRunLogs;\n"],"names":["React"],"mappings":"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"}
1
+ {"version":3,"file":"PipelineRunLogs.esm.js","sources":["../../../src/components/PipelineRunLogs/PipelineRunLogs.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 React from 'react';\n\nimport { LogViewer, Progress } from '@backstage/core-components';\n\nimport { V1Pod } from '@kubernetes/client-node';\nimport { Paper } from '@material-ui/core';\nimport Grid from '@material-ui/core/Grid';\n\nimport {\n getTaskRunsForPipelineRun,\n pipelineRunFilterReducer,\n PipelineRunKind,\n TaskRunKind,\n} from '@janus-idp/shared-react';\n\nimport { getActiveTaskRun, getSortedTaskRuns } from '../../utils/taskRun-utils';\nimport { PipelineRunLogViewer } from './PipelineRunLogViewer';\nimport { TaskStatusStepper } from './TaskStatusStepper';\n\ntype PipelineRunLogsProps = {\n pipelineRun: PipelineRunKind;\n taskRuns: TaskRunKind[];\n pods: V1Pod[];\n activeTask?: string;\n setActiveTask: (t: string) => void;\n};\nexport const PipelineRunLogs = ({\n pipelineRun,\n taskRuns,\n pods,\n activeTask,\n setActiveTask,\n}: PipelineRunLogsProps) => {\n const PLRTaskRuns = getTaskRunsForPipelineRun(pipelineRun, taskRuns);\n const sortedTaskRuns = getSortedTaskRuns(PLRTaskRuns);\n const taskRunFromYaml = PLRTaskRuns?.reduce(\n (acc: { [value: string]: TaskRunKind }, value) => {\n if (value?.metadata?.name) {\n acc[value.metadata.name] = value;\n }\n return acc;\n },\n {},\n );\n\n const completed = pipelineRunFilterReducer(pipelineRun);\n const [lastActiveStepId, setLastActiveStepId] = React.useState<string>('');\n\n React.useEffect(() => {\n const mostRecentFailedOrActiveStep = sortedTaskRuns.find(tr =>\n ['Failed', 'Running'].includes(tr.status),\n );\n\n if (completed && !mostRecentFailedOrActiveStep && !activeTask) {\n setLastActiveStepId(sortedTaskRuns[sortedTaskRuns.length - 1]?.id);\n return;\n }\n\n setLastActiveStepId(\n !activeTask ? (mostRecentFailedOrActiveStep?.id as string) : '',\n );\n }, [sortedTaskRuns, completed, activeTask]);\n\n const currentStepId = activeTask || lastActiveStepId;\n const activeItem = getActiveTaskRun(sortedTaskRuns, currentStepId);\n const podName =\n activeItem && taskRunFromYaml?.[currentStepId]?.status?.podName;\n const podData = React.useMemo(\n () =>\n pods.find(pod => {\n return pod?.metadata?.name === podName;\n }),\n [pods, podName],\n );\n\n return (\n <Grid container>\n <Grid item xs={3}>\n <Paper>\n <TaskStatusStepper\n steps={sortedTaskRuns}\n currentStepId={currentStepId}\n onUserStepChange={setActiveTask}\n />\n </Paper>\n </Grid>\n <Grid item xs={9}>\n {!currentStepId && <Progress />}\n <div style={{ height: '80vh' }}>\n {!podData ? (\n <Paper\n elevation={1}\n style={{ height: '100%', width: '100%', minHeight: '30rem' }}\n >\n <LogViewer text=\"No Logs found\" />\n </Paper>\n ) : (\n <PipelineRunLogViewer pod={podData} />\n )}\n </div>\n </Grid>\n </Grid>\n );\n};\n\nexport default PipelineRunLogs;\n"],"names":["React","PipelineRunLogViewer"],"mappings":"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"}
@@ -1,6 +1,5 @@
1
1
  import React__default from 'react';
2
- import useAsyncRetry from 'react-use/lib/useAsyncRetry';
3
- import useInterval from 'react-use/lib/useInterval';
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,38 @@ 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
12
  const { clusters, selectedCluster } = React__default.useContext(TektonResourcesContext);
16
13
  const currCluster = clusters.length > 0 && clusters[selectedCluster || 0] || "";
17
14
  const containersList = pod?.spec?.containers || [];
18
- const getLogs = React__default.useCallback(
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]);
15
+ const podKey = pod?.metadata?.name;
45
16
  const stopPolling = pod?.status?.phase === "Succeeded" || pod?.status?.phase === "Failed";
46
- useInterval(() => retry(), stopPolling ? null : intervalMs);
47
- React__default.useEffect(() => {
48
- let mounted = true;
49
- if (!loading && mounted) {
50
- setPodInfo((prevState) => {
51
- if (prevState === pod?.metadata?.name) {
52
- setLoadingData(false);
53
- return prevState;
17
+ const { data, error, isLoading, isFetching } = useQuery({
18
+ queryKey: ["podLogs", podKey, currCluster],
19
+ queryFn: async () => {
20
+ const requests = containersList.map((container) => {
21
+ if (pod?.metadata?.name && pod?.metadata?.namespace && container) {
22
+ return kubernetesProxyApi.getPodLogs({
23
+ podName: pod.metadata.name,
24
+ namespace: pod.metadata.namespace,
25
+ containerName: container.name,
26
+ clusterName: currCluster
27
+ });
54
28
  }
55
- setLoadingData(true);
56
- return pod?.metadata?.name || "";
57
- });
58
- }
59
- return () => {
60
- mounted = false;
61
- };
62
- }, [loading, pod]);
63
- return { value, error, loading: loadingData };
29
+ return Promise.resolve({ text: "" });
30
+ }).filter(Boolean);
31
+ return Promise.all(requests);
32
+ },
33
+ enabled: !!pod?.metadata?.name && containersList.length > 0,
34
+ refetchInterval: stopPolling ? false : intervalMs,
35
+ staleTime: 6e4
36
+ // Keep the data fresh for 1 minute instead of constantly refetching.
37
+ });
38
+ return {
39
+ value: data,
40
+ error,
41
+ loading: isLoading || isFetching
42
+ };
64
43
  };
65
44
 
66
45
  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 React from 'react';\nimport useAsyncRetry from 'react-use/lib/useAsyncRetry';\nimport useInterval from 'react-use/lib/useInterval';\n\nimport { useApi } from '@backstage/core-plugin-api';\n\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 [loadingData, setLoadingData] = React.useState<boolean>(true);\n const [, setPodInfo] = React.useState<string>(pod?.metadata?.name ?? '');\n const kubernetesProxyApi = useApi(kubernetesProxyApiRef);\n const { clusters, selectedCluster } =\n React.useContext<TektonResourcesContextData>(TektonResourcesContext);\n const currCluster =\n (clusters.length > 0 && clusters[selectedCluster || 0]) || '';\n const containersList = pod?.spec?.containers || [];\n const getLogs = React.useCallback(\n async (podScope: ContainerScope): Promise<{ text: string }> => {\n const { podName, podNamespace, containerName, clusterName } = podScope;\n return await kubernetesProxyApi.getPodLogs({\n podName: podName,\n namespace: podNamespace,\n containerName: containerName,\n clusterName: clusterName,\n });\n },\n [kubernetesProxyApi],\n );\n\n const { value, error, loading, retry } = useAsyncRetry(async () => {\n const requests: Promise<{\n text: string;\n }>[] = [];\n containersList.map((container: V1Container, _idx: any) => {\n if (pod?.metadata?.name && pod?.metadata?.namespace && container) {\n const podScope = {\n containerName: container.name,\n podName: pod.metadata.name,\n podNamespace: pod.metadata.namespace,\n clusterName: currCluster,\n };\n requests.push(getLogs(podScope));\n }\n });\n return requests.length > 0 ? Promise.all(requests) : [];\n }, [containersList, pod, getLogs]);\n\n const stopPolling =\n pod?.status?.phase === 'Succeeded' || pod?.status?.phase === 'Failed';\n\n useInterval(() => retry(), stopPolling ? null : intervalMs);\n\n React.useEffect(() => {\n let mounted = true;\n if (!loading && mounted) {\n setPodInfo(prevState => {\n if (prevState === pod?.metadata?.name) {\n setLoadingData(false);\n return prevState;\n }\n setLoadingData(true);\n return pod?.metadata?.name || '';\n });\n }\n return () => {\n mounted = false;\n };\n }, [loading, pod]);\n\n return { value, error, loading: loadingData };\n};\n"],"names":["React"],"mappings":";;;;;;;AAyCO,MAAM,0BAA0B,CAAC;AAAA,EACtC,GAAA;AAAA,EACA,UAAa,GAAA;AACf,CAAsB,KAAA;AACpB,EAAA,MAAM,CAAC,WAAa,EAAA,cAAc,CAAI,GAAAA,cAAA,CAAM,SAAkB,IAAI,CAAA;AAClE,EAAM,MAAA,GAAG,UAAU,CAAA,GAAIA,eAAM,QAAiB,CAAA,GAAA,EAAK,QAAU,EAAA,IAAA,IAAQ,EAAE,CAAA;AACvE,EAAM,MAAA,kBAAA,GAAqB,OAAO,qBAAqB,CAAA;AACvD,EAAA,MAAM,EAAE,QAAU,EAAA,eAAA,EAChB,GAAAA,cAAA,CAAM,WAAuC,sBAAsB,CAAA;AACrE,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;AACjD,EAAA,MAAM,UAAUA,cAAM,CAAA,WAAA;AAAA,IACpB,OAAO,QAAwD,KAAA;AAC7D,MAAA,MAAM,EAAE,OAAA,EAAS,YAAc,EAAA,aAAA,EAAe,aAAgB,GAAA,QAAA;AAC9D,MAAO,OAAA,MAAM,mBAAmB,UAAW,CAAA;AAAA,QACzC,OAAA;AAAA,QACA,SAAW,EAAA,YAAA;AAAA,QACX,aAAA;AAAA,QACA;AAAA,OACD,CAAA;AAAA,KACH;AAAA,IACA,CAAC,kBAAkB;AAAA,GACrB;AAEA,EAAA,MAAM,EAAE,KAAO,EAAA,KAAA,EAAO,SAAS,KAAM,EAAA,GAAI,cAAc,YAAY;AACjE,IAAA,MAAM,WAEC,EAAC;AACR,IAAe,cAAA,CAAA,GAAA,CAAI,CAAC,SAAA,EAAwB,IAAc,KAAA;AACxD,MAAA,IAAI,KAAK,QAAU,EAAA,IAAA,IAAQ,GAAK,EAAA,QAAA,EAAU,aAAa,SAAW,EAAA;AAChE,QAAA,MAAM,QAAW,GAAA;AAAA,UACf,eAAe,SAAU,CAAA,IAAA;AAAA,UACzB,OAAA,EAAS,IAAI,QAAS,CAAA,IAAA;AAAA,UACtB,YAAA,EAAc,IAAI,QAAS,CAAA,SAAA;AAAA,UAC3B,WAAa,EAAA;AAAA,SACf;AACA,QAAS,QAAA,CAAA,IAAA,CAAK,OAAQ,CAAA,QAAQ,CAAC,CAAA;AAAA;AACjC,KACD,CAAA;AACD,IAAA,OAAO,SAAS,MAAS,GAAA,CAAA,GAAI,QAAQ,GAAI,CAAA,QAAQ,IAAI,EAAC;AAAA,GACrD,EAAA,CAAC,cAAgB,EAAA,GAAA,EAAK,OAAO,CAAC,CAAA;AAEjC,EAAA,MAAM,cACJ,GAAK,EAAA,MAAA,EAAQ,UAAU,WAAe,IAAA,GAAA,EAAK,QAAQ,KAAU,KAAA,QAAA;AAE/D,EAAA,WAAA,CAAY,MAAM,KAAA,EAAS,EAAA,WAAA,GAAc,OAAO,UAAU,CAAA;AAE1D,EAAAA,cAAA,CAAM,UAAU,MAAM;AACpB,IAAA,IAAI,OAAU,GAAA,IAAA;AACd,IAAI,IAAA,CAAC,WAAW,OAAS,EAAA;AACvB,MAAA,UAAA,CAAW,CAAa,SAAA,KAAA;AACtB,QAAI,IAAA,SAAA,KAAc,GAAK,EAAA,QAAA,EAAU,IAAM,EAAA;AACrC,UAAA,cAAA,CAAe,KAAK,CAAA;AACpB,UAAO,OAAA,SAAA;AAAA;AAET,QAAA,cAAA,CAAe,IAAI,CAAA;AACnB,QAAO,OAAA,GAAA,EAAK,UAAU,IAAQ,IAAA,EAAA;AAAA,OAC/B,CAAA;AAAA;AAEH,IAAA,OAAO,MAAM;AACX,MAAU,OAAA,GAAA,KAAA;AAAA,KACZ;AAAA,GACC,EAAA,CAAC,OAAS,EAAA,GAAG,CAAC,CAAA;AAEjB,EAAA,OAAO,EAAE,KAAA,EAAO,KAAO,EAAA,OAAA,EAAS,WAAY,EAAA;AAC9C;;;;"}
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 React 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 } =\n React.useContext<TektonResourcesContextData>(TektonResourcesContext);\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":["React"],"mappings":";;;;;;AAsCO,MAAM,0BAA0B,CAAC;AAAA,EACtC,GAAA;AAAA,EACA,UAAa,GAAA;AACf,CAAsB,KAAA;AACpB,EAAM,MAAA,kBAAA,GAAqB,OAAO,qBAAqB,CAAA;AACvD,EAAA,MAAM,EAAE,QAAU,EAAA,eAAA,EAChB,GAAAA,cAAA,CAAM,WAAuC,sBAAsB,CAAA;AACrE,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;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage-community/plugin-tekton",
3
- "version": "3.22.2",
3
+ "version": "3.23.0",
4
4
  "main": "dist/index.esm.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "license": "Apache-2.0",
@@ -56,6 +56,7 @@
56
56
  "@patternfly/react-core": "^6.0.0",
57
57
  "@patternfly/react-tokens": "^6.0.0",
58
58
  "@patternfly/react-topology": "^6.0.0",
59
+ "@tanstack/react-query": "^5.62.7",
59
60
  "classnames": "^2.3.2",
60
61
  "dagre": "^0.8.5",
61
62
  "lodash": "^4.17.21",