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,
headers: Record<string, string> = {}
): 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, {
method,
@@ -25,7 +28,10 @@ export async function apiRequest(
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);
+12 -10
View File
@@ -206,10 +206,10 @@ export default function BLReconciliation() {
const deliveries = await response.json();
// Debug : examiner les données des groupes en production
console.log('🔍 DEBUG Production - Première livraison:', deliveries[0]);
console.log('🔍 DEBUG Production - Groupe de la première livraison:', deliveries[0]?.group);
console.log('🔍 DEBUG Production - Champs disponibles dans group:', deliveries[0]?.group ? Object.keys(deliveries[0].group) : 'Pas de groupe');
// Debug désactivé en production pour éviter latence
if (import.meta.env.DEV && deliveries[0]) {
console.log('🔍 DEBUG - Première livraison:', deliveries[0]);
}
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());
@@ -222,12 +222,16 @@ export default function BLReconciliation() {
useEffect(() => {
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) => {
// 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)) {
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
setTimeout(() => {
@@ -373,14 +377,12 @@ export default function BLReconciliation() {
// Et il faut qu'il y ait un magasin assigné avec un webhook
const hasValidGroup = delivery.group && delivery.group.webhookUrl;
// Debug temporaire pour diagnostiquer le problème
if (delivery && delivery.supplier?.name) {
// Debug uniquement en développement
if (import.meta.env.DEV && delivery && delivery.supplier?.name) {
console.log(`🔍 Debug bouton facture pour ${delivery.supplier.name}:`, {
isNotValidated,
hasNoInvoiceReference,
hasValidGroup,
group: delivery.group,
webhookUrl: delivery.group?.webhookUrl,
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 (supplierFilter && supplierFilter !== "all") params.append("supplierId", supplierFilter);
console.log("🔍 Requête DLC products:", {
url: `/api/dlc-products?${params.toString()}`,
user: user?.role,
selectedStoreId,
userGroups: user?.userGroups?.map(ug => ({ groupId: ug.groupId, groupName: ug.group?.name }))
});
if (import.meta.env.DEV) {
console.log("🔍 Requête DLC products:", {
url: `/api/dlc-products?${params.toString()}`,
user: user?.role,
selectedStoreId,
userGroups: user?.userGroups?.map(ug => ({ groupId: ug.groupId, groupName: ug.group?.name }))
});
}
return apiRequest(`/api/dlc-products?${params.toString()}`);
},
enabled: !authLoading,
onSuccess: (data) => {
console.log("📋 DLC products reçus:", {
total: data.length,
sample: data.slice(0, 3).map(d => ({ id: d.id, productName: d.productName, groupId: d.groupId }))
});
if (import.meta.env.DEV) {
console.log("📋 DLC products reçus:", {
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
queryClient.invalidateQueries({ queryKey: ["/api/dlc-products"], 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" });
setIsDialogOpen(false);
form.reset();
@@ -143,7 +149,9 @@ export default function DlcPage() {
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ["/api/dlc-products"], 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" });
setIsDialogOpen(false);
form.reset();
@@ -164,7 +172,9 @@ export default function DlcPage() {
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ["/api/dlc-products"], 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" });
},
onError: (error: any) => {
+1 -1
View File
@@ -2,4 +2,4 @@
# https://curl.se/docs/http-cookies.html
# 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
### 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
✅ **Diagnostic et solution du problème de validation des livraisons** :