178 lines
		
	
	
		
			9.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			178 lines
		
	
	
		
			9.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
| ##----------------------------------------------------------------------------
 | |
| ## 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}] : <Debug_${L_NIV_DEBUG}> ${L_TEXT}" >> ${SH_FICLOG}
 | |
|     (( ${L_INTER} )) && echo "<Debug_${L_NIV_DEBUG}> ${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} : <lib:fct_message> : 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
 |