@@ -627,6 +661,21 @@ const LogEntries = ({
{log.responseTime && (
RT: {log.responseTime}ms
)}
+ {/* ModSecurity specific details */}
+ {log.ruleId && (
+
+ Rule ID: {log.ruleId}
+
+ )}
+ {log.severity && (
+
Severity: {log.severity}
+ )}
+ {log.tags && log.tags.length > 0 && (
+
+ Tags: {log.tags.join(', ')}
+
+ )}
+ {log.uri &&
URI: {log.uri}
}
))
@@ -726,6 +775,7 @@ const Logs = () => {
const [autoRefresh, setAutoRefresh] = useState(false);
const [logsRefetch, setLogsRefetch] = useState<(() => Promise
) | null>(null);
const [isReloading, setIsReloading] = useState(false);
+ const [selectedLog, setSelectedLog] = useState(null);
// URL state management with nuqs
const [page, setPage] = useQueryState("page", parseAsInteger.withDefault(1));
@@ -897,6 +947,15 @@ const Logs = () => {
setAutoRefresh={setAutoRefresh}
toast={toast}
onRefetch={(refetch) => setLogsRefetch(() => refetch)}
+ selectedLog={selectedLog}
+ setSelectedLog={setSelectedLog}
+ />
+
+ {/* Log Details Dialog */}
+ !open && setSelectedLog(null)}
/>
);
diff --git a/apps/web/src/components/ui/scroll-area.tsx b/apps/web/src/components/ui/scroll-area.tsx
new file mode 100644
index 0000000..cf253cf
--- /dev/null
+++ b/apps/web/src/components/ui/scroll-area.tsx
@@ -0,0 +1,46 @@
+import * as React from "react"
+import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area"
+
+import { cn } from "@/lib/utils"
+
+const ScrollArea = React.forwardRef<
+ React.ElementRef