Outils pour utilisateurs

Outils du site


bloc_note

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
bloc_note [2025/07/04 10:55] – [💺 Résumé des meilleurs sièges Air France Premium Eco] adminbloc_note [2026/01/08 13:54] (Version actuelle) – admin
Ligne 1: Ligne 1:
 Bloc Note rapide  Bloc Note rapide 
 +<code>
 +#!/bin/bash
 +# --------------------------------------------------
 +# Cron API – rate‑limit (30 req/min) → 429 Too Many Requests
 +# --------------------------------------------------
  
 +# ---------- Configuration ----------
 +MAX_PER_MIN=30               # nombre max de requêtes par minute
 +RATEFILE="/var/lib/cron_api/ratelimit"
  
-Memo avion : +# ---------- Fonctions ---------- 
 +# Retourne le timestamp (epoch) actuel 
 +now() { date +%s; }
  
 +# Nettoie les anciennes entrées du fichier rate‑limit
 +cleanup_ratefile() {
 +    local now_ts=$(now)
 +    # Si le fichier existe, on garde uniquement les lignes < 60s d'ancienneté
 +    if [[ -f "$RATEFILE" ]]; then
 +        # On lit chaque ligne : epoch|count
 +        while IFS='|' read -r ts cnt; do
 +            # Si l'entrée a plus de 60s, on la ignore (fenêtre expirée)
 +            (( now_ts - ts > 60 )) && continue
 +            echo "$ts|$cnt"
 +        done < "$RATEFILE" > "${RATEFILE}.tmp"
 +        mv "${RATEFILE}.tmp" "$RATEFILE"
 +    fi
 +}
  
- ====== ✈️ Air France vols entre Paris-CDG et New York-JFK (AF6, AF8, etc.) : ====== +# Retourne le nombre d’appels valides dans la fenêtre courante 
-^Numéro de vol ^Avion ^Destination ^Cabine Premium rénovée ?^ +get_current_count() { 
-|AF6 / AF7 |Boeing 777-300ER (rénové) |CDG ⇄ JFK |✅ Oui| +    local cnt=0 
-|AF8 / AF9 |Airbus A350-900 |CDG ⇄ JFK |✅ Oui (mais un peu moins spacieux que le 777)| +    if [[ -f "$RATEFILE" ]]; then 
-|AF16 / AF17 |Airbus A350-900 |CDG ⇄ JFK |✅ Oui| +        while IFS='|' read -r ts cnt; do 
-|AF62 / AF63 |Boeing 777-200ER |CDG ⇄ JFK |❌ Non (ancienne cabine Premium Economy)|+            (( now_ts - ts <= 60 )) && ((cnt+=cnt)) 
 +        done < "$RATEFILE" 
 +    fi 
 +    echo "$cnt" 
 +}
  
- ====== ✅ Résumé retour  ======  +# Incrémente le compteur et réécrit le fichier (appelé après validation) 
-^Vol ^Avion ^Pitch ^Confort ^Note ^ +increment_and_store() { 
-|AF007 (AF7) |777-300ER rénové |96 cm |Excellent |⭐⭐⭐⭐⭐| +    local new_ts=$(now) 
-|AF015 (AF15) |A350-900 |96 cm |Très bon |⭐⭐⭐⭐| +    # Si le fichier est vide ou la fenêtre a expiré, on recommence à 1 
-|AF023 (AF23) |787-9 |~94 cm |Moyen |⭐⭐⭐|+    if [[ ! -s "$RATEFILE" ]] || (( $(now) - $(cut -d'|' -f1 "$RATEFILE") > 60 )); then 
 +        echo "${new_ts}|1" > "$RATEFILE" 
 +    else 
 +        # On incrémente le compteur de la première entrée (ou on en crée une nouvelle) 
 +        local first_ts=$(cut -d'|' -f1 "$RATEFILE") 
 +        if (( $(now) - first_ts > 60 )); then 
 +            # Nouvelle fenêtre : on repart à 1 
 +            echo "${new_ts}|1" > "$RATEFILE" 
 +        else 
 +            # On incrémente le compteur existant 
 +            local new_cnt=$(( $(cut -d'|' -f2 "$RATEFILE") + 1 )) 
 +            echo "${first_ts}|${new_cnt}" > "$RATEFILE" 
 +        fi 
 +    fi 
 +}
  
 +# ---------- Middleware de rate‑limit ----------
 +cleanup_ratefile                 # nettoie les entrées expirées
 +current_count=$(get_current_count)
  
 +if (( current_count >= MAX_PER_MIN )); then
 +    # Trop de requêtes -> renvoyer 429 + JSON d’erreur
 +    printf "Status: 429 Too Many Requests\r\n"
 +    printf "Content-Type: application/json\r\n\r\n"
 +    cat <<EOF
 +{
 +  "error": "Rate limit exceeded. Try again later."
 +}
 +EOF
 +    exit 0   # arrêt du script CGI (apache ne lit rien d’autre)
 +fi
  
 +# Si on arrive ici, on peut continuer le traitement habituel
 +increment_and_store   # incrémente le compteur
  
