mirror of
https://github.com/supabase/supabase.git
synced 2026-10-12 12:55:06 +03:00
Eliminated the 'host' field from filter fields, schema definitions, and column configuration in UnifiedLogs. This streamlines the logs interface and removes unused or unnecessary data.
83 lines
2.3 KiB
TypeScript
83 lines
2.3 KiB
TypeScript
import { z } from 'zod'
|
|
|
|
import {
|
|
ARRAY_DELIMITER,
|
|
LEVELS,
|
|
RANGE_DELIMITER,
|
|
} from 'components/ui/DataTable/DataTable.constants'
|
|
import { LOG_TYPES, METHODS, REGIONS } from './UnifiedLogs.constants'
|
|
|
|
export const columnSchema = z.object({
|
|
id: z.string(),
|
|
log_type: z.enum(LOG_TYPES),
|
|
method: z.enum(METHODS),
|
|
pathname: z.string(),
|
|
level: z.enum(LEVELS),
|
|
status: z.number(),
|
|
date: z.date(),
|
|
timestamp: z.number(),
|
|
event_message: z.string().optional(),
|
|
log_count: z.number().optional(), // used to count function logs for a given execution_id
|
|
logs: z.array(z.any()).optional(), // array of function logs
|
|
auth_user: z.string().optional(),
|
|
})
|
|
|
|
export type ColumnSchema = z.infer<typeof columnSchema>
|
|
|
|
export const columnFilterSchema = z.object({
|
|
level: z
|
|
.string()
|
|
.transform((val) => val.split(ARRAY_DELIMITER))
|
|
.pipe(z.enum(LEVELS).array())
|
|
.optional(),
|
|
method: z
|
|
.string()
|
|
.transform((val) => val.split(ARRAY_DELIMITER))
|
|
.pipe(z.enum(METHODS).array())
|
|
.optional(),
|
|
pathname: z.string().optional(),
|
|
status: z
|
|
.string()
|
|
.transform((val) => val.split(ARRAY_DELIMITER))
|
|
.pipe(z.string().array())
|
|
.optional(),
|
|
regions: z
|
|
.string()
|
|
.transform((val) => val.split(ARRAY_DELIMITER))
|
|
.pipe(z.enum(REGIONS).array())
|
|
.optional(),
|
|
date: z
|
|
.string()
|
|
.transform((val) => val.split(RANGE_DELIMITER).map(Number))
|
|
.pipe(z.coerce.date().array())
|
|
.optional(),
|
|
auth_user: z.string().optional(),
|
|
})
|
|
|
|
export type ColumnFilterSchema = z.infer<typeof columnFilterSchema>
|
|
|
|
export const facetMetadataSchema = z.object({
|
|
rows: z.array(z.object({ value: z.any(), total: z.number() })),
|
|
total: z.number(),
|
|
min: z.number().optional(),
|
|
max: z.number().optional(),
|
|
})
|
|
|
|
export type FacetMetadataSchema = z.infer<typeof facetMetadataSchema>
|
|
|
|
export type BaseChartSchema = { timestamp: number; [key: string]: number }
|
|
|
|
export const timelineChartSchema = z.object({
|
|
timestamp: z.number(), // UNIX
|
|
...LEVELS.reduce(
|
|
(acc, level) => ({
|
|
...acc,
|
|
[level]: z.number().default(0),
|
|
}),
|
|
{} as Record<(typeof LEVELS)[number], z.ZodNumber>
|
|
),
|
|
// REMINDER: make sure to have the `timestamp` field in the object
|
|
}) satisfies z.ZodType<BaseChartSchema>
|
|
|
|
export type TimelineChartSchema = z.infer<typeof timelineChartSchema>
|