bloc_note
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| bloc_note [2025/07/04 10:55] – [💺 Résumé des meilleurs sièges Air France Premium Eco] admin | bloc_note [2026/01/08 13:54] (Version actuelle) – admin | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| Bloc Note rapide | Bloc Note rapide | ||
| + | < | ||
| + | #!/bin/bash | ||
| + | # -------------------------------------------------- | ||
| + | # Cron API – rate‑limit (30 req/min) → 429 Too Many Requests | ||
| + | # -------------------------------------------------- | ||
| + | # ---------- Configuration ---------- | ||
| + | MAX_PER_MIN=30 | ||
| + | RATEFILE="/ | ||
| - | 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' | ||
| + | if [[ -f " | ||
| + | # On lit chaque ligne : epoch|count | ||
| + | while IFS=' | ||
| + | # Si l' | ||
| + | (( now_ts - ts > 60 )) && continue | ||
| + | echo " | ||
| + | done < " | ||
| + | mv " | ||
| + | fi | ||
| + | } | ||
| - | | + | # 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 " |
| - | |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)| | + | |
| + | done < " | ||
| + | fi | ||
| + | echo " | ||
| + | } | ||
| - | | + | # 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 | + | if [[ ! -s " |
| + | echo " | ||
| + | else | ||
| + | # On incrémente le compteur de la première entrée | ||
| + | local first_ts=$(cut | ||
| + | | ||
| + | # Nouvelle fenêtre : on repart à 1 | ||
| + | echo " | ||
| + | else | ||
| + | # On incrémente le compteur existant | ||
| + | local new_cnt=$(( $(cut -d'|' -f2 " | ||
| + | echo " | ||
| + | fi | ||
| + | fi | ||
| + | } | ||
| + | # ---------- Middleware de rate‑limit ---------- | ||
| + | cleanup_ratefile | ||
| + | current_count=$(get_current_count) | ||
| + | if (( current_count >= MAX_PER_MIN )); then | ||
| + | # Trop de requêtes -> renvoyer 429 + JSON d’erreur | ||
| + | printf " | ||
| + | printf " | ||
| + | cat <<EOF | ||
| + | { | ||
| + | " | ||
| + | } | ||
| + | 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 | ||
| - | | + | # -------------------------------------------------- |
| - | ^ Avion ^Siège idéal | + | # Votre logique métier habituelle (exemple) |
| - | |777-300ER | 10A / 10L / 10C / 10J | Plus d' | + | # -------------------------------------------------- |
| - | |A350 | + | |
| - | + | ||
| - | ✅ 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:// | + | |
| - | * [[https:// | + | |
| - | * [[https:// | + | |
| - | * [[https:// | + | |
| - | + | ||
| - | + | ||
| - | < | + | |
| - | initComplete: function () { | + | # Exemple |
| - | // | + | # (remplacez par votre logique réelle) |
| - | // Fonction | + | |
| - | // | + | |
| - | this.api().columns([3, | + | |
| - | var column = this; | + | |
| - | var select = $('< | + | |
| - | .appendTo( $("#Etat_deployement thead tr:eq(1) th" | + | |
| - | .on( ' | + | |
| - | var val = $.fn.dataTable.util.escapeRegex( | + | |
| - | $(this).val() | + | |
| - | | + | |
| - | document.cookie | + | # 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 / |
| - | | + | CRON_LOG="/ |
| - | + | if [[ -r "$CRON_LOG" | |
| - | | + | # Extraire la dernière ligne qui contient notre job (exemple : "myjob") |
| - | | + | |
| - | .draw(); | + | # Si aucune ligne trouvée → état "not run" |
| - | } ); | + | if [[ -z " |
| + | | ||
| + | else | ||
| + | # Exemple d'extraction : date/ | ||
| + | # Supposons que le format soit: "Jun 12 08:34:56 server CRON[12345]: | ||
| + | # Vous pouvez adapter l'extraction selon votre format de log | ||
| + | LAST_TIME=$(echo " | ||
| + | | ||
| + | | ||
| + | fi | ||
| + | else | ||
| + | STATUS=' | ||
| + | fi | ||
| - | column.data().unique().sort().each( function ( d, j ) { | + | # ---------- Envoi de la réponse JSON ---------- |
| - | | + | printf |
| - | } ); | + | printf " |
| - | } ); | + | printf " |
| - | } | + | |
| + | exit 0 | ||
| </ | </ | ||
bloc_note.1751619305.txt.gz · Dernière modification : de admin
