@@ -257,6 +257,7 @@ const getEdgeLogsQuery = () => {
257257
258258 -- ONLY include logs where the path does not include /rest/
259259 WHERE edge_logs_request.path NOT LIKE '%/rest/%'
260+ AND edge_logs_request.path NOT LIKE '%/storage/%'
260261
261262 `
262263}
@@ -445,6 +446,41 @@ const getSupavisorLogsQuery = () => {
445446 `
446447}
447448
449+ // WHERE pathname includes `/storage/`
450+ const getSupabaseStorageLogsQuery = ( ) => {
451+ return `
452+ select
453+ id,
454+ el.timestamp as timestamp,
455+ 'storage' as log_type,
456+ CAST(edge_logs_response.status_code AS STRING) as status,
457+ CASE
458+ WHEN edge_logs_response.status_code BETWEEN 200 AND 299 THEN 'success'
459+ WHEN edge_logs_response.status_code BETWEEN 400 AND 499 THEN 'warning'
460+ WHEN edge_logs_response.status_code >= 500 THEN 'error'
461+ ELSE 'success'
462+ END as level,
463+ edge_logs_request.path as path,
464+ edge_logs_request.host as host,
465+ null as event_message,
466+ edge_logs_request.method as method,
467+ authorization_payload.role as api_role,
468+ COALESCE(sb.auth_user, null) as auth_user,
469+ null as log_count,
470+ null as logs
471+ from edge_logs as el
472+ cross join unnest(metadata) as edge_logs_metadata
473+ cross join unnest(edge_logs_metadata.request) as edge_logs_request
474+ cross join unnest(edge_logs_metadata.response) as edge_logs_response
475+ left join unnest(edge_logs_request.sb) as sb
476+ left join unnest(sb.jwt) as jwt
477+ left join unnest(jwt.authorization) as auth
478+ left join unnest(auth.payload) as authorization_payload
479+ -- ONLY include logs where the path includes /storage/
480+ WHERE edge_logs_request.path LIKE '%/storage/%'
481+ `
482+ }
483+
448484/**
449485 * Combine all log sources to create the unified logs CTE
450486 */
@@ -462,6 +498,8 @@ WITH unified_logs AS (
462498 ${ getAuthLogsQuery ( ) }
463499 union all
464500 ${ getSupavisorLogsQuery ( ) }
501+ union all
502+ ${ getSupabaseStorageLogsQuery ( ) }
465503)
466504 `
467505}
0 commit comments