From 114cbc1ccd68f8ebd2ffba051bdee6502da9f76a Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Tue, 29 Mar 2022 16:06:17 +0200 Subject: [PATCH] chore: added animation polish. added new filter options. --- .../Settings/Logs/LogEventChart.tsx | 3 +- .../interfaces/Settings/Logs/LogSelection.tsx | 96 ++++++++++++------- .../DatabaseApiSelectionRender.tsx | 10 +- .../DatabasePostgresSelectionRender.tsx | 16 ++-- .../interfaces/Settings/Logs/LogTable.tsx | 22 +++-- .../interfaces/Settings/Logs/Logs.Divider.tsx | 7 ++ .../Settings/Logs/Logs.constants.ts | 59 ++++++++++-- .../interfaces/Settings/Logs/Logs.filter.tsx | 4 +- .../interfaces/Settings/Logs/Logs.helpers.ts | 9 +- .../Settings/Logs/LogsPreviewer.tsx | 13 ++- 10 files changed, 164 insertions(+), 75 deletions(-) create mode 100644 studio/components/interfaces/Settings/Logs/Logs.Divider.tsx diff --git a/studio/components/interfaces/Settings/Logs/LogEventChart.tsx b/studio/components/interfaces/Settings/Logs/LogEventChart.tsx index 55dd0fa6d12..49c6b5055c7 100644 --- a/studio/components/interfaces/Settings/Logs/LogEventChart.tsx +++ b/studio/components/interfaces/Settings/Logs/LogEventChart.tsx @@ -16,7 +16,6 @@ const LogEventChart: React.FC = ({ data, onBarClick }) => { return ( = ({ data, onBarClick }) => { }} customDateFormat="MMM D, HH:mm" displayDateInUtc - noDataMessage={""} + noDataMessage={''} /> ) } diff --git a/studio/components/interfaces/Settings/Logs/LogSelection.tsx b/studio/components/interfaces/Settings/Logs/LogSelection.tsx index ec8e439ba1b..13d560bae3e 100644 --- a/studio/components/interfaces/Settings/Logs/LogSelection.tsx +++ b/studio/components/interfaces/Settings/Logs/LogSelection.tsx @@ -13,7 +13,7 @@ import FunctionInvocationSelectionRender, { import FunctionLogsSelectionRender from './LogSelectionRenderers/FunctionLogsSelectionRender' interface Props { - log: LogData + log: LogData | undefined onClose: () => void queryType?: QueryType } @@ -57,51 +57,79 @@ const LogSelection: FC = ({ log, onClose, queryType }) => { return (
- {log ? ( - <> -
-
-
-

{header()}

-
- -
-
+
+
+
+
+
+ + +
-
- -
- - ) : ( -
-
+

Select an Event

-

+

Select an Event to view the code snippet (pretty view) or complete JSON payload (raw view).

- )} +
+
+
+
+ +
+
{log && }
+
+
) } diff --git a/studio/components/interfaces/Settings/Logs/LogSelectionRenderers/DatabaseApiSelectionRender.tsx b/studio/components/interfaces/Settings/Logs/LogSelectionRenderers/DatabaseApiSelectionRender.tsx index 962ab2afa6f..77dce2e1979 100644 --- a/studio/components/interfaces/Settings/Logs/LogSelectionRenderers/DatabaseApiSelectionRender.tsx +++ b/studio/components/interfaces/Settings/Logs/LogSelectionRenderers/DatabaseApiSelectionRender.tsx @@ -1,4 +1,6 @@ import React from 'react' +import { LOGS_TAILWIND_CLASSES } from '../Logs.constants' +import LogsDivider from '../Logs.Divider' import { jsonSyntaxHighlight, ResponseCodeFormatter } from '../LogsFormatters' const DatabaseApiSelectionRender = ({ log }: any) => { @@ -22,7 +24,7 @@ const DatabaseApiSelectionRender = ({ log }: any) => { return ( <> -
+
} /> @@ -31,7 +33,8 @@ const DatabaseApiSelectionRender = ({ log }: any) => { {clientInfo && } {referer && }
-
+ +

Request body

           
{ />
-
+ +

Response{method ? ` ${method}` : null} body

diff --git a/studio/components/interfaces/Settings/Logs/LogSelectionRenderers/DatabasePostgresSelectionRender.tsx b/studio/components/interfaces/Settings/Logs/LogSelectionRenderers/DatabasePostgresSelectionRender.tsx index 897828bc001..55594056a29 100644 --- a/studio/components/interfaces/Settings/Logs/LogSelectionRenderers/DatabasePostgresSelectionRender.tsx +++ b/studio/components/interfaces/Settings/Logs/LogSelectionRenderers/DatabasePostgresSelectionRender.tsx @@ -1,5 +1,7 @@ import { Alert } from '@supabase/ui' import React from 'react' +import { LOGS_TAILWIND_CLASSES } from '../Logs.constants' +import LogsDivider from '../Logs.Divider' import { jsonSyntaxHighlight, SeverityFormatter } from '../LogsFormatters' const DatabasePostgresSelectionRender = ({ log }: any) => { @@ -18,7 +20,7 @@ const DatabasePostgresSelectionRender = ({ log }: any) => { return ( <> -
+
Event message
{ }} />
-
-
+ +
} />
- {hint && ( -
+
)} - -
-
+ +

Metadata

           
{ }} onRowClick={(r) => setFocusedLog(r)} /> - {focusedLog && ( -
- setFocusedLog(null)} - log={focusedLog} - queryType={queryType} - /> -
- )} + {/* {focusedLog && ( */} +
+ setFocusedLog(null)} + log={focusedLog} + queryType={queryType} + /> +
+ {/* )} */}
diff --git a/studio/components/interfaces/Settings/Logs/Logs.Divider.tsx b/studio/components/interfaces/Settings/Logs/Logs.Divider.tsx new file mode 100644 index 00000000000..ab984fd5a4b --- /dev/null +++ b/studio/components/interfaces/Settings/Logs/Logs.Divider.tsx @@ -0,0 +1,7 @@ +const LogsDivider = () => { + return ( +
+ ) +} + +export default LogsDivider diff --git a/studio/components/interfaces/Settings/Logs/Logs.constants.ts b/studio/components/interfaces/Settings/Logs/Logs.constants.ts index fe0b7cd4f41..d99ca218849 100644 --- a/studio/components/interfaces/Settings/Logs/Logs.constants.ts +++ b/studio/components/interfaces/Settings/Logs/Logs.constants.ts @@ -253,6 +253,13 @@ export const SQL_FILTER_TEMPLATES: any = { 'status_code.success': `response.status_code between 200 and 299`, 'status_code.warning': `response.status_code between 400 and 499`, }, + function_logs: { + 'severity.error': `metadata.level = 'error'`, + 'severity.notError': `metadata.level != 'error'`, + 'severity.log': `metadata.level = 'log'`, + 'severity.info': `metadata.level = 'info'`, + 'severity.debug': `metadata.level = 'debug'`, + }, } // export const genDefaultQuery = (table: string, where: string = ''): string => `SELECT @@ -366,13 +373,8 @@ export const FILTER_OPTIONS: FilterOptions = { key: 'product', options: [ { - key: 'realtime', - label: 'Realtime', - description: '', - }, - { - key: 'storage', - label: 'Storage', + key: 'database', + label: 'Database', description: '', }, { @@ -381,8 +383,13 @@ export const FILTER_OPTIONS: FilterOptions = { description: '', }, { - key: 'database', - label: 'Database', + key: 'storage', + label: 'Storage', + description: '', + }, + { + key: 'realtime', + label: 'Realtime', description: '', }, ], @@ -433,4 +440,38 @@ export const FILTER_OPTIONS: FilterOptions = { ], }, }, + // function_logs + function_logs: { + severity: { + label: 'Severity', + key: 'severity', + options: [ + { + key: 'error', + label: 'Error', + description: 'Show all events that have error severity', + }, + { + key: 'info', + label: 'Info', + description: 'Show all events that have error severity', + }, + { + key: 'debug', + label: 'Debug', + description: 'Show all events that have error severity', + }, + { + key: 'log', + label: 'Log', + description: 'Show all events that are log severity', + }, + ], + }, + }, +} + +export const LOGS_TAILWIND_CLASSES = { + log_selection_x_padding: 'px-8', + space_y: 'px-6', } diff --git a/studio/components/interfaces/Settings/Logs/Logs.filter.tsx b/studio/components/interfaces/Settings/Logs/Logs.filter.tsx index cfaaa1a1d02..c4a0f0ee2e1 100644 --- a/studio/components/interfaces/Settings/Logs/Logs.filter.tsx +++ b/studio/components/interfaces/Settings/Logs/Logs.filter.tsx @@ -76,10 +76,10 @@ export const LogsFilter = ({ options, filtersState, dispatchFilters }: any) => { } }) - // console.log('payload', payload) + console.log('payload', payload) // console.log('submit form ran') dispatchFilters({ ...payload }) - handleReset() + // handleReset() }} > {({ isSubmitting }: { isSubmitting: boolean }) => ( diff --git a/studio/components/interfaces/Settings/Logs/Logs.helpers.ts b/studio/components/interfaces/Settings/Logs/Logs.helpers.ts index 34f6b56928e..0deeea188a5 100644 --- a/studio/components/interfaces/Settings/Logs/Logs.helpers.ts +++ b/studio/components/interfaces/Settings/Logs/Logs.helpers.ts @@ -6,8 +6,6 @@ export function filterSqlWhereBuilder( table: LogsTableName, override?: Override ) { - let count = 0 - // remove any filter arrays that are empty const filtersSanitized: any = Object.values(filters).filter((x: any) => x && x.length > 0) @@ -21,14 +19,17 @@ export function filterSqlWhereBuilder( if (filtersSanitized.length === 0 && !hasOverride) return whereArray if (hasOverride) { - count = +1 - const sql = `${override?.key}='${override?.value}'` + console.log('HAS OVERRIDE') + // count = +1 + const sql = `(${override?.key}='${override?.value}')` whereArray.push(sql) + if (filtersSanitized.length > 0) whereArray.push('and') } if (filtersSanitized.length === 0) return whereArray keys.map((x: string, i) => { + let count = 0 // do not parse empty key if (!x) return diff --git a/studio/components/interfaces/Settings/Logs/LogsPreviewer.tsx b/studio/components/interfaces/Settings/Logs/LogsPreviewer.tsx index 4fc6e5abd4e..18c83096b48 100644 --- a/studio/components/interfaces/Settings/Logs/LogsPreviewer.tsx +++ b/studio/components/interfaces/Settings/Logs/LogsPreviewer.tsx @@ -130,7 +130,7 @@ export const LogsPreviewer: React.FC = ({ projectRef, queryType, override } return ( -
+
setShowChart(!showChart)} @@ -162,7 +162,12 @@ export const LogsPreviewer: React.FC = ({ projectRef, queryType, override table={table} condensedLayout={condensedLayout} /> - {showChart && !isLoading ? ( +
= ({ projectRef, queryType, override }} />
- ) : null} -
+
+
{isLoading &&
}