#!/bin/bash
#################################################################################
# Script creado para comparar los xml y los json de distintos servidores mediante
# el siguiente comando: diff <file1> <file2>
#
# Marcos Molina Cano - 12/07/2016
#################################################################################

# Raíz donde se encuentran los archivos.
RAIZ="/media/marcos/SSD"

# 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

# Nombre de los dos servidores que vamos a comparar
SERVER1="aire.ogimet.com"
SERVER2="isocero.ogimet.com"

# Diferentes tipos de archivos a estudiar sus diferencias.
tipo="json xml"
for TIPO in ${tipo}; do
  # Declaración del archivo de finalización por tipo y comprobación de que no se han realizado ya las tareas.
  finishedFile="${RAIZ}/${TIPO}_igualador_${fecha}_${pasada}.finalizado"
  if test -e ${finishedFile} ; then
    echo "[`date -u +%Y-%m-%d_%H:%M:%S` UTC] - ${TIPO} --> ${fecha}_${pasada} --> Hecho."
    continue
  fi

  # Creación del archivo de bloqueo.
  lockFile=${RAIZ}/${TIPO}_igualador.lock
  if test -e ${lockFile} ; then
    echo "[`date -u +%Y-%m-%d_%H:%M:%S` UTC] - ${TIPO} --> ${fecha}_${pasada} --> Ya en funcionamiento. Saliendo..."
    exit
  else
    echo "[`date -u +%Y-%m-%d_%H:%M:%S` UTC] - ${TIPO} --> ${fecha}_${pasada} --> Comenzamos..."
    touch ${lockFile}
  fi

  # Comprobación de que se han terminado la descarga y descompresión de los archivos comprimidos.
  finishedFile1="${RAIZ}/${SERVER1}/${TIPO}/${TIPO}_download_${fecha}${pasada}.finalizado"
  finishedFile2="${RAIZ}/${SERVER2}/${TIPO}/${TIPO}_download_${fecha}${pasada}.finalizado"
  if test -e ${finishedFile1} ; then
    echo "[`date -u +%Y-%m-%d_%H:%M:%S` UTC] - ${TIPO} --> ${fecha}_${pasada} --> Descargado todo de ${SERVER1}."
    if test -e ${finishedFile2} ; then
      echo "[`date -u +%Y-%m-%d_%H:%M:%S` UTC] - ${TIPO} --> ${fecha}_${pasada} --> Descargado todo de ${SERVER2}..."
    else
      echo "[`date -u +%Y-%m-%d_%H:%M:%S` UTC] - ${TIPO} --> ${fecha}_${pasada} --> Aún no se ha descargado todo de ${SERVER2}."
      echo "[`date -u +%Y-%m-%d_%H:%M:%S` UTC] - ${TIPO} --> ${fecha}_${pasada} --> Saliendo..."
      rm ${lockFile}
      exit
    fi
  else
    echo "[`date -u +%Y-%m-%d_%H:%M:%S` UTC] - ${TIPO} --> ${fecha}_${pasada} --> Aún no  se ha descargado todo de ${SERVER1}."
    echo "[`date -u +%Y-%m-%d_%H:%M:%S` UTC] - ${TIPO} --> ${fecha}_${pasada} --> Saliendo..."
    rm ${lockFile}
    exit
  fi

  # Directorio donde se guardarán las diferencias.
  DIFERENCIAS="${RAIZ}/diferencias_aire-isocero_${fecha}_${pasada}_${TIPO}"
  if test ! -d ${DIFERENCIAS} ; then
    mkdir ${DIFERENCIAS}
  fi

  # id máxima de los archivos a estudiar.
  imax=490000

  # Bucle que recorre todos los ficheros.
  echo "[`date -u +%Y-%m-%d_%H:%M:%S` UTC] - ${TIPO} --> ${fecha}_${pasada} --> Comienza el trabajo duro..."
  for ((i=1; i<=${imax}; i++)) ; do
    file1=${RAIZ}/${SERVER1}/${TIPO}_all/${i}.${TIPO}
    file2=${RAIZ}/${SERVER2}/${TIPO}_all/${i}.${TIPO}
    auxfile1=${file1}.tmp
    auxfile2=${file2}.tmp
    aux=${RAIZ}/aux.tmp
    if test -s ${file1} ; then
      if test -s ${file2} ; then
        echo "${i} de ${imax}" >> ${RAIZ}/${TIPO}_estado_igualador.log
        if test ${TIPO} = "xml" ; then
          sed 's/>/>\n/g' <${file1} >${auxfile1}
          sed 's/>/>\n/g' <${file2} >${auxfile2}
        else
          sed 's/,/,\n/g' <${file1} >${auxfile1}
          sed 's/,/,\n/g' <${file2} >${auxfile2}
        fi
        diff ${auxfile1} ${auxfile2} > ${aux}
        if test -s ${aux} ; then
          diff -y --width=160 ${auxfile1} ${auxfile2} > ${DIFERENCIAS}/${i}_${TIPO}_aire-isocero.txt
        fi

#    cat ${aux} | grep " | " > ${aux1}
#    cat ${aux} | grep " < " > ${aux2}
#    cat ${aux} | grep " > " > ${aux3}

#    if test -s ${aux1} ; then
#      mv ${aux} ${DIFERENCIAS}/${i}.log
#    elif test -s ${aux2} ; then
#      mv ${aux} ${DIFERENCIAS}/${i}.log
#    elif test -s ${aux3} ; then
#      mv ${aux} ${DIFERENCIAS}/${i}.log
#    fi
        rm ${auxfile1} ${auxfile2}
      fi
    fi
  done
  echo "[`date -u +%Y-%m-%d_%H:%M:%S` UTC] - ${TIPO} --> ${fecha}_${pasada} --> Fin del trabajo duro."

  rm ${aux} ${lockFile} ${RAIZ}/${TIPO}_estado_igualador.log #${aux1} ${aux2} ${aux3}

  # Borrado de los directorios y ficheros de más de dos días.
  for n in 2 3 4 5 6 7 8 9 10 11 12 13 14 15; do
    datetmp=`date -u +%Y%m%d --date="${n} days ago"`
    rm -r ${RAIZ}/diferencias_aire-isocero_${datetmp}_*_${TIPO}
    rm -f ${RAIZ}/${TIPO}_igualador_${datetmp}_*.finalizado
  done

  touch ${finishedFile}
  echo "[`date -u +%Y-%m-%d_%H:%M:%S` UTC] - ${TIPO} --> ${fecha}_${pasada} --> Fin de las tareas."



done