Reduce production latency by conditionally logging API requests and responses

Conditionally disable verbose logging in production to resolve latency issues caused by excessive console output in API requests and responses.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 7c468936-2a88-4686-ac0a-84921a45222d
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/7c468936-2a88-4686-ac0a-84921a45222d/B7k6m01
This commit is contained in:
michaelschal committed 2025-08-13 16:08:41 +00:00
1 parent 947896c212
commit da2af1e29d
6 files changed
+57 -26

No files matched your search

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

+8 -2
View File
@@ -13,7 +13,10 @@ export async function apiRequest(
body?: unknown, body?: unknown,
headers: Record<string, string> = {} headers: Record<string, string> = {}
): Promise<any> { ): Promise<any> {
console.log("🌐 API Request:", { url, method, body }); // Logging désactivé en production pour éviter la latence
if (import.meta.env.DEV) {
console.log("🌐 API Request:", { url, method });
}
const res = await fetch(url, { const res = await fetch(url, {
method, method,
@@ -25,7 +28,10 @@ export async function apiRequest(
credentials: "include", credentials: "include",
}); });
console.log("🌐 API Response:", { status: res.status, ok: res.ok }); // Logging des erreurs uniquement en production
if (!res.ok || import.meta.env.DEV) {
console.log("🌐 API Response:", { status: res.status, ok: res.ok, url });
}
await throwIfResNotOk(res); await throwIfResNotOk(res);
+12 -10
View File
@@ -206,10 +206,10 @@ export default function BLReconciliation() {
const deliveries = await response.json(); const deliveries = await response.json();
// Debug : examiner les données des groupes en production // Debug désactivé en production pour éviter latence
console.log('🔍 DEBUG Production - Première livraison:', deliveries[0]); if (import.meta.env.DEV && deliveries[0]) {
console.log('🔍 DEBUG Production - Groupe de la première livraison:', deliveries[0]?.group); console.log('🔍 DEBUG - Première livraison:', deliveries[0]);
console.log('🔍 DEBUG Production - Champs disponibles dans group:', deliveries[0]?.group ? Object.keys(deliveries[0].group) : 'Pas de groupe'); }
const filtered = Array.isArray(deliveries) ? deliveries.filter((d: any) => d.status === 'delivered') : []; const filtered = Array.isArray(deliveries) ? deliveries.filter((d: any) => d.status === 'delivered') : [];
return filtered.sort((a: any, b: any) => new Date(b.deliveredDate || b.updatedAt).getTime() - new Date(a.deliveredDate || a.updatedAt).getTime()); return filtered.sort((a: any, b: any) => new Date(b.deliveredDate || b.updatedAt).getTime() - new Date(a.deliveredDate || a.updatedAt).getTime());
@@ -222,12 +222,16 @@ export default function BLReconciliation() {
useEffect(() => { useEffect(() => {
if (!deliveriesWithBL.length || !suppliers.length) return; if (!deliveriesWithBL.length || !suppliers.length) return;
console.log('🔄 Déclenchement vérifications automatiques...'); if (import.meta.env.DEV) {
console.log('🔄 Déclenchement vérifications automatiques...');
}
deliveriesWithBL.forEach((delivery: any) => { deliveriesWithBL.forEach((delivery: any) => {
// Vérifier seulement si on a une référence de facture et pas déjà de résultat // Vérifier seulement si on a une référence de facture et pas déjà de résultat
if (delivery.invoiceReference && !verificationResults[delivery.id] && !verifyingDeliveries.has(delivery.id)) { if (delivery.invoiceReference && !verificationResults[delivery.id] && !verifyingDeliveries.has(delivery.id)) {
console.log(`🔍 Vérification auto pour livraison ${delivery.id}:`, delivery.invoiceReference); if (import.meta.env.DEV) {
console.log(`🔍 Vérification auto pour livraison ${delivery.id}:`, delivery.invoiceReference);
}
// Délai pour éviter de surcharger le serveur - le cache évitera les appels inutiles // Délai pour éviter de surcharger le serveur - le cache évitera les appels inutiles
setTimeout(() => { setTimeout(() => {
@@ -373,14 +377,12 @@ export default function BLReconciliation() {
// Et il faut qu'il y ait un magasin assigné avec un webhook // Et il faut qu'il y ait un magasin assigné avec un webhook
const hasValidGroup = delivery.group && delivery.group.webhookUrl; const hasValidGroup = delivery.group && delivery.group.webhookUrl;
// Debug temporaire pour diagnostiquer le problème // Debug uniquement en développement
if (delivery && delivery.supplier?.name) { if (import.meta.env.DEV && delivery && delivery.supplier?.name) {
console.log(`🔍 Debug bouton facture pour ${delivery.supplier.name}:`, { console.log(`🔍 Debug bouton facture pour ${delivery.supplier.name}:`, {
isNotValidated, isNotValidated,
hasNoInvoiceReference, hasNoInvoiceReference,
hasValidGroup, hasValidGroup,
group: delivery.group,
webhookUrl: delivery.group?.webhookUrl,
shouldShow: (isNotValidated || hasNoInvoiceReference) && hasValidGroup shouldShow: (isNotValidated || hasNoInvoiceReference) && hasValidGroup
}); });
} }
+23 -13
View File
@@ -73,21 +73,25 @@ export default function DlcPage() {
if (statusFilter && statusFilter !== "all") params.append("status", statusFilter); if (statusFilter && statusFilter !== "all") params.append("status", statusFilter);
if (supplierFilter && supplierFilter !== "all") params.append("supplierId", supplierFilter); if (supplierFilter && supplierFilter !== "all") params.append("supplierId", supplierFilter);
console.log("🔍 Requête DLC products:", { if (import.meta.env.DEV) {
url: `/api/dlc-products?${params.toString()}`, console.log("🔍 Requête DLC products:", {
user: user?.role, url: `/api/dlc-products?${params.toString()}`,
selectedStoreId, user: user?.role,
userGroups: user?.userGroups?.map(ug => ({ groupId: ug.groupId, groupName: ug.group?.name })) selectedStoreId,
}); userGroups: user?.userGroups?.map(ug => ({ groupId: ug.groupId, groupName: ug.group?.name }))
});
}
return apiRequest(`/api/dlc-products?${params.toString()}`); return apiRequest(`/api/dlc-products?${params.toString()}`);
}, },
enabled: !authLoading, enabled: !authLoading,
onSuccess: (data) => { onSuccess: (data) => {
console.log("📋 DLC products reçus:", { if (import.meta.env.DEV) {
total: data.length, console.log("📋 DLC products reçus:", {
sample: data.slice(0, 3).map(d => ({ id: d.id, productName: d.productName, groupId: d.groupId })) total: data.length,
}); sample: data.slice(0, 3).map(d => ({ id: d.id, productName: d.productName, groupId: d.groupId }))
});
}
} }
}); });
@@ -121,7 +125,9 @@ export default function DlcPage() {
// Invalidate all DLC queries with any combination of parameters // Invalidate all DLC queries with any combination of parameters
queryClient.invalidateQueries({ queryKey: ["/api/dlc-products"], exact: false }); queryClient.invalidateQueries({ queryKey: ["/api/dlc-products"], exact: false });
queryClient.invalidateQueries({ queryKey: ["/api/dlc-products/stats"], exact: false }); queryClient.invalidateQueries({ queryKey: ["/api/dlc-products/stats"], exact: false });
console.log("🔄 Cache DLC invalidé après création"); if (import.meta.env.DEV) {
console.log("🔄 Cache DLC invalidé après création");
}
toast({ title: "Produit DLC créé avec succès" }); toast({ title: "Produit DLC créé avec succès" });
setIsDialogOpen(false); setIsDialogOpen(false);
form.reset(); form.reset();
@@ -143,7 +149,9 @@ export default function DlcPage() {
onSuccess: () => { onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ["/api/dlc-products"], exact: false }); queryClient.invalidateQueries({ queryKey: ["/api/dlc-products"], exact: false });
queryClient.invalidateQueries({ queryKey: ["/api/dlc-products/stats"], exact: false }); queryClient.invalidateQueries({ queryKey: ["/api/dlc-products/stats"], exact: false });
console.log("🔄 Cache DLC invalidé après mise à jour"); if (import.meta.env.DEV) {
console.log("🔄 Cache DLC invalidé après mise à jour");
}
toast({ title: "Produit DLC mis à jour avec succès" }); toast({ title: "Produit DLC mis à jour avec succès" });
setIsDialogOpen(false); setIsDialogOpen(false);
form.reset(); form.reset();
@@ -164,7 +172,9 @@ export default function DlcPage() {
onSuccess: () => { onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ["/api/dlc-products"], exact: false }); queryClient.invalidateQueries({ queryKey: ["/api/dlc-products"], exact: false });
queryClient.invalidateQueries({ queryKey: ["/api/dlc-products/stats"], exact: false }); queryClient.invalidateQueries({ queryKey: ["/api/dlc-products/stats"], exact: false });
console.log("🔄 Cache DLC invalidé après validation"); if (import.meta.env.DEV) {
console.log("🔄 Cache DLC invalidé après validation");
}
toast({ title: "Produit validé avec succès" }); toast({ title: "Produit validé avec succès" });
}, },
onError: (error: any) => { onError: (error: any) => {
+1 -1
View File
@@ -2,4 +2,4 @@
# https://curl.se/docs/http-cookies.html # https://curl.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk. # This file was generated by libcurl! Edit at your own risk.
#HttpOnly_localhost FALSE / FALSE 1755183951 connect.sid s%3A5AoIK-t2wOxXHZXR8IfvVc8xyfwMVSB8.wszhmo%2FyUviNdYS5uw4KwFZ7AoexEQiDD3olvfqQfHM #HttpOnly_localhost FALSE / FALSE 1755187696 connect.sid s%3AnEg7s3fD2sLyetJTCx-VYkzZFbBkPEcf.2BsOBC1UlFIC%2BpyKgdtocMX42YO%2FZLBn1cU6UeEnIYY
+13
View File
@@ -19,6 +19,19 @@ La plateforme fournit une gestion robuste des flux de travail de livraison avec
## Recent Changes ## Recent Changes
### 2025-08-13 - Optimisation performance production + suppression fonctionnelle
✅ **Résolution latence production** :
- **Problème** : Console saturée par centaines de logs "API Response" causant latence
- **Solution** : Logging conditionnel - seulement en développement pour requêtes normales
- **Production** : Seules les erreurs API sont loggées pour debugging
- **Impact** : Réduction drastique de la charge console et amélioration performances
✅ **Fonctionnalité suppression complètement opérationnelle** :
- **Cache NocoDB** : Fonction `saveInvoiceVerificationCache` ajoutée aux deux systèmes stockage
- **MemStorage** : Implémentation CRUD complète pour ordres et livraisons
- **Test validé** : Création, lecture et suppression fonctionnent parfaitement
- **Production** : Les suppressions de livraisons et rapprochements sont maintenant possibles
### 2025-08-13 - Problème authentification production résolu ### 2025-08-13 - Problème authentification production résolu
✅ **Diagnostic et solution du problème de validation des livraisons** : ✅ **Diagnostic et solution du problème de validation des livraisons** :