#!/bin/bash ############################################################################### # Script creado para descomprimir los xml y json del ECMWF para su posterior # parseo y comprobación. # # Marcos Molina Cano - 26/06/2017 ############################################################################### # Nombre del script. # scriptName=ecmwf_xml-json_checker # Listado de continentes que poseen xml y json. continente="africa amercen amernor amersur antartida asia europa oceania" # continente="africa amercen" # antartida" # amercen" # Listado del número total de XML o JSON a estudiar por continente. declare -A total=([africa]=5304 [amercen]=5232 [amernor]=205615 [amersur]=42150 [antartida]=19 [asia]=21700 [europa]=198515 [oceania]=24490) #echo ${total[africa]} # Cálculo de la fecha y de la pasada a estudiar. hora=`date -u +%H` if test ${hora} -lt 7 ; then pasada=12 fecha=`date -u +%Y%m%d --date="yesterday"` elif test ${hora} -gt 18 ; then fecha=`date -u +%Y%m%d` pasada=12 else fecha=`date -u +%Y%m%d` pasada=00 fi # Control de argumentos que machacarían las definiciones anteriores # de fecha y pasada. if test ${#} -eq 1 ; then pasada=${1} fecha=$(date -u +%Y%m%d) elif test ${#} -eq 2 ; then fecha=${1} pasada=${2} fi # Recorro los directorios de los servidores para su estudio. # servidor="antartida.ogimet.com" servidor="artico.ogimet.com" #servidor="antartida.ogimet.com artico.ogimet.com" for SERVIDOR in ${servidor} ; do # Tipos de archivos a estudiar. tipo="json xml" for TIPO in ${tipo} ; do # Directorio donde se están los *.tar.gz de cada continente. BASE_DIR=/data/${SERVIDOR}/${TIPO} for CONTINENTE in ${continente} ; do targz=${BASE_DIR}/${TIPO}_${fecha}${pasada}_${CONTINENTE}.tar.gz targzTmp=${targz}.tmp tst=${BASE_DIR}/${fecha}${pasada}_${CONTINENTE}.tst lock=${BASE_DIR}/${fecha}${pasada}_${CONTINENTE}.lock # Comprobación por si el archivo comprimido ya se ha descargado y descomprimido. if test ! -e ${targz} -o -e ${targzTmp} ; then echo "[`date -u +%Y-%m-%d_%H:%M:%S` UTC] - ${TIPO} --> ${CONTINENTE} --> Aún no se ha descargado ${targz}. Siguiente..." continue fi # Comprobación de que las tareas con estos ficheros no se han realizado antes. if test -e ${tst} ; then echo "[`date -u +%Y-%m-%d_%H:%M:%S` UTC] - ${TIPO} --> ${CONTINENTE} --> Tareas ya acabadas." continue fi # Comprobación de que las tareas con estos ficheros no están ya en proceso ni llevan paradas más de # dos horas. if test -e ${lock} ; then fechaCreacionLockFile=`stat -c %Y ${lock}` haceDosHoras=`date -u +%s --date="2 hours ago"` if test ${fechaCreacionLockFile} -lt ${haceDosHoras} ; then rm -f ${lock} echo "[`date -u +%Y-%m-%d_%H:%M:%S` UTC] - ${TIPO} --> ${CONTINENTE} --> Fichero de bloqueo muy antiguo. Borrándolo y saliendo..." exit else echo "[`date -u +%Y-%m-%d_%H:%M:%S` UTC] - ${TIPO} --> ${CONTINENTE} --> Un proceso ya está con esto..." continue fi fi # Comienzo de las tareas, por lo que se crea el fichero de bloqueo. echo "[`date -u +%Y-%m-%d_%H:%M:%S` UTC] - ${TIPO} --> ${CONTINENTE} --> Creación de archivo de bloqueo." touch ${lock} # Descompresión de los archivos comprimidos en su directorio por continente para su estudio. # echo "[`date -u +%Y-%m-%d_%H:%M:%S` UTC] - ${TIPO} --> ${CONTINENTE} --> Comienzo descompresión..." # if test ! -d ${BASE_DIR}/${CONTINENTE}/localidades ; then # mkdir -p ${BASE_DIR}/${CONTINENTE}/localidades # fi # tar -xzf ${fileName} -C ${CONTINENTE}/localidades/ # rm ${CONTINENTE}/localidades/*_*.${TIPO} # echo "[`date -u +%Y-%m-%d_%H:%M:%S` UTC] - ${TIPO} --> ${CONTINENTE} --> ...Fin" # Recorrido de los xml/json descomprimidos para su comprobación. echo "[`date -u +%Y-%m-%d_%H:%M:%S` UTC] - ${TIPO} --> ${CONTINENTE} --> Comienzo del parseamiento..." cd ${BASE_DIR}/${CONTINENTE} || exit contador="0" rm -f ${BASE_DIR}/${fecha}${pasada}_${CONTINENTE}.log for i in *.${TIPO}; do let contador=${contador}+1 if test $(expr ${contador} % 1000) -eq 0 ; then echo "[`date -u +%y%m%d_%H%M%S` UTC] - ${i} ( ${contador} de ${total[${CONTINENTE}]} )" >> ${lock} fi if test ${TIPO} = "xml" ; then php /home/marcos/wrf_model/tools/ecmwf_xml_parser.php ${fecha} ${pasada} ${i} >> ${BASE_DIR}/${fecha}${pasada}_${CONTINENTE}.log else php /home/marcos/wrf_model/tools/ecmwf_json_parser.php ${fecha} ${pasada} ${i} >> ${BASE_DIR}/${fecha}${pasada}_${CONTINENTE}.log fi done echo "[`date -u +%Y-%m-%d_%H:%M:%S` UTC] - ${TIPO} --> ${CONTINENTE} --> ...fin." # Borrado de archivos .log y .tst de más de X días. cd ${BASE_DIR} || exit haceUnaSemana=`date -u +%s --date="2 days ago"` for i in *${CONTINENTE}.log *${CONTINENTE}.tst; do if test -e ${i} ; then fechaCreacionFichero=`stat -c %Y ${i}` if test ${fechaCreacionFichero} -lt ${haceUnaSemana} ; then rm -f ${i} fi fi done # Borrado de archivo de bloqueo y creación de archivo de finalización. mv ${lock} ${tst} echo "[`date -u +%Y-%m-%d_%H:%M:%S` UTC] - ${TIPO} --> ${CONTINENTE} --> Fin de tareas." echo "[`date -u +%Y-%m-%d_%H:%M:%S` UTC] - ****" done echo "[`date -u +%Y-%m-%d_%H:%M:%S` UTC] - ${TIPO} --> Tareas acabadas." done done