From 3a38abedd5c386e42dfd45f26c5198a50353dfd8 Mon Sep 17 00:00:00 2001 From: Praveen K B Date: Mon, 23 Dec 2024 14:45:39 +0530 Subject: [PATCH 1/2] Fixed the loading state when stats was error --- src/hooks/useGetStreamMetadata.ts | 40 +++++++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 5 deletions(-) diff --git a/src/hooks/useGetStreamMetadata.ts b/src/hooks/useGetStreamMetadata.ts index 5f780b6f..caf18ac2 100644 --- a/src/hooks/useGetStreamMetadata.ts +++ b/src/hooks/useGetStreamMetadata.ts @@ -15,7 +15,7 @@ export type MetaData = { // until dedicated endpoint been provided - fetch one by one export const useGetStreamMetadata = () => { - const [isLoading, setLoading] = useState(false); + const [isLoading, setLoading] = useState(true); const [error, setError] = useState(false); const [metaData, setMetadata] = useState(null); const [userRoles] = useAppStore((store) => store.userRoles); @@ -24,25 +24,55 @@ export const useGetStreamMetadata = () => { async (streams: string[]) => { if (!userRoles) return; setLoading(true); + let encounteredError = false; try { // stats + debugger; const allStatsReqs = streams.map((stream) => getLogStreamStats(stream)); - const allStatsRes = await Promise.all(allStatsReqs); + const statsResults = await Promise.allSettled(allStatsReqs); + // Notify errors for stats + statsResults.forEach((result, index) => { + if (result.status === 'rejected') { + encounteredError = true; + notifyError({ + message: `Failed to fetch stats for stream: ${streams[index]}`, + }); + } + }); // retention const streamsWithSettingsAccess = _.filter(streams, (stream) => _.includes(getStreamsSepcificAccess(userRoles, stream), 'StreamSettings'), ); - const allretentionReqs = streamsWithSettingsAccess.map((stream) => getLogStreamRetention(stream)); - const allretentionRes = await Promise.all(allretentionReqs); + const allRetentionReqs = streamsWithSettingsAccess.map((stream) => getLogStreamRetention(stream)); + const retentionResults = await Promise.allSettled(allRetentionReqs); + + // Notify errors for retention + retentionResults.forEach((result, index) => { + if (result.status === 'rejected') { + encounteredError = true; + notifyError({ + message: `Failed to fetch retention for stream: ${streamsWithSettingsAccess[index]}`, + }); + } + }); + // Combine results const metadata = streams.reduce((acc, stream, index) => { + const statsResult = statsResults[index]; + const retentionResult = retentionResults.find((_, idx) => streamsWithSettingsAccess[idx] === stream); + return { ...acc, - [stream]: { stats: allStatsRes[index]?.data || {}, retention: allretentionRes[index]?.data || [] }, + [stream]: { + stats: statsResult?.status === 'fulfilled' ? statsResult.value.data : {}, + retention: retentionResult?.status === 'fulfilled' ? retentionResult.value.data : [], + }, }; }, {}); + setMetadata(metadata); + setError(encounteredError); } catch { setError(true); setMetadata(null); From cf50d1d30c002847a0e674769a1899f9c3f7f067 Mon Sep 17 00:00:00 2001 From: Praveen K B Date: Mon, 23 Dec 2024 15:07:21 +0530 Subject: [PATCH 2/2] Removed debugger statement --- src/hooks/useGetStreamMetadata.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/hooks/useGetStreamMetadata.ts b/src/hooks/useGetStreamMetadata.ts index caf18ac2..14ff03e1 100644 --- a/src/hooks/useGetStreamMetadata.ts +++ b/src/hooks/useGetStreamMetadata.ts @@ -27,7 +27,6 @@ export const useGetStreamMetadata = () => { let encounteredError = false; try { // stats - debugger; const allStatsReqs = streams.map((stream) => getLogStreamStats(stream)); const statsResults = await Promise.allSettled(allStatsReqs);