#!/usr/bin/nawk -f # Se usan arrays asociativos a modo de tablas indexados por campo "Sia eje" # Tabla: Campo1 | Campo2 # Descripcion: Modulo | Desc # Errores: Sia eje | Contador errores # Procesos: Sia eje | Num procesos # Tahgproc.cfg: Sia eje | Num configurado de procesos # Modulo: Sia eje | Modulo # funcion basename function basename(p) { n=split(p,a,"/"); return a[n]; } BEGIN { # Creamos tabla "Descripcion" con los modulos y su descripcion Descripcion["000001"]="MGO" Descripcion["000001X"]="Conectividad HSM" Descripcion["000001Y"]="Conectividad Maq ONL" Descripcion["010002"]="TPV" Descripcion["040001"]="PMC" Descripcion["040001X"]="Conectividad PMC" Descripcion["040001Y"]="Conectividad Maq PMC" Descripcion["050001"]="PSR" Descripcion["050001X"]="Conectividad PSR" Descripcion["050001Y"]="Conectividad Maq PSR" # Configuracion inicial file_tahgproc_cfg="/sia/dat/tahgproc.cfg" file_errores="/export/userf5/cpvalpcs_errores" file_log="/export/userf5/cpvalpcs.log" procesos_sia="/usr/bin/ptree sia" max_errores=5 salida="OK" ko=0 # Leer fichero con los errores acumulados y creamos tabla "Errores" con los acumulados por proceso while ((getline < file_errores) > 0) { split ($0,linea,"|"); Errores[linea[1]]=linea[2]; } close file_errores # Creamos tabla "Procesos" con los procesos en ejecucion de sia while ((procesos_sia | getline ) > 0) { if ($3) { sia_eje=basename($2)" "$3 } else { sia_eje=basename($2)} Procesos[sia_eje]++; } close procesos_sia # Creamos tablas: "Tahgproc_cfg" - procesos configurados en "/sia/dat/tahgproc.cfg" # "Modulo" - relaciona el modulo SIA con sus ejecutables while ((getline < file_tahgproc_cfg) > 0) { if ($1 !~ /^#/ && $0 !~ /^$/ ) { if ($2 == "tahgneti") { sia_eje="tahginet "$8 } else { if ($8 == "F") { sia_eje=$2 } else {sia_eje=$2" "$8} } Tahgproc_cfg[sia_eje]=$3; Modulo[sia_eje]=$1; } } close file_tahgproc_cfg # Chequeamos discrepancias for (sia_eje in Tahgproc_cfg) { # Ajustes procesos tahginet, se duplican if (sia_eje == "tahginet PCSM" || sia_eje == "tahginet SRMP") { Tahgproc_cfg[sia_eje]*=2; } if (sia_eje == "taegTAGT" \ || sia_eje == "tahginet SIA1" || sia_eje == "tahginet SIA2" || sia_eje == "tahginet SIA3" || sia_eje == "tahginet SIA4" \ || sia_eje == "tahginet SIS1" || sia_eje == "tahginet SIS2" || sia_eje == "tahginet SIS3" || sia_eje == "tahginet SIS4" \ || sia_eje == "tahginet ONL1" || sia_eje == "tahginet ONL2" || sia_eje == "tahginet ONL3" || sia_eje == "tahginet ONL4" ) { Tahgproc_cfg[sia_eje]=0} if (Tahgproc_cfg[sia_eje] > 0) { if (Tahgproc_cfg[sia_eje] != Procesos[sia_eje]) { Errores[sia_eje]++; } else { Errores[sia_eje]=0} printf "%s|%d\n", sia_eje,Errores[sia_eje] > file_errores } if (Errores[sia_eje] > max_errores) { if (Modulo[sia_eje] ~ "040001") { severity="WR" Mod_WR[Modulo[sia_eje]]++ split (sia_eje, eje ," "); Eje_WR[eje[1]]++ } else { ko=1 severity="KO" Mod_KO[Modulo[sia_eje]]++ split (sia_eje, eje ," "); Eje_KO[eje[1]]++ } salida=severity "date +'%h %d %H:%M:%S'" | getline fecha printf "%s %s Modulo: [%s - %s] Proceso: [%s] Esperado: (%d) Encontrado: (%d)\n",\ fecha,severity,Modulo[sia_eje],Descripcion[Modulo[sia_eje]],sia_eje,Tahgproc_cfg[sia_eje],Procesos[sia_eje]\ >> file_log } } # En funcion del resultado mostramos la salida if (salida=="KO" || ko==1) { printf "KO - Modulos SIA: ["; count=0; for (var in Mod_KO) { if (count>0){printf ", "}; count++; printf var"-"Descripcion[var] } count=0; printf "] - Procesos: [" for (var in Eje_KO) { if (count>0){printf ", "}; count++; printf var } printf "]\n" } else if (salida=="WR") { printf "WR - Modulos SIA: ["; count=0 for (var in Mod_WR) { if (count>0){printf ", "}; count++; printf var"-"Descripcion[var] } count=0; printf "] - Procesos: [" for (var in Eje_WR) { if (count>0){printf ", "}; count++; printf var }; printf "]\n" } else {print "OK"} }