58 lines
2.5 KiB
Text
58 lines
2.5 KiB
Text
|
|
#jinja2: comment_start_string:'{=#', comment_end_string:'#=}'
|
||
|
|
#!/bin/bash
|
||
|
|
# (Le gabarit redefinit le delimiteur de commentaire Jinja : `${#tableau[@]}` contient
|
||
|
|
# la sequence `{#`, que Jinja lirait comme un debut de commentaire. Le shell en a
|
||
|
|
# besoin ; c'est donc Jinja qui cede. Meme geste que `client_sante/setops-sante.sh.j2`
|
||
|
|
# et `serveur_nginx/sonde-edge.sh.j2`.)
|
||
|
|
# GENERE par Set-OPS (role serveur_web_frontal). Ne pas editer a la main.
|
||
|
|
#
|
||
|
|
# SONDE « sites-servis » — chacun des sites declares se sert-il encore ?
|
||
|
|
#
|
||
|
|
# UNE BOUCLE AUTOUR D'UN GREFFON, PAS UN GREFFON REECRIT. Chaque site est mesure par
|
||
|
|
# `check_http` — qui gere les delais, les redirections et vingt ans de cas limites. Ce que
|
||
|
|
# la boucle ajoute est la seule chose que le greffon ne sait pas : la LISTE des sites que
|
||
|
|
# cet hebergeur doit servir, qui vient du plan.
|
||
|
|
#
|
||
|
|
# `-H <server_name> -I 127.0.0.1` : on frappe la machine en boucle locale, mais avec
|
||
|
|
# l'en-tete `Host` du site. C'est ainsi que nginx choisit son vhost — sans cet en-tete on
|
||
|
|
# mesurerait le serveur par defaut, c'est-a-dire n'importe quoi d'autre.
|
||
|
|
set -uo pipefail
|
||
|
|
|
||
|
|
PORT={{ serveur_web_frontal_sonde_port }}
|
||
|
|
noms=({% for s in serveur_web_frontal_sites | default([]) %}'{{ s.server_name }}' {% endfor %})
|
||
|
|
etiquettes=({% for s in serveur_web_frontal_sites | default([]) %}'{{ s.nom }}' {% endfor %})
|
||
|
|
|
||
|
|
if (( ${#noms[@]} == 0 )); then
|
||
|
|
# PAS UN VERT MUET. Un hebergeur sans site declare est un etat legitime — le dire vaut
|
||
|
|
# mieux que rendre un succes qui laisserait croire qu'on a verifie quelque chose.
|
||
|
|
echo "Aucun site declare sur cet hebergeur : rien a servir, rien a verifier."
|
||
|
|
exit 0
|
||
|
|
fi
|
||
|
|
|
||
|
|
muets=()
|
||
|
|
for i in "${!noms[@]}"; do
|
||
|
|
nom=${noms[$i]}
|
||
|
|
etiquette=${etiquettes[$i]}
|
||
|
|
sortie=$(/usr/lib/nagios/plugins/check_http -H "${nom}" -I 127.0.0.1 -p "${PORT}" -u / -t 10 2>&1)
|
||
|
|
code=$?
|
||
|
|
# LE GREFFON REND PARFOIS DEUX LIGNES — la cause, puis son verdict. Icinga ne
|
||
|
|
# garde que la premiere pour resume : sans repliage, la moitie du message
|
||
|
|
# disparait de la vue qu'on regarde en premier.
|
||
|
|
resume=${sortie%%|*}
|
||
|
|
resume=${resume//$'\n'/ }
|
||
|
|
if (( code != 0 )); then
|
||
|
|
# LE MESSAGE DU GREFFON EST CONSERVE, pas resume. C'est lui qui distingue un 404 d'un
|
||
|
|
# delai depasse ou d'un socket ferme — et ces trois-la n'appellent pas le meme geste.
|
||
|
|
muets+=("${etiquette} (${nom}) : ${resume}")
|
||
|
|
fi
|
||
|
|
done
|
||
|
|
|
||
|
|
if (( ${#muets[@]} > 0 )); then
|
||
|
|
liste=$(printf '%s; ' "${muets[@]}"); liste=${liste%; }
|
||
|
|
echo "Site(s) qui ne se servent plus — ${liste}"
|
||
|
|
exit 2
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo "Sites statiques : ${#noms[@]} servi(s) — ${etiquettes[*]}."
|
||
|
|
exit 0
|