##---------------------------------------------------------------------------- ## Script : message.lib ## Module Puppet : gnc-script_core_dtsi ## Auteur : Emmanuel Confrere ## Date : 31-08-2017 ## Version : 1.3.5 ## Objet : Gestion des message sur la console et dans les divers fichiers de trace ## ## Fonction : fct_message ## ## Detail : Cette fonction remplace l utilisation de "echo". ## Elle permet de gerer les messages a destination des fichiers de traces ## , des fichiers de compte rendu ou de la console. ## ## Sans parametre le message est ecrit sur la console et dans le fichier ## journal du script ${SH_FICLOG}. Le comportement est modifie selon les options ## utilisees. ## ## -cpt : Le message est aussi ecrit dans le fichier de compte-rendu ${SH_FICCPT} ## -hist : Le message est aussi ecrit dans le fichier d historique ${SH_FICTRC} ## Cette option ajoute des information d execution dans le fichier d historique ## notamant le compte qui execute le script sous la forme user/sudo_user ## -debug N : Le message est ecrit uniquement dans le fichier journal ${SH_FICLOG} ## si N est inferrieure ou egal au niveau de debug du Shell. Par defaut ## le niveau debug du shell est 0. ## -nolog : inhibe l ecritutre dans le fichier journal ## -color : Ecrit le message en couleur sur la console. ## Les couleurs disponible sont noir,, rouge, vert, jaune, bleu, rose, cyan, ## gris, orange et blanc ## ## Les variables SH_FIC* sont definies dans le fichiers ${NC_EXPL_CONF}/init.conf ## # ---------------------------------------------------------------------------- # Mise a jour : # 1.0.0 10-02-2016 - Emmanuel Confrere - Cre : Reprise du script du socle Oracle # 1.1.0 10-03-2017 - Emmanuel Confrere - Evo : Optimisation du traitement de l option -debug # 1.2.0 13-04-2017 - Emmanuel Confrere - Evo : Journalisation du compte d execution dans l historique # 1.2.1 29-06-2017 - Emmanuel Confrere - Ano : Fonctionnement inattendu sous Bash 3.2.25 # la fonction logname ne renvoi rien ? # 1.3.0 07-08-2017 - Emmanuel Confrere - Evo : Optimisation performance - Suppression des comparaisons de chaine. # Correction Anomalie de l option -debug si mode interactif # 1.3.1 10-08-2017 - Emmanuel Confrere - Ano : En mode interactif, l option debug ne limite pas l affichage # en fonction du niveau positionnee sur le shell et celui du # message ! # Correction et optimisation du traitement. # 1.3.2 21/08/2017 - Emmanuel Confrere - Ano : En mode interactif affiche systematiquement les message debug # de niveau zero. Meme si SH_NIV_DEBUG n est pas initialise ! # Correction pour que l affichage ne soit effectif que si # la variable SH_NIV_DEBUG est initialise dans le shell courant. # 1.3.3 31-08-2017 - Emmanuel Confrere - Ano : Dans le cas d un message contruit avec un tableau de cette facon ${A[@]} # la libraire considere qu il sagit de plusieur argument et # tronque le message. # Pour corriger nous concatenons les messages avec un espace separateur. # pour eviter la concatenation si cette derniere pose probleme # presenter le message avec une variable tampon : # B="${A[@]}" # fct_message "coucou ${B} ..." # 1.3.4 31-08-2017 - Emmanuel Confrere - Ano : Introduction d une anomalie ! # Erreur de syntaxe # 1.3.5 31-08-2017 - Emmanuel Confrere - Ano : Introduction d une autre ano ! # Format de sortie modifier (ajout systematique d un espace) # 1.3.6 26-11-2017 - Doug Le Tough - Evo : Horodatage des logs au format YYYYMMDD HH:MM:SS # 1.3.7 12-08-2018 - Doug Le Tough - Evo : L'option -color est prise en compte uniquement dans un terminal ##---------------------------------------------------------------------------- function fct_message { local L_TEXT="" # Texte a afficher local L_TIME_STAMP=`date "+%Y%m%d %H:%M:%S"` # Horodatage a ajouter au texte local L_INTER=0 # Mode interactif 0->non, 1->oui local L_EXISTE_REP # Controle l existance des repertoire de socle 0->OK 1->NOK local L_NB_PARAM=0 # Nb de parametre de la ligne de commande local L_TMP local L_TMP2 local L_OPT # Nom des option local L_OPTION_DBG=0 # Message de debug local L_OPTION_SID="" # Affichage du SH_SESSION_IDP a l ecran local L_NIV_DEBUG=0 # Niveau de trace par defaut 0=aucune local L_OPTION_CPT=0 # Message de compte rendu local L_OPTION_HIST=0 # Message pour l historique local L_COULEUR="" # Couleur du texte avec l option -color local L_OPTION_COULEUR=0 local L_LIST_COULEUR="noir:0;30 rouge:0;31 vert:0;32 jaune:1;33 bleu:1;34 rose:0;35 cyan:0;36 gris:0;37 orange:0;33 blanc:1;37 " # - Mode interactif ? [ -z "${SH_SESSION_ID}" ] && L_INTER=1 # - recuperation des parametres en entree L_TMP=1 L_NB_PARAM=$# while [ ${L_TMP} -le ${L_NB_PARAM} ] do L_OPT="$1" case "${L_OPT}" in "-cpt") L_OPTION_CPT=1 ;; "-nolog") L_OPTION_NOLOG=1 ;; "-hist") L_OPTION_HIST=1 ;; "-color") L_OPTION_COULEUR=1 L_ARG=`echo $2|tr A-Z a-z` L_TMP2=${L_ARG:0:1} if [ "${L_TMP2}" != "-" ] then # on recherche la correspondance numerique de la couleur L_COULEUR=`echo ${L_LIST_COULEUR}|sed "s/.*${L_ARG}:\([0-1];3[0-7]\) .*/\1/"` # Si on ne la trouve pas on annule la colorisation [ ${#L_COULEUR} -ne 4 ] && L_OPTION_COULEUR=0 L_TMP=$(( ${L_TMP} + 1 )) shift fi if [ ${TERM} == 'dumb' ] || [ ${TERM} == 'unknown' ] || [ ${#TERM} -eq 0 ]; then # Affiche les couleurs uniquement dans un terminal L_OPTION_COULEUR=0 fi;; "-debug") L_OPTION_DBG=1 L_ARG="$2" L_TMP2=${L_ARG:0:1} if [ "${L_TMP2}" != "-" ] then L_ARG=`echo $2|sed 's/[0-9]//g'` if [ -n "${L_ARG}" ] then L_TEXT="$2" L_NIV_DEBUG=1 else L_NIV_DEBUG=$2 fi L_TMP=$(( ${L_TMP} + 1 )) shift else L_NIV_DEBUG=1 fi [ ${L_NIV_DEBUG} -gt 0${SH_NIV_DEBUG} -o -z "${SH_NIV_DEBUG}" ] && return 0 ;; *) [ -z "${L_TEXT}" ] && L_TEXT="${L_OPT}" || L_TEXT="${L_TEXT} ${L_OPT}" ;; esac L_TMP=$(( ${L_TMP} + 1 )) shift done # - Controle du mode d execution ... if (( ${L_INTER} )) then # -- La fonction est executer en mode interactif (Pas dans un script du socle) # -- on autorise alors uniquement l affichage sur la sortie standard L_EXISTE_REP=0 else # - Mode shell... # - On control l'existance des repertoires [ -d ${NC_EXPL_HST} -a -d ${NC_EXPL_LOG} -a -d ${NC_EXPL_CPT} ] && L_EXISTE_REP=1 || L_EXISTE_REP=0 fi # - initialisation des variables [ "${SH_AFF_SID}" = "oui" ] && L_OPTION_SID="[${SH_SESSION_IDP}] " L_OPTION_NOLOG=${L_OPTION_NOLOG:=0} # - Ecriture des messages # - Ajout d une indentation si elle est definie [ -n "${SH_INDENT_MSG}" ] && L_TEXT="${SH_INDENT_MSG} ${L_TEXT}" if (( ${L_OPTION_DBG} )) then (( ${L_EXISTE_REP} & ! ${L_INTER} )) && echo "${L_TIME_STAMP} [${SH_SESSION_IDP}] : ${L_TEXT}" >> ${SH_FICLOG} (( ${L_INTER} )) && echo " ${L_TEXT}" else (( ${L_EXISTE_REP} & ${L_OPTION_CPT} & ! ${L_OPTION_HIST} )) && echo "${L_TIME_STAMP} : ${L_TEXT}" >> ${SH_FICCPT} (( ${L_EXISTE_REP} & ! ${L_OPTION_CPT} & ${L_OPTION_HIST} )) && echo "${L_TIME_STAMP} : ${SH_LOGUSER} : ${SH_EXECUSER} : ${L_TEXT}" >> ${SH_FICTRC} if (( ! ${L_OPTION_NOLOG} )) then (( ! ${L_INTER} & ${L_EXISTE_REP} & ! ${L_OPTION_CPT} & ! ${L_OPTION_HIST} )) && echo "${L_TIME_STAMP} [${SH_SESSION_IDP}] : ${L_TEXT}" >> ${SH_FICLOG} (( ! ${L_INTER} & ${L_EXISTE_REP} & ${L_OPTION_CPT} & ${L_OPTION_HIST} )) && echo "${L_TIME_STAMP} : : Option -cpt et -hist ! - ${L_TEXT}" >> ${SH_FICLOG} fi if [ \( "${SH_SILENCE}" = "non" -a "${L_OPTION_HIST}" = 0 \) -o ${L_INTER} -eq 1 ] then (( ${L_OPTION_COULEUR} )) && echo -e "${L_OPTION_SID}\033[${L_COULEUR}m${L_TEXT}\033[0m" || echo -e "${L_OPTION_SID}${L_TEXT}" fi fi return 0 } typeset -Ffx fct_message