From 4a5c1ed58280d1c6d591aa4bd650a808958cf3b4 Mon Sep 17 00:00:00 2001 From: MacRimi Date: Sat, 11 Oct 2025 19:43:15 +0200 Subject: [PATCH] Update AppImage --- AppImage/components/system-logs.tsx | 81 +++++++++++++++-------------- AppImage/components/ui/calendar.tsx | 2 +- AppImage/scripts/flask_server.py | 18 +++---- 3 files changed, 50 insertions(+), 51 deletions(-) diff --git a/AppImage/components/system-logs.tsx b/AppImage/components/system-logs.tsx index 7c2930f..d201088 100644 --- a/AppImage/components/system-logs.tsx +++ b/AppImage/components/system-logs.tsx @@ -102,18 +102,17 @@ export function SystemLogs() { const [selectedLog, setSelectedLog] = useState(null) const [selectedEvent, setSelectedEvent] = useState(null) const [selectedBackup, setSelectedBackup] = useState(null) - const [selectedNotification, setSelectedNotification] = useState(null) + const [selectedNotification, setSelectedNotification] = useState(null) // Added const [isLogModalOpen, setIsLogModalOpen] = useState(false) const [isEventModalOpen, setIsEventModalOpen] = useState(false) const [isBackupModalOpen, setIsBackupModalOpen] = useState(false) - const [isNotificationModalOpen, setIsNotificationModalOpen] = useState(false) + const [isNotificationModalOpen, setIsNotificationModalOpen] = useState(false) // Added const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false) const [dateFilter, setDateFilter] = useState("now") const [customDays, setCustomDays] = useState("1") const [dateRange, setDateRange] = useState(undefined) - const [isCalendarOpen, setIsCalendarOpen] = useState(false) const getApiUrl = (endpoint: string) => { if (typeof window !== "undefined") { @@ -129,9 +128,8 @@ export function SystemLogs() { useEffect(() => { if (dateFilter !== "now" && dateFilter !== "custom") { console.log("[v0] Date filter changed to:", dateFilter) - fetchSystemLogs().then((logsData) => { - console.log("[v0] Fetched logs:", logsData.length) - setLogs(logsData) + fetchSystemLogs({ since_days: Number(dateFilter) }).then((newLogs) => { + setLogs(newLogs) }) } }, [dateFilter]) @@ -172,42 +170,30 @@ export function SystemLogs() { } } - const handleApplyDateRange = async () => { - if (dateRange?.from && dateRange?.to) { - console.log("[v0] Applying date range:", dateRange) - setIsCalendarOpen(false) - setLoading(true) - const logsRes = await fetchSystemLogs() - console.log("[v0] Fetched logs for date range:", logsRes.length) - setLogs(logsRes) - setLoading(false) - } - } - - const fetchSystemLogs = async (): Promise => { + const fetchSystemLogs = async (params?: { + since_days?: number + from_date?: string + to_date?: string + }): Promise => { try { let apiUrl = getApiUrl("/api/logs") - const params = new URLSearchParams() - - if (dateFilter === "custom" && dateRange?.from && dateRange?.to) { - const fromDate = format(dateRange.from, "yyyy-MM-dd") - const toDate = format(dateRange.to, "yyyy-MM-dd") - params.append("from_date", fromDate) - params.append("to_date", toDate) - console.log("[v0] Fetching logs with custom date range:", fromDate, "to", toDate) - } else if (dateFilter !== "now") { - const daysAgo = Number.parseInt(dateFilter) - params.append("since_days", daysAgo.toString()) - console.log("[v0] Fetching logs from", daysAgo, "days ago") + // Add date parameters if provided + const queryParams = new URLSearchParams() + if (params?.since_days) { + queryParams.append("since_days", params.since_days.toString()) + console.log("[v0] Fetching logs with since_days:", params.since_days) + } + if (params?.from_date && params?.to_date) { + queryParams.append("from_date", params.from_date) + queryParams.append("to_date", params.to_date) + console.log("[v0] Fetching logs with date range:", params.from_date, "to", params.to_date) } - if (params.toString()) { - apiUrl += `?${params.toString()}` + if (queryParams.toString()) { + apiUrl += `?${queryParams.toString()}` } - console.log("[v0] Fetching logs from:", apiUrl) - const response = await fetch(apiUrl, { method: "GET", headers: { @@ -228,6 +214,18 @@ export function SystemLogs() { } } + const handleApplyDateRange = async () => { + if (dateRange?.from && dateRange?.to) { + console.log("[v0] Applying date range filter:", dateRange.from, "to", dateRange.to) + setLoading(true) + const fromDate = format(dateRange.from, "yyyy-MM-dd") + const toDate = format(dateRange.to, "yyyy-MM-dd") + const newLogs = await fetchSystemLogs({ from_date: fromDate, to_date: toDate }) + setLogs(newLogs) + setLoading(false) + } + } + const handleDownloadLogs = async (type = "system") => { try { let hours = 48 @@ -669,7 +667,7 @@ export function SystemLogs() { {dateFilter === "custom" && ( - + diff --git a/AppImage/components/ui/calendar.tsx b/AppImage/components/ui/calendar.tsx index 0b66666..553b906 100644 --- a/AppImage/components/ui/calendar.tsx +++ b/AppImage/components/ui/calendar.tsx @@ -22,7 +22,7 @@ function Calendar({ className, classNames, showOutsideDays = true, ...props }: C nav: "space-x-1 flex items-center", nav_button: cn( buttonVariants({ variant: "outline" }), - "h-7 w-7 bg-transparent p-0 opacity-100 hover:bg-accent hover:text-accent-foreground border-border", + "h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100", ), nav_button_previous: "absolute left-1", nav_button_next: "absolute right-1", diff --git a/AppImage/scripts/flask_server.py b/AppImage/scripts/flask_server.py index b3705e3..1b8e1d4 100644 --- a/AppImage/scripts/flask_server.py +++ b/AppImage/scripts/flask_server.py @@ -3408,20 +3408,14 @@ def api_logs_download(): level = request.args.get('level', 'all') service = request.args.get('service', 'all') since_days = request.args.get('since_days', None) + from_date = request.args.get('from_date', None) + to_date = request.args.get('to_date', None) - if since_days: + if from_date and to_date: + # Date format expected: YYYY-MM-DD + cmd = ['journalctl', '--since', from_date, '--until', f'{to_date} 23:59:59', '--no-pager'] + elif since_days: days = int(since_days) - # Original code: cmd = ['journalctl', '--since', f'{days} days ago', '--until', f'{days - 1} days ago', '--no-pager'] - # This logic seems incorrect if we want logs FROM since_days ago. - # Correct logic: logs from 'days' ago until 'now' (or 'days-1' ago for a specific 24h period) - # For simplicity and to keep the original intent of filtering *from* X days ago, let's use '--since'. - # If 'since_days' is 1, it means logs from yesterday until now. - # If 'since_days' is 2, it means logs from the day before yesterday until now. - # Let's assume 'since_days' means the number of *full 24-hour periods* to go back. - # So, if since_days = 1, we want logs from 24 hours ago. - # If since_days = 2, we want logs from 48 hours ago. - # The original '--until' logic was problematic. Let's simplify. - # If 'since_days' is provided, use it as the primary time filter. cmd = ['journalctl', '--since', f'{days} days ago', '--no-pager'] else: cmd = ['journalctl', '--since', f'{hours} hours ago', '--no-pager']