From 8db3fe03351b767b2f5f044f3f796e402d2d9a4e Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 12 Oct 2026 19:37:23 +0000 Subject: [PATCH] =?UTF-8?q?Synchro=20nocturne=20:=20extraction=20Qlik=20br?= =?UTF-8?q?anch=C3=A9e,=20fra=C3=AEcheur=20du=20pr=C3=A9chauffage=20lue=20?= =?UTF-8?q?en=20ISO?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01LG2LLJuswrrTTPKJmunEVf --- server/src/admin/grid_warmup.rs | 8 +++++++- server/src/admin/qlik_bridge.rs | 10 ++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/server/src/admin/grid_warmup.rs b/server/src/admin/grid_warmup.rs index 71f4181..2b13f15 100644 --- a/server/src/admin/grid_warmup.rs +++ b/server/src/admin/grid_warmup.rs @@ -79,7 +79,13 @@ async fn run_warmup(stale_hours: f64) { let fresh_limit = chrono::Utc::now().naive_utc() - chrono::Duration::milliseconds((stale_hours * 3_600_000.0) as i64); let fresh: HashSet = existing .iter() - .filter(|s| s.computed_at_naive().map(|d| d > fresh_limit).unwrap_or(false)) + .filter(|s| { + s.computed_at + .as_deref() + .and_then(|c| chrono::DateTime::parse_from_rfc3339(c).ok()) + .map(|d| d.naive_utc() > fresh_limit) + .unwrap_or(false) + }) .map(|s| s.code_fournisseur.clone()) .collect(); maj(|j| j.total = fournisseurs.len()); diff --git a/server/src/admin/qlik_bridge.rs b/server/src/admin/qlik_bridge.rs index a6a8ef4..08d8e7b 100644 --- a/server/src/admin/qlik_bridge.rs +++ b/server/src/admin/qlik_bridge.rs @@ -25,3 +25,13 @@ pub fn reset_ff_api_base() { pub async fn diagnostiquer_api_ff(base: Option) -> Value { serde_json::to_value(crate::ff::diagnostic::diagnostiquer_api_ff(base).await).unwrap_or(Value::Null) } + +/// Extraction Qlik d'un fournisseur sur la fenêtre de la synchro (`QLIK_SYNC_MONTHS_BACK`), +/// puis enregistrement dans le cache réseau. Renvoie le nombre de codes enregistrés. +pub async fn extraire_et_enregistrer(codes: Vec, fournisseur: &str) -> anyhow::Result { + use crate::qlik::date_range::{build_grid_network_qlik_date_filter_now, env_months_back, QLIK_MONTHS_BACK_DEFAULT}; + let filtre = build_grid_network_qlik_date_filter_now(env_months_back("QLIK_SYNC_MONTHS_BACK", QLIK_MONTHS_BACK_DEFAULT)); + let metrics = crate::qlik::fetch_network_metrics_playwright(Some(codes), None, Some(filtre), Some(fournisseur.to_string())).await?; + let liste: Vec<_> = metrics.into_values().collect(); + crate::qlik::upsert_network_metrics(&liste).await +}