socle_bash/lib/erreur.lib

122 lines
6.2 KiB
Plaintext
Executable File

##----------------------------------------------------------------------------
## 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"
##----------------------------------------------------------------------------
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 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 temporaire 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}*"
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