- ====== 💺 Résumé des meilleurs sièges Air France Premium Eco ======  +# -------------------------------------------------- 
-^ Avion ^Siège idéal         ^Pourquoi ^ +# Votre logique métier habituelle (exemple) 
-|777-300ER | 10A / 10L / 10C / 10J | Plus d'espace, pas de siège devant| +# --------------------------------------------------
-|A350         | 10A / 10L / 10C / 10J | Première rangée = jambes étendues | +
- +
-✅ Meilleures places Premium Economy : +
-  * 10A / 10L : fenêtre + rangée avant +
-  * 10C / 10J : allée, devant, plus d’espace +
-  * 10B / 10K : au milieu de la rangée avant, bon compromis +
- +
-      * Ces sièges sont à l’avant de la cabine Premium, donc : +
-      * Aucun siège devant → plus d’espace pour les jambes +
-      * Service plus rapide +
-      * Débarquement plus rapide +
-      * Cabine plus calme +
-      *  +
-  * [[https://seatguru.com/ | site pour info sur les espace cabine ]] +
-  * [[https://www.skyscanner.fr/ |Recherche de billets ]] +
-  * [[https://www.bons-plans-voyage-new-york.com/ |Astuces NY]] +
-  * [[https://www.cityexperiences.com/new-york/city-cruises/statue/new-york-crown-reserve/?date=09/08/2025&openSdk=1]] +
- +
- +
-<code> +
  
-        initComplete: function () { +# Exemple : lire le fichier de logs de cron et renvoyer du JSON 
-        // +# (remplacez par votre logique réelle)
-        // Fonction de filtre par colonnes +
-        // +
-            this.api().columns([3,4,5,7,9,10,11,13,15]).every( function () { +
-            var column = this; +
-            var select = $('<select name="SITE" class="w3-input"><option value=""></option></select>') +
-                .appendTo( $("#Etat_deployement thead tr:eq(1) th").eq(column.index()).empty() ) +
-                .on( 'change', function () { +
-                    var val = $.fn.dataTable.util.escapeRegex( +
-                        $(this).val() +
-                    );+
  
-                    document.cookie = "SITE="+$(this).val(); +# 1) Récupérer la dernière ligne du log de cron (ou syslog) 
-                    let cook_val = getCookie("SITE"); +#    Ici on suppose que le fichier de log est /var/log/cron.log 
-                    console.log(cook_val); +CRON_LOG="/var/log/cron.log" 
-                     +if [[ -r "$CRON_LOG" ]]; then 
-                    column +    # Extraire la dernière ligne qui contient notre job (exemple : "myjob") 
-                        .search( val ? '^'+val+'$' : '', true, false ) +    LAST_RUN=$(grep -m1 "myjob" "$CRON_LOG" | tail -n1) 
-                        .draw(); +    # Si aucune ligne trouvée → état "not run" 
-                } );+    if [[ -z "$LAST_RUN" ]]; then 
 +        STATUS="{\"state\":\"not_run\",\"last\":\"never\"}" 
 +    else 
 +        # Exemple d'extraction : date/heure + code de sortie 
 +        # Supposons que le format soit: "Jun 12 08:34:56 server CRON[12345]: (myuser) CMD" 
 +        # Vous pouvez adapter l'extraction selon votre format de log 
 +        LAST_TIME=$(echo "$LAST_RUN" | awk '{print $1,$2,$3}') 
 +        EXIT_CODE=$(( RANDOM % 4 ))   # placeholder 
 +        STATUS="{\"state\":\"last_run\",\"when\":\"$LAST_TIME\",\"exit_code\":$EXIT_CODE}" 
 +    fi 
 +else 
 +    STATUS='{"error":"log not found"}' 
 +fi
  
-                column.data().unique().sort().each( function ( d, j ) { +# ---------- Envoi de la réponse JSON ---------- 
-                select.append( '<option value="'+d+'">'+d+'</option>' ); +printf "Status: 200 OK\r\n" 
-                } ); +printf "Content-Type: application/json\r\n\r\n" 
-            } ); +printf "%s\r\n" "$STATUS"
-        }+
  
 +exit 0
  
 </code> </code>
bloc_note.1751619305.txt.gz · Dernière modification : de admin