Accueil / Vérifier ce qu'il rend
Ce qu'un contrôle exempte disparaît de sa sortie
Une exemption posée dans un contrôle pour une bonne raison retire la partie exemptée de ce que le contrôle juge : tant que cette partie n'a pas sa propre mesure et son propre seuil, elle peut grossir sous un verdict conforme.
Prenons un cas type. Un contrôle nocturne compare l'occupation disque d'un dossier de projet à un seuil. Sa règle exempte le sous-dossier cache/, pour une raison qui tenait à sa création : son contenu se régénère et peut être vidé à tout moment, il ne méritait donc pas d'alerte. Des mois plus tard, le disque se remplit alors que le contrôle affiche conforme chaque nuit.
Un périmètre choisi, puis oublié
La leçon sur l'endroit où l'on regarde a montré qu'une vérification trouve d'abord là où elle cherche. Ici s'ajoute un trait propre : le périmètre a été décidé une fois, écrit dans la règle, puis plus personne ne le relit, parce que la sortie du contrôle ne le mentionne pas. Un verdict conforme se lit comme un verdict sur le dossier, alors qu'il porte sur le dossier moins son cache.
La démonstration suivante crée son propre dossier, écrit le contrôle, remplit la partie exemptée, puis mesure le dossier entier :
mkdir -p demo-exemption/projet/cache demo-exemption/projet/docs && cd demo-exemption
printf 'rapport un\n' > projet/docs/rapport1.txt
printf 'rapport deux\n' > projet/docs/rapport2.txt
cat > controle.sh << 'EOF'
#!/bin/sh
# Occupation disque de projet/, le cache/ est exempté par la règle
SEUIL=5000
POIDS=$(find projet -path projet/cache -prune -o -type f -exec cat {} + | wc -c | tr -d ' ')
echo "Occupation comptée : $POIDS octets (seuil $SEUIL)"
if [ "$POIDS" -le "$SEUIL" ]; then echo "Verdict : conforme"; else echo "Verdict : dépassement"; fi
EOF
sh controle.sh
dd if=/dev/zero of=projet/cache/index.bin bs=1024 count=50 2>/dev/null
sh controle.sh
echo "Occupation réelle de projet/ : $(find projet -type f -exec cat {} + | wc -c | tr -d ' ') octets"
Occupation comptée : 24 octets (seuil 5000)
Verdict : conforme
Occupation comptée : 24 octets (seuil 5000)
Verdict : conforme
Occupation réelle de projet/ : 51224 octets
Le contrôle parcourt projet/ et tous ses sous-dossiers, et il écarte projet/cache par l'option -prune de find. Son verdict ne bouge pas quand le cache reçoit un gros fichier, alors que la mesure du dossier entier, faite hors du contrôle, montre que le cache porte l'essentiel de l'occupation. 2>/dev/null masque le bilan de dd. L'addition par wc -c mesure le contenu des fichiers, pas les blocs réservés sur le disque, ce qui suffit pour un écart de cet ordre.
Donner un seuil à la partie exemptée
Retirer l'exemption ferait revenir les alertes que la règle voulait éviter, puisque le cache se régénère toujours. Mais ce qui la justifiait, un contenu négligeable, ne vaut plus quand le cache porte l'essentiel de l'occupation. Afficher son poids ne suffit pas : une ligne sous un verdict resté conforme se lit aussi peu que la règle. Le remède garde le cache hors du seuil principal et lui donne son propre seuil, qui pèse sur le verdict. Il vérifie aussi que le dossier exempté existe, faute de quoi find ne trouverait rien et le contrôle afficherait zéro octet. Depuis le même dossier :
cat > controle.sh << 'EOF'
#!/bin/sh
# Occupation disque de projet/ : cache/ sort du seuil principal et reçoit son propre seuil
SEUIL=5000
SEUIL_CACHE=20000
POIDS=$(find projet -path projet/cache -prune -o -type f -exec cat {} + | wc -c | tr -d ' ')
echo "Occupation comptée : $POIDS octets (seuil $SEUIL)"
VERDICT=conforme
if [ "$POIDS" -gt "$SEUIL" ]; then VERDICT="dépassement"; fi
if [ -d projet/cache ]; then
EXEMPTE=$(find projet/cache -type f -exec cat {} + | wc -c | tr -d ' ')
echo "Partie exemptée : cache/ $EXEMPTE octets (seuil propre $SEUIL_CACHE)"
if [ "$EXEMPTE" -gt "$SEUIL_CACHE" ]; then VERDICT="dépassement de la partie exemptée"; fi
else
echo "Partie exemptée : cache/ introuvable, non mesurée"
if [ "$VERDICT" = conforme ]; then VERDICT="à vérifier"; fi
fi
echo "Verdict : $VERDICT"
EOF
sh controle.sh
Occupation comptée : 24 octets (seuil 5000)
Partie exemptée : cache/ 51200 octets (seuil propre 20000)
Verdict : dépassement de la partie exemptée
Le contrôle rend désormais un dépassement là où il disait conforme, et il nomme la partie en cause. Si cache/ disparaît, il l'écrit et rend « à vérifier » plutôt qu'un zéro rassurant.
Ce que le verdict juge, couche par couche
Un contrôle nocturne compare chaque nuit l'occupation disque d'un dossier de projet à un seuil et exclut de son calcul le sous-dossier cache, règle posée à sa création. Onze mois plus tard, le disque du serveur est plein. Le contrôle a affiché conforme toutes les nuits. Une mesure du dossier entier, cache compris, montre que le cache en occupe la plus grande partie.
Écrivez en une phrase ce que cette situation établit, et en une phrase ce qu'elle n'établit pas.
Ce que cela établit : Elle établit que les verdicts conformes portaient sur le dossier moins son cache, et que ce cache concentre aujourd'hui l'essentiel de l'occupation du dossier.
Ce que cela n’établit pas : Elle n'établit pas que l'exemption était une erreur quand elle a été posée, ni que ce dossier a rempli le disque à lui seul : la mesure porte sur le dossier, et le disque contient aussi le reste du serveur.
Les trois calibrages faux les plus courants
- Trop large Les verdicts conformes des onze derniers mois étaient faux, et le contrôle mesure de travers depuis sa création.
- Trop étroit Le seul fait acquis est la part du cache dans le dossier au jour de la mesure ; les verdicts conformes affichés chaque nuit ne renseignent pas sur ce qu'ils couvraient.
- À côté La situation établit que le programme qui produit le cache a cessé de le vider comme il le faisait au début.
- Une exemption inscrite dans un contrôle limite la portée de chacun de ses verdicts, même quand la sortie ne le dit pas.
- Un verdict conforme porte sur la partie comptée et ne dit rien de la partie exemptée tant que celle-ci n'est pas mesurée à part.
- Une mesure du dossier entier, faite hors du contrôle, révèle un écart qu'aucune relance du même contrôle ne montre.
- Une partie exemptée qui reçoit son propre seuil peut faire changer le verdict, ce qu'une simple ligne d'information sous un verdict conforme ne fait pas.
- Un dossier exempté introuvable doit produire un avertissement, sinon il se mesure à zéro sans que personne le remarque.
Ouvrez un contrôle automatique que vous utilisez, repérez chaque exclusion écrite dans sa règle, et donnez à chacune une mesure et un seuil propres qui font changer le verdict, avec un message explicite quand la partie exclue est introuvable.