L'ensemble des scripts et bibliothèques bash utilisés pour maintenir l'infrastructure du Tetalab. Ce socle Bash est une version légère et adaptée du socle Bash essentiellement développé par Emmanuel Confrère, éminent DBA Calédonien.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

123 lines
6.4 KiB

##----------------------------------------------------------------------------
## Script : erreur.lib
## Module Puppet : gnc-script_core_dtsi
## Auteur : Emmanuel Confrere
## Date : 06-04-2017
## Version : 1.2.2
## Objet : Affiche le message d erreur associe au code et execute
## eventuellement une fonction rattachee.
##
## Fonction : fct_erreur Nombre
##
## Detail : Le message, et eventuellement la fonction sont recherche dans
## le fichier "${NC_EXPL_MSG}/nom_du_script.msg". Chaque ligne de ce fichier
## correspond a la definition d une erreur : Numero_err,Type,Fonction,Message
## Les parametre sont separe par le caractere "|".
## Type peut prendre les valeurs "info" ou "erreur"
## La fonction peut etre "stop","continu" ou defini dans le shell appelant.
## Numero_err est le code de retour du script (les numero de 250 a 256 sont reseves).
##
## Si numero_err vaut zero CodeRet=0 Fonction="stop"
## Si numero_err non renseigne CodeRet=250 Fonction="stop"
## Si numero_err n est pas trouver dans le fichier ".msg" CodeRet=251 Fonction="stop"
## Si le fichier ".msg" n existe pas CodeRet=252 Fonction="stop"
## Si la ligne de definition n est pas correcte CodeRet=253 Fonction="stop"
## Une erreur ete remontee par la fonction fct_params CodeRet=254 Fonction="stop"
## Si numero_err > 250 CodeRet=255
##
# ----------------------------------------------------------------------------
# Mise a jour :
# 1.0.0 10-02-2016 - Emmanuel Confrere - Evo : Integration au socle DTSI
# 1.0.1 17-03-2016 - Emmanuel Confrere - Ano : Les fichier temporaire ne sont pas supprimer dans les sous arborescence
# 1.1.0 24-08-2016 - Emmanuel Confrere - Evo : Prise en charge de la librairie fct_params
# 1.2.0 05-10-2016 - Emmanuel Confrere - Evo : Interpretation des variables dans la zone de texte de fichier de configuration .msg
# 1.2.1 10-03-2017 - Emmanuel Confrere - Ano : Suppression des variables NC_EXPL_*
# 1.2.2 06-04-2017 - Emmanuel Confrere - Ano : Degradation de performance serveur (Cf. DBA-2458)
# Suppression de la commande "find"
# 1.3.0 19-02-2017 - Doug Le Tough - Evo : Suppression systematique du repertoire ${SH_TMP_DIR} en fin de script
##----------------------------------------------------------------------------
function fct_erreur
{
# - Declaration des variables
local L_NumErr=$1 # Numero d erreur a rechercher
local L_CodRet=0 # Code de sortie
local L_Cmd="stop" # Fonction execute par defaut, apres recheche
local L_RefErr="" # Extraction de la ligne du fichier .msg
local L_NbChamp="" # Controle le Nb Champ des ligne .msg
local L_Msg="" # Message a afficher
local L_Type="" # Type de message
[ -z "${SH_FICMSG}" ] && return 0
if [ $# -ne 1 ]
then
L_Cmd="stop"; L_CodRet=250; L_NumErr=250; L_Type="ERREUR"; L_Msg="NoErr non renseigne"
else
case ${L_NumErr} in
0 ) L_Cmd="stop"; L_CodRet=0; L_Type="FIN-OK" ;;
254 ) L_Cmd="stop"; L_CodRet=254; L_Type="ERREUR"; L_Msg="Une erreur a ete remontee par la librairie fct_params" ;;
* ) if [ -f ${SH_FICMSG} ]
then
L_RefErr=`grep -e "^${L_NumErr} *|" ${SH_FICMSG}`
if [ -n "${L_RefErr}" ]
then
L_NbChamp=`echo ${L_RefErr}|sed "s/[^|]//g"`
if [ ${#L_NbChamp} -ne 3 ]
then
L_Cmd="stop"; L_CodRet=253; L_Type="ERREUR"; L_Msg="Definition de l erreur incorrecte"
else
[ ${L_NumErr} -ge 250 ] && L_CodRet=255 || L_CodRet=${L_NumErr}
L_Type=`echo ${L_RefErr}|cut -d"|" -f 2|tr a-z A-Z|sed 's/^ *//;s/ *$//'`
L_Cmd=`echo ${L_RefErr}|cut -d"|" -f 3|sed 's/^ *//;s/ *$//'`
eval L_Msg=\"${L_RefErr##*|}\"
[ -z "${L_Cmd}" ] && L_Cmd="stop"
fi
else
L_Cmd="stop"; L_CodRet=251; L_Type="ERREUR"; L_Msg="Definition de l erreur non trouvee"
fi
else
L_Cmd="stop"; L_CodRet=252; L_Type="ERREUR"; L_Msg="Le fichier msg n existe pas"
fi ;;
esac
fi
case ${L_Type} in
"ERREUR" ) fct_message -color rouge "${L_Type} : ${L_Msg}" ;;
"ALERTE" ) fct_message -color orange "${L_Type} : ${L_Msg}" ;;
"INFO" ) fct_message -color bleu "${L_Type} : ${L_Msg}" ;;
"FIN-OK" ) ;;
* ) fct_message "${L_Type} : ${L_Msg}" ;;
esac
case "${L_Cmd}" in
"stop" ) fct_message -hist "(${SH_SESSION_ID}) : fin - ${L_NumErr}"
# Suppression des fichiers temporaire a la sortie du shell principal si mode debug pas activer
if [ ${#SH_INDENT_MSG} -eq 0 -a ${SH_NIV_DEBUG} -eq 0 ]
then
fct_message -debug 0 "<lib:fct_erreur> Nettoyage des fichiers temporaires de la session ${SH_SESSION_ID}"
if [ -n "${NC_EXPL_TMP}" -a -n "${SH_SESSION_ID}" -a "${NC_EXPL_TMP}" != "/" -a "${NC_EXPL_TMP}" != "." ]
then
rm -f "${NC_EXPL_TMP}/*${SH_SESSION_ID}*"
rm -Rf ${SH_TMP_DIR}
else
fct_message -debug 0 "<lib:fct_erreur> Variable de session incoherente : NC_EXPL_TMP = ${NC_EXPL_TMP} & SH_SESSION_ID = ${SH_SESSION_ID}"
fi
fi
case ${L_Type} in
"ERREUR" ) fct_message -color rouge "fin (${L_NumErr})" ;;
"ALERTE" ) fct_message -color orange "fin (${L_NumErr})" ;;
"INFO" ) fct_message -color bleu "fin (${L_NumErr})" ;;
"FIN-OK" ) fct_message -color vert "fin (${L_NumErr})" ;;
* ) fct_message "${L_Type} : ${L_Msg}" ;;
esac
# Signaler la fin d execution au semaphore eventuel
fct_libere_exec
# Reduction de l indentation
[ ${#SH_INDENT_MSG} -gt 0 ] && SH_INDENT_MSG=${SH_INDENT_MSG:0:$((${#SH_INDENT_MSG}-2))}
exit ${L_CodRet} ;;
"continu" ) return 0 ;;
* ) eval ${L_Msg} ;;
esac
}
typeset -Ffx fct_erreur