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.

177 lines
9.4 KiB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
  1. ##----------------------------------------------------------------------------
  2. ## Script : message.lib
  3. ## Module Puppet : gnc-script_core_dtsi
  4. ## Auteur : Emmanuel Confrere
  5. ## Date : 31-08-2017
  6. ## Version : 1.3.5
  7. ## Objet : Gestion des message sur la console et dans les divers fichiers de trace
  8. ##
  9. ## Fonction : fct_message
  10. ##
  11. ## Detail : Cette fonction remplace l utilisation de "echo".
  12. ## Elle permet de gerer les messages a destination des fichiers de traces
  13. ## , des fichiers de compte rendu ou de la console.
  14. ##
  15. ## Sans parametre le message est ecrit sur la console et dans le fichier
  16. ## journal du script ${SH_FICLOG}. Le comportement est modifie selon les options
  17. ## utilisees.
  18. ##
  19. ## -cpt : Le message est aussi ecrit dans le fichier de compte-rendu ${SH_FICCPT}
  20. ## -hist : Le message est aussi ecrit dans le fichier d historique ${SH_FICTRC}
  21. ## Cette option ajoute des information d execution dans le fichier d historique
  22. ## notamant le compte qui execute le script sous la forme user/sudo_user
  23. ## -debug N : Le message est ecrit uniquement dans le fichier journal ${SH_FICLOG}
  24. ## si N est inferrieure ou egal au niveau de debug du Shell. Par defaut
  25. ## le niveau debug du shell est 0.
  26. ## -nolog : inhibe l ecritutre dans le fichier journal
  27. ## -color : Ecrit le message en couleur sur la console.
  28. ## Les couleurs disponible sont noir,, rouge, vert, jaune, bleu, rose, cyan,
  29. ## gris, orange et blanc
  30. ##
  31. ## Les variables SH_FIC* sont definies dans le fichiers ${NC_EXPL_CONF}/init.conf
  32. ##
  33. # ----------------------------------------------------------------------------
  34. # Mise a jour :
  35. # 1.0.0 10-02-2016 - Emmanuel Confrere - Cre : Reprise du script du socle Oracle
  36. # 1.1.0 10-03-2017 - Emmanuel Confrere - Evo : Optimisation du traitement de l option -debug
  37. # 1.2.0 13-04-2017 - Emmanuel Confrere - Evo : Journalisation du compte d execution dans l historique
  38. # 1.2.1 29-06-2017 - Emmanuel Confrere - Ano : Fonctionnement inattendu sous Bash 3.2.25
  39. # la fonction logname ne renvoi rien ?
  40. # 1.3.0 07-08-2017 - Emmanuel Confrere - Evo : Optimisation performance - Suppression des comparaisons de chaine.
  41. # Correction Anomalie de l option -debug si mode interactif
  42. # 1.3.1 10-08-2017 - Emmanuel Confrere - Ano : En mode interactif, l option debug ne limite pas l affichage
  43. # en fonction du niveau positionnee sur le shell et celui du
  44. # message !
  45. # Correction et optimisation du traitement.
  46. # 1.3.2 21/08/2017 - Emmanuel Confrere - Ano : En mode interactif affiche systematiquement les message debug
  47. # de niveau zero. Meme si SH_NIV_DEBUG n est pas initialise !
  48. # Correction pour que l affichage ne soit effectif que si
  49. # la variable SH_NIV_DEBUG est initialise dans le shell courant.
  50. # 1.3.3 31-08-2017 - Emmanuel Confrere - Ano : Dans le cas d un message contruit avec un tableau de cette facon ${A[@]}
  51. # la libraire considere qu il sagit de plusieur argument et
  52. # tronque le message.
  53. # Pour corriger nous concatenons les messages avec un espace separateur.
  54. # pour eviter la concatenation si cette derniere pose probleme
  55. # presenter le message avec une variable tampon :
  56. # B="${A[@]}"
  57. # fct_message "coucou ${B} ..."
  58. # 1.3.4 31-08-2017 - Emmanuel Confrere - Ano : Introduction d une anomalie !
  59. # Erreur de syntaxe
  60. # 1.3.5 31-08-2017 - Emmanuel Confrere - Ano : Introduction d une autre ano !
  61. # Format de sortie modifier (ajout systematique d un espace)
  62. # 1.3.6 26-11-2017 - Doug Le Tough - Evo : Horodatage des logs au format YYYYMMDD HH:MM:SS
  63. # 1.3.7 12-08-2018 - Doug Le Tough - Evo : L'option -color est prise en compte uniquement dans un terminal
  64. ##----------------------------------------------------------------------------
  65. function fct_message
  66. {
  67. local L_TEXT="" # Texte a afficher
  68. local L_TIME_STAMP=`date "+%Y%m%d %H:%M:%S"` # Horodatage a ajouter au texte
  69. local L_INTER=0 # Mode interactif 0->non, 1->oui
  70. local L_EXISTE_REP # Controle l existance des repertoire de socle 0->OK 1->NOK
  71. local L_NB_PARAM=0 # Nb de parametre de la ligne de commande
  72. local L_TMP
  73. local L_TMP2
  74. local L_OPT # Nom des option
  75. local L_OPTION_DBG=0 # Message de debug
  76. local L_OPTION_SID="" # Affichage du SH_SESSION_IDP a l ecran
  77. local L_NIV_DEBUG=0 # Niveau de trace par defaut 0=aucune
  78. local L_OPTION_CPT=0 # Message de compte rendu
  79. local L_OPTION_HIST=0 # Message pour l historique
  80. local L_COULEUR="" # Couleur du texte avec l option -color
  81. local L_OPTION_COULEUR=0
  82. 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 "
  83. # - Mode interactif ?
  84. [ -z "${SH_SESSION_ID}" ] && L_INTER=1
  85. # - recuperation des parametres en entree
  86. L_TMP=1
  87. L_NB_PARAM=$#
  88. while [ ${L_TMP} -le ${L_NB_PARAM} ]
  89. do
  90. L_OPT="$1"
  91. case "${L_OPT}" in
  92. "-cpt") L_OPTION_CPT=1 ;;
  93. "-nolog") L_OPTION_NOLOG=1 ;;
  94. "-hist") L_OPTION_HIST=1 ;;
  95. "-color") L_OPTION_COULEUR=1
  96. L_ARG=`echo $2|tr A-Z a-z`
  97. L_TMP2=${L_ARG:0:1}
  98. if [ "${L_TMP2}" != "-" ]
  99. then
  100. # on recherche la correspondance numerique de la couleur
  101. L_COULEUR=`echo ${L_LIST_COULEUR}|sed "s/.*${L_ARG}:\([0-1];3[0-7]\) .*/\1/"`
  102. # Si on ne la trouve pas on annule la colorisation
  103. [ ${#L_COULEUR} -ne 4 ] && L_OPTION_COULEUR=0
  104. L_TMP=$(( ${L_TMP} + 1 ))
  105. shift
  106. fi
  107. if [ ${TERM} == 'dumb' ] || [ ${TERM} == 'unknown' ] || [ ${#TERM} -eq 0 ]; then
  108. # Affiche les couleurs uniquement dans un terminal
  109. L_OPTION_COULEUR=0
  110. fi;;
  111. "-debug") L_OPTION_DBG=1
  112. L_ARG="$2"
  113. L_TMP2=${L_ARG:0:1}
  114. if [ "${L_TMP2}" != "-" ]
  115. then
  116. L_ARG=`echo $2|sed 's/[0-9]//g'`
  117. if [ -n "${L_ARG}" ]
  118. then
  119. L_TEXT="$2"
  120. L_NIV_DEBUG=1
  121. else
  122. L_NIV_DEBUG=$2
  123. fi
  124. L_TMP=$(( ${L_TMP} + 1 ))
  125. shift
  126. else
  127. L_NIV_DEBUG=1
  128. fi
  129. [ ${L_NIV_DEBUG} -gt 0${SH_NIV_DEBUG} -o -z "${SH_NIV_DEBUG}" ] && return 0 ;;
  130. *) [ -z "${L_TEXT}" ] && L_TEXT="${L_OPT}" || L_TEXT="${L_TEXT} ${L_OPT}" ;;
  131. esac
  132. L_TMP=$(( ${L_TMP} + 1 ))
  133. shift
  134. done
  135. # - Controle du mode d execution ...
  136. if (( ${L_INTER} ))
  137. then
  138. # -- La fonction est executer en mode interactif (Pas dans un script du socle)
  139. # -- on autorise alors uniquement l affichage sur la sortie standard
  140. L_EXISTE_REP=0
  141. else
  142. # - Mode shell...
  143. # - On control l'existance des repertoires
  144. [ -d ${NC_EXPL_HST} -a -d ${NC_EXPL_LOG} -a -d ${NC_EXPL_CPT} ] && L_EXISTE_REP=1 || L_EXISTE_REP=0
  145. fi
  146. # - initialisation des variables
  147. [ "${SH_AFF_SID}" = "oui" ] && L_OPTION_SID="[${SH_SESSION_IDP}] "
  148. L_OPTION_NOLOG=${L_OPTION_NOLOG:=0}
  149. # - Ecriture des messages
  150. # - Ajout d une indentation si elle est definie
  151. [ -n "${SH_INDENT_MSG}" ] && L_TEXT="${SH_INDENT_MSG} ${L_TEXT}"
  152. if (( ${L_OPTION_DBG} ))
  153. then
  154. (( ${L_EXISTE_REP} & ! ${L_INTER} )) && echo "${L_TIME_STAMP} [${SH_SESSION_IDP}] : <Debug_${L_NIV_DEBUG}> ${L_TEXT}" >> ${SH_FICLOG}
  155. (( ${L_INTER} )) && echo "<Debug_${L_NIV_DEBUG}> ${L_TEXT}"
  156. else
  157. (( ${L_EXISTE_REP} & ${L_OPTION_CPT} & ! ${L_OPTION_HIST} )) && echo "${L_TIME_STAMP} : ${L_TEXT}" >> ${SH_FICCPT}
  158. (( ${L_EXISTE_REP} & ! ${L_OPTION_CPT} & ${L_OPTION_HIST} )) && echo "${L_TIME_STAMP} : ${SH_LOGUSER} : ${SH_EXECUSER} : ${L_TEXT}" >> ${SH_FICTRC}
  159. if (( ! ${L_OPTION_NOLOG} ))
  160. then
  161. (( ! ${L_INTER} & ${L_EXISTE_REP} & ! ${L_OPTION_CPT} & ! ${L_OPTION_HIST} )) && echo "${L_TIME_STAMP} [${SH_SESSION_IDP}] : ${L_TEXT}" >> ${SH_FICLOG}
  162. (( ! ${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}
  163. fi
  164. if [ \( "${SH_SILENCE}" = "non" -a "${L_OPTION_HIST}" = 0 \) -o ${L_INTER} -eq 1 ]
  165. then
  166. (( ${L_OPTION_COULEUR} )) && echo -e "${L_OPTION_SID}\033[${L_COULEUR}m${L_TEXT}\033[0m" || echo -e "${L_OPTION_SID}${L_TEXT}"
  167. fi
  168. fi
  169. return 0
  170. }
  171. typeset -Ffx fct_message