From 9a0dfa723ad4ab43f34a2933128afb0932b78fc6 Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Sun, 31 Dec 2023 07:31:33 -0600 Subject: [PATCH] Add logs to new webui (#9118) * Add logs to new webui * Automatically refresh logs while viewing * Clean up hooks --- web/src/components/Header.tsx | 7 ++++ web/src/pages/Logs.tsx | 77 ++++++++++++++++++++++++++++++++++- 2 files changed, 83 insertions(+), 1 deletion(-) diff --git a/web/src/components/Header.tsx b/web/src/components/Header.tsx index d607b98e6..0ca8350c9 100644 --- a/web/src/components/Header.tsx +++ b/web/src/components/Header.tsx @@ -5,6 +5,7 @@ import { LuGithub, LuHardDrive, LuLifeBuoy, + LuList, LuMenu, LuMoon, LuMoreVertical, @@ -135,6 +136,12 @@ function Header({ onToggleNavbar }: HeaderProps) { System metrics + + + + System logs + + Configuration diff --git a/web/src/pages/Logs.tsx b/web/src/pages/Logs.tsx index 16cae73ba..26966faec 100644 --- a/web/src/pages/Logs.tsx +++ b/web/src/pages/Logs.tsx @@ -1,9 +1,84 @@ +import { Button } from "@/components/ui/button"; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuLabel, + DropdownMenuRadioGroup, + DropdownMenuRadioItem, + DropdownMenuSeparator, + DropdownMenuTrigger, +} from "@/components/ui/dropdown-menu"; import Heading from "@/components/ui/heading"; +import copy from "copy-to-clipboard"; +import { useCallback, useMemo, useState } from "react"; +import useSWR from "swr"; + +const logTypes = ["frigate", "go2rtc", "nginx"] as const; +type LogType = (typeof logTypes)[number]; function Logs() { + const [logService, setLogService] = useState("frigate"); + + const { data: frigateLogs } = useSWR("logs/frigate", { + refreshInterval: 1000, + }); + const { data: go2rtcLogs } = useSWR("logs/go2rtc", { refreshInterval: 1000 }); + const { data: nginxLogs } = useSWR("logs/nginx", { refreshInterval: 1000 }); + const logs = useMemo(() => { + if (logService == "frigate") { + return frigateLogs; + } else if (logService == "go2rtc") { + return go2rtcLogs; + } else if (logService == "nginx") { + return nginxLogs; + } else { + return "unknown logs"; + } + }, [logService, frigateLogs, go2rtcLogs, nginxLogs]); + + const handleCopyLogs = useCallback(() => { + copy(logs); + }, [logs]); + return ( <> - Logs +
+ + Logs + +
+ + + + + + Select Logs To View + + setLogService(type as LogType)} + > + {Object.values(logTypes).map((item) => ( + + {item} Logs + + ))} + + + + +
+
+ +
+ {logs} +
); }