mirror of
https://github.com/R0m1k3/CollectFlow.git
synced 2026-10-20 13:38:08 +02:00
perf(qlik): optimize network sync extraction
This commit is contained in:
1 parent
1cb6c2496d
commit
abac5c5ee5
5 files changed
+468
-80
No files matched your search
@@ -2,7 +2,7 @@
|
||||
* CollectFlow — Helper de fenêtre temporelle pour Qlik réseau.
|
||||
*
|
||||
* Aligne la timeline d'extraction Qlik réseau sur la timeline de la grille :
|
||||
* - 12 mois complets glissants
|
||||
* - `monthsBack` mois complets glissants (défaut : 12)
|
||||
* - exclut systématiquement le mois courant
|
||||
*
|
||||
* Référence utilisée : `buildLast12MonthsRange()` de `api-ff-client.ts`
|
||||
@@ -33,6 +33,34 @@
|
||||
* Pas de secrets ici. Pure fonction utilitaire testable en CLI Node.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Bornes acceptées pour `monthsBack`. On reste sur 1..12 pour ne pas casser
|
||||
* la sémantique "12 mois glissants alignés sur la grille" : une valeur plus
|
||||
* grande n'apporterait pas de signal réseau supplémentaire (la grille
|
||||
* n'expose elle-même que ~12 mois). En-deçà de 1 mois, la fenêtre serait
|
||||
* vide (mois courant exclu) ou incohérente.
|
||||
*/
|
||||
export const QLIK_MONTHS_BACK_MIN = 1;
|
||||
export const QLIK_MONTHS_BACK_MAX = 12;
|
||||
export const QLIK_MONTHS_BACK_DEFAULT = 12;
|
||||
|
||||
/**
|
||||
* Lit `process.env[name]` et renvoie un entier borné entre `min` et `max`.
|
||||
* Renvoie `defaultValue` si la variable est absente / vide / non numérique.
|
||||
*
|
||||
* Volontairement exportée pour être réutilisée par `qlik-playwright.ts` et
|
||||
* `sync/route.ts` (cohérence avec `envNumber` côté Playwright, mais en pur
|
||||
* Node sans dépendance Next.js).
|
||||
*/
|
||||
export function envMonthsBack(name: string, defaultValue: number = QLIK_MONTHS_BACK_DEFAULT): number {
|
||||
const raw = process.env[name];
|
||||
if (raw == null || raw.trim() === "") return defaultValue;
|
||||
const parsed = Number(raw);
|
||||
if (!Number.isFinite(parsed)) return defaultValue;
|
||||
const clamped = Math.min(QLIK_MONTHS_BACK_MAX, Math.max(QLIK_MONTHS_BACK_MIN, Math.trunc(parsed)));
|
||||
return clamped;
|
||||
}
|
||||
|
||||
/** Epoch Qlik = 1899-12-30 (équivalent Excel/Lotus 1-2-3). */
|
||||
const QLIK_EPOCH_MS = Date.UTC(1899, 11, 30); // 1899-12-30T00:00:00Z
|
||||
|
||||
@@ -91,17 +119,30 @@ export interface QlikDateFilter {
|
||||
}
|
||||
|
||||
/**
|
||||
* Calcule la fenêtre 12 mois complets (excluant mois courant).
|
||||
* Par défaut, utilise `now = new Date()`. Testable via injection de `now`.
|
||||
* Calcule la fenêtre `monthsBack` mois complets (excluant mois courant).
|
||||
* Par défaut, utilise `now = new Date()` et `monthsBack = 12`.
|
||||
*
|
||||
* Logique alignée sur `buildLast12MonthsRange()` de `src/lib/api-ff-client.ts`.
|
||||
* Si la source officielle change, mettre à jour ici aussi (garder en sync).
|
||||
* Logique alignée sur `buildLast12MonthsRange()` de `src/lib/api-ff-client.ts`
|
||||
* (défaut = 12 mois). Si la source officielle change, mettre à jour ici aussi
|
||||
* (garder en sync).
|
||||
*
|
||||
* Bornes : `monthsBack` est clampé dans `[QLIK_MONTHS_BACK_MIN, QLIK_MONTHS_BACK_MAX]`
|
||||
* (1..12). Une valeur invalide (NaN, ≤ 0, > 12) est ramenée aux bornes sans
|
||||
* exception — on veut que la sync reste possible même si l'env est mal
|
||||
* configuré.
|
||||
*/
|
||||
export function buildGridNetworkQlikDateFilter(now: Date = new Date()): QlikDateFilter {
|
||||
export function buildGridNetworkQlikDateFilter(
|
||||
now: Date = new Date(),
|
||||
monthsBack: number = QLIK_MONTHS_BACK_DEFAULT,
|
||||
): QlikDateFilter {
|
||||
const months = Math.min(
|
||||
QLIK_MONTHS_BACK_MAX,
|
||||
Math.max(QLIK_MONTHS_BACK_MIN, Math.trunc(Number.isFinite(monthsBack) ? monthsBack : QLIK_MONTHS_BACK_DEFAULT)),
|
||||
);
|
||||
// Fin : dernier jour du mois précédent le mois courant
|
||||
const endMonth = new Date(now.getFullYear(), now.getMonth(), 0);
|
||||
// Début : 12 mois avant le mois courant (1er du mois)
|
||||
const startMonth = new Date(now.getFullYear(), now.getMonth() - 12, 1);
|
||||
// Début : `months` mois avant le mois courant (1er du mois)
|
||||
const startMonth = new Date(now.getFullYear(), now.getMonth() - months, 1);
|
||||
|
||||
const dateDebut = startMonth.toISOString().slice(0, 10);
|
||||
const dateFin = endMonth.toISOString().slice(0, 10);
|
||||
|
||||
Reference in new issue
Block a user