diff --git a/.gitignore b/.gitignore index cbb590b..a538ba3 100644 --- a/.gitignore +++ b/.gitignore @@ -37,6 +37,7 @@ next-env.d.ts .vscode .cache +debug-logs # Environment variables .env diff --git a/debug-logs/67b8a2ccd785e367b3c5e37b.json b/debug-logs/67b8a2ccd785e367b3c5e37b.json deleted file mode 100644 index 44da55e..0000000 --- a/debug-logs/67b8a2ccd785e367b3c5e37b.json +++ /dev/null @@ -1,31 +0,0 @@ -[ - { - "url": "books/ondeck", - "startTime": 2885483.439666003, - "endTime": 2886906.0345830023, - "fromCache": false, - "duration": 1422.59491699934, - "timestamp": "2025-02-23T14:10:34.889Z" - }, - { - "url": "home-on-deck", - "startTime": 2885483.3969579935, - "endTime": 2886915.6758749783, - "fromCache": true, - "cacheType": "HOME", - "duration": 1432.2789169847965, - "timestamp": "2025-02-23T14:10:34.901Z" - }, - { - "url": "Page Render: HomePage", - "startTime": 2885485.3594990075, - "endTime": 2886935.9214159846, - "duration": 1450.5619169771671, - "timestamp": "2025-02-23T14:10:34.912Z", - "fromCache": false, - "pageRender": { - "page": "HomePage", - "duration": 1450.5619169771671 - } - } -] \ No newline at end of file diff --git a/debug-logs/julienfroidefond@gmail.com.json b/debug-logs/julienfroidefond@gmail.com.json deleted file mode 100644 index f824c1d..0000000 --- a/debug-logs/julienfroidefond@gmail.com.json +++ /dev/null @@ -1,23 +0,0 @@ -[ - { - "url": "series/list", - "startTime": 1555818.8649999797, - "endTime": 1556150.4556659758, - "duration": 331.5906659960747, - "timestamp": "2025-02-23T12:27:42.757Z" - }, - { - "url": "libraries", - "startTime": 1556210.246457994, - "endTime": 1556425.7659159899, - "duration": 215.51945799589157, - "timestamp": "2025-02-23T12:27:43.141Z" - }, - { - "url": "series/0GNTC1Q53EM9R", - "startTime": 1590829.9988330007, - "endTime": 1591134.537375003, - "duration": 304.5385420024395, - "timestamp": "2025-02-23T12:28:17.719Z" - } -] \ No newline at end of file diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 7b7c7ab..ee518a4 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -4,7 +4,6 @@ import "@/styles/globals.css"; import { cn } from "@/lib/utils"; import ClientLayout from "@/components/layout/ClientLayout"; import { PreferencesProvider } from "@/contexts/PreferencesContext"; -import { DebugWrapper } from "@/components/debug/DebugWrapper"; const inter = Inter({ subsets: ["latin"] }); @@ -117,7 +116,6 @@ export default function RootLayout({ children }: { children: React.ReactNode }) {children} - diff --git a/src/components/debug/DebugInfo.tsx b/src/components/debug/DebugInfo.tsx index 796b682..d72f629 100644 --- a/src/components/debug/DebugInfo.tsx +++ b/src/components/debug/DebugInfo.tsx @@ -2,6 +2,7 @@ import { usePreferences } from "@/contexts/PreferencesContext"; import { useEffect, useState } from "react"; +import { usePathname } from "next/navigation"; import { X, Database, @@ -46,10 +47,10 @@ function formatDuration(duration: number) { } export function DebugInfo() { - const { preferences } = usePreferences(); const [logs, setLogs] = useState([]); const [isMinimized, setIsMinimized] = useState(false); const [isRefreshing, setIsRefreshing] = useState(false); + const pathname = usePathname(); const fetchLogs = async () => { try { @@ -66,9 +67,21 @@ export function DebugInfo() { } }; + // Rafraîchir les logs au montage et à chaque changement de page useEffect(() => { fetchLogs(); - }, []); + }, [pathname]); + + // Rafraîchir les logs périodiquement si la fenêtre n'est pas minimisée + useEffect(() => { + if (isMinimized) return; + + const interval = setInterval(() => { + fetchLogs(); + }, 5000); // Rafraîchir toutes les 5 secondes + + return () => clearInterval(interval); + }, [isMinimized]); const clearLogs = async () => { try { @@ -83,12 +96,19 @@ export function DebugInfo() { return (
-

DEBUG !

+
+

DEBUG

+ {!isMinimized && ( + + {sortedLogs.length} entrée{sortedLogs.length > 1 ? "s" : ""} + + )} +
diff --git a/src/contexts/PreferencesContext.tsx b/src/contexts/PreferencesContext.tsx index d85ef4c..4b2b378 100644 --- a/src/contexts/PreferencesContext.tsx +++ b/src/contexts/PreferencesContext.tsx @@ -28,25 +28,25 @@ export function PreferencesProvider({ children }: { children: React.ReactNode }) const [preferences, setPreferences] = useState(defaultPreferences); const [isLoading, setIsLoading] = useState(true); - useEffect(() => { - const fetchPreferences = async () => { - try { - const response = await fetch("/api/preferences"); - if (!response.ok) throw new Error("Erreur lors de la récupération des préférences"); - const data = await response.json(); - setPreferences({ - ...defaultPreferences, - ...data, - }); - } catch (error) { - console.error("Erreur lors de la récupération des préférences:", error); - // En cas d'erreur, on garde les préférences par défaut - setPreferences(defaultPreferences); - } finally { - setIsLoading(false); - } - }; + const fetchPreferences = async () => { + try { + const response = await fetch("/api/preferences"); + if (!response.ok) throw new Error("Erreur lors de la récupération des préférences"); + const data = await response.json(); + setPreferences({ + ...defaultPreferences, + ...data, + }); + } catch (error) { + console.error("Erreur lors de la récupération des préférences:", error); + // En cas d'erreur, on garde les préférences par défaut + setPreferences(defaultPreferences); + } finally { + setIsLoading(false); + } + }; + useEffect(() => { fetchPreferences(); }, []); @@ -64,14 +64,17 @@ export function PreferencesProvider({ children }: { children: React.ReactNode }) const updatedPreferences = await response.json(); - setPreferences((prev) => { - const newState = { - ...prev, - ...updatedPreferences, - }; - return newState; - }); + setPreferences((prev) => ({ + ...prev, + ...updatedPreferences, + })); + + // Forcer un rafraîchissement des préférences + await fetchPreferences(); + + return updatedPreferences; } catch (error) { + console.error("Erreur lors de la mise à jour des préférences:", error); throw error; } }; diff --git a/src/lib/hoc/withPageTiming.tsx b/src/lib/hoc/withPageTiming.tsx index c9a4d68..9b80f66 100644 --- a/src/lib/hoc/withPageTiming.tsx +++ b/src/lib/hoc/withPageTiming.tsx @@ -7,9 +7,8 @@ export function withPageTiming(pageName: string, Component: PageComponent) { const start = performance.now(); const result = await Promise.resolve(Component(props)); const duration = performance.now() - start; - // Log le temps de rendu - await DebugService.logPageRender(pageName, duration); + await DebugService.logPageRender(pageName + JSON.stringify(props.params), duration); return result; }; diff --git a/src/lib/services/base-api.service.ts b/src/lib/services/base-api.service.ts index 4be421b..06480d7 100644 --- a/src/lib/services/base-api.service.ts +++ b/src/lib/services/base-api.service.ts @@ -53,34 +53,12 @@ export abstract class BaseApiService { type: CacheType = "DEFAULT" ): Promise { const cacheService = await getServerCacheService(); - const startTime = performance.now(); try { const result = await cacheService.getOrSet(key, fetcher, type); - const endTime = performance.now(); - - // Log la requête avec l'indication du cache - await DebugService.logRequest({ - url: key, - startTime, - endTime, - fromCache: true, - cacheType: type, - }); return result; } catch (error) { - const endTime = performance.now(); - - // Log aussi les erreurs - await DebugService.logRequest({ - url: key, - startTime, - endTime, - fromCache: true, - cacheType: type, - }); - throw error; } } diff --git a/src/lib/services/server-cache.service.ts b/src/lib/services/server-cache.service.ts index de71eed..a764621 100644 --- a/src/lib/services/server-cache.service.ts +++ b/src/lib/services/server-cache.service.ts @@ -1,6 +1,7 @@ import fs from "fs"; import path from "path"; import { PreferencesService } from "./preferences.service"; +import { DebugService } from "./debug.service"; type CacheMode = "file" | "memory"; @@ -370,13 +371,26 @@ class ServerCacheService { fetcher: () => Promise, type: keyof typeof ServerCacheService.DEFAULT_TTL = "DEFAULT" ): Promise { + const startTime = performance.now(); + const cached = this.get(key); if (cached !== null) { + const endTime = performance.now(); + + // Log la requête avec l'indication du cache + await DebugService.logRequest({ + url: key, + startTime, + endTime, + fromCache: true, + cacheType: type, + }); return cached as T; } try { const data = await fetcher(); + this.set(key, data, type); return data; } catch (error) {