Skip to content

Commit fac7bbb

Browse files
authored
Surface errors from logs.all.otel endpoint (supabase#46094)
## Context If an error somehow occurs on the logs.all.otel endpoint for unified logs, the network request still returns a 200 but the error is then returned in the response as such: <img width="681" height="269" alt="image" src="https://github.com/user-attachments/assets/62bcf68f-8a8c-46a0-a91a-17f653004fa0" /> In which case, there's currently no UI error handling in unified logs, and it'll just show no results. Changes in this PR addresses that: <img width="1450" height="956" alt="image" src="https://github.com/user-attachments/assets/1b2c166b-d3d1-4923-9e35-51bad99b6e1c" /> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Enhanced error handling and messaging for log retrieval—displays explicit error notifications when queries fail instead of misleading empty state messages, improving user experience and clarity during troubleshooting. <!-- review_stack_entry_start --> [![Review Change Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/supabase/supabase/pull/46094?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack) <!-- review_stack_entry_end --> <!-- end of auto-generated comment: release notes by coderabbit.ai -->
1 parent c88dba9 commit fac7bbb

4 files changed

Lines changed: 29 additions & 4 deletions

File tree

apps/studio/components/interfaces/UnifiedLogs/UnifiedLogs.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,8 @@ export const UnifiedLogs = () => {
143143

144144
const {
145145
data: unifiedLogsData,
146+
error,
147+
isError,
146148
isLoading,
147149
isFetching,
148150
isFetchingNextPage,
@@ -152,6 +154,7 @@ export const UnifiedLogs = () => {
152154
fetchNextPage,
153155
fetchPreviousPage,
154156
} = useUnifiedLogsInfiniteQuery({ projectRef, search: searchParameters })
157+
155158
const {
156159
data: counts,
157160
isPending: isLoadingCounts,
@@ -161,6 +164,7 @@ export const UnifiedLogs = () => {
161164
projectRef,
162165
search: searchParameters,
163166
})
167+
164168
const {
165169
data: unifiedLogsChart = [],
166170
isFetching: isFetchingCharts,
@@ -355,6 +359,7 @@ export const UnifiedLogs = () => {
355359
return (
356360
<DataTableProvider
357361
table={table}
362+
error={error}
358363
columns={UNIFIED_LOGS_COLUMNS}
359364
filterFields={filterFields}
360365
columnFilters={columnFilters}
@@ -365,6 +370,7 @@ export const UnifiedLogs = () => {
365370
searchParameters={searchParameters}
366371
enableColumnOrdering={true}
367372
isFetching={isFetching}
373+
isError={isError}
368374
isLoading={isLoading}
369375
isLoadingCounts={isLoadingCounts}
370376
getFacetedUniqueValues={getFacetedUniqueValues(facets)}

apps/studio/components/ui/DataTable/DataTableInfinite.tsx

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { Fragment, UIEvent, useCallback, useRef } from 'react'
77
import { Button, cn } from 'ui'
88
import { ShimmeringLoader } from 'ui-patterns'
99

10+
import AlertError from '../AlertError'
1011
import { formatCompactNumber } from './DataTable.utils'
1112
import { useDataTable } from './providers/DataTableProvider'
1213
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from './Table'
@@ -44,7 +45,7 @@ export function DataTableInfinite<TData, TValue, TMeta>({
4445
setColumnVisibility,
4546
searchParamsParser,
4647
}: DataTableInfiniteProps<TData, TValue, TMeta>) {
47-
const { table, isLoading, isFetching } = useDataTable()
48+
const { table, error, isError, isLoading, isFetching } = useDataTable()
4849
const tableRef = useRef<HTMLTableElement>(null)
4950

5051
const headerGroups = table.getHeaderGroups()
@@ -145,6 +146,20 @@ export function DataTableInfinite<TData, TValue, TMeta>({
145146
</TableRow>
146147
))}
147148
</Fragment>
149+
) : isError ? (
150+
<Fragment>
151+
<TableRow className="hover:bg-transparent h-full">
152+
<TableCell colSpan={columns.length} className="text-center">
153+
<div className="flex flex-col items-start justify-start h-full gap-3 px-4 pt-4">
154+
<AlertError
155+
error={error}
156+
className="text-left"
157+
subject="Failed to retrieve logs"
158+
/>
159+
</div>
160+
</TableCell>
161+
</TableRow>
162+
</Fragment>
148163
) : (
149164
<Fragment>
150165
<TableRow className="hover:bg-transparent h-full">

apps/studio/components/ui/DataTable/providers/DataTableProvider.tsx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { createContext, ReactNode, useContext, useMemo } from 'react'
1111

1212
import { DataTableFilterField } from '../DataTable.types'
1313
import { QuerySearchParamsType } from '@/components/interfaces/UnifiedLogs/UnifiedLogs.types'
14+
import { ResponseError } from '@/types'
1415

1516
// REMINDER: read about how to move controlled state out of the useReactTable hook
1617
// https://github.com/TanStack/table/discussions/4005#discussioncomment-7303569
@@ -28,11 +29,13 @@ interface DataTableStateContextType {
2829

2930
interface DataTableBaseContextType<TData = unknown, TValue = unknown> {
3031
table: Table<TData>
32+
error: ResponseError | null
3133
filterFields: DataTableFilterField<TData>[]
3234
columns: ColumnDef<TData, TValue>[]
33-
isFetching?: boolean
34-
isLoading?: boolean
35-
isLoadingCounts?: boolean
35+
isFetching: boolean
36+
isError: boolean
37+
isLoading: boolean
38+
isLoadingCounts: boolean
3639
getFacetedUniqueValues?: (table: Table<TData>, columnId: string) => Map<string, number>
3740
getFacetedMinMaxValues?: (table: Table<TData>, columnId: string) => undefined | [number, number]
3841
}

apps/studio/data/logs/unified-logs-infinite-query.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ export async function getUnifiedLogs(
116116
})
117117

118118
if (error) handleError(error)
119+
if (data.error) handleError(new Error(data.error as string))
119120

120121
const resultData = data?.result ?? []
121122

0 commit comments

Comments
 (0)