#!/bin/bash

# google_cloud_storage_aux.sh
#################################################################################
# Script auxiliar para sincronizar los productos de aire.ogimet.com con los
# directorios locales preparados para ello.
#
# Marcos Molina Cano - 01/09/2016
#################################################################################

# Control de parámetros de entrada.
if test ${#} -eq 1 ; then
  PASADA="${1}"
  FECHA="`date -u +%Y%m%d`"
else
  echo "[`date -u +%Y-%m-%d` `date -u +%H:%M:%S` UTC] - Faltan parámetros de entrada."
  exit
fi

# Definición de directorios y archivos a usar.
CHECK_DIR="/home/gfs/meteored"
PRODUCT_DIR="/home/imagenes.meteored.com"
LOCK_FILE="/home/gfs/goole_cloud_storage_aux.lock"

# Si existe el archivo de bloqueo es porque ya está en proceso.
if test -e ${LOCK_FILE} ; then
  if test `stat -c %Y ${LOCK_FILE}` -lt `date -u +%s --date="30 minutes ago"` ; then
    echo "[`date -u +%Y-%m-%d` `date -u +%H:%M:%S` UTC] -     Archivo de bloqueo demasiado antiguo. Problemas. Borro y comienzo de nuevo..."
    rm ${LOCK_FILE} && touch ${LOCK_FILE}
  else
    echo "[`date -u +%Y-%m-%d` `date -u +%H:%M:%S` UTC] -     Ya en proceso."
    exit
  fi
else
  # Si no existe lo creo para que empiece el trabajo.
  echo "[`date -u +%Y-%m-%d` `date -u +%H:%M:%S` UTC] - Comienza el trabajo. Creo el archivo de bloqueo."
  touch ${LOCK_FILE}
fi

# Definición de los archivos de finalización.
MAPAS="finished_${FECHA}_${PASADA}"
MAPAS_DIR="gfs_meteored"
CAPAS="finished_capas_${FECHA}_${PASADA}"
CAPAS_DIR="gfs_meteored2"
MAPAS2="finished_mapas2_${FECHA}_${PASADA}"
MAPAS2_DIR="gfs_meteored3"
CAPAS_MERCATOR="finished_capas_${FECHA}_${PASADA}"
CAPAS_MERCATOR_DIR="gfs_meteoredM"
CAPAS_MERCATOR_XML="finished_capas_xml_${FECHA}_${PASADA}"
CAPAS_MERCATOR_XML_DIR="gfs_meteoredM"
JSON="finished_plocales_json_${FECHA}_${PASADA}"
JSON_DIR="json"
UVI="finished_uvi_${FECHA}"
UVI_DIR="uvi_meteored"
CAPAS_WRF="finished_capas_wrf_${FECHA}_${PASADA}"
CAPAS_WRF_DIR="wrf_meteored2"
CAPAS_WRF_XML="finished_capas_xml_${FECHA}_${PASADA}"
CAPAS_WRF_XML_DIR="wrf_meteored2"
CAPAS_WRF2="finished_wrf2_${FECHA}_${PASADA}"
CAPAS_WRF2_DIR="wrf_meteored3"
XML="finished_plocales_xml_${FECHA}_${PASADA}"
XML_DIR="xml"

# Definición de arrays con cadenas a usar en las comprobaciones.
tarea=("Mapas-GFS-Meteored" "Mapas2-GFS-Meteored" "Capas-GFS-Meteored" "Capas-GFS-Meteored" "Capas-WRF-Meteored" "Mapas-WRF2-Meteored")
directorio=("gfs_meteored" "gfs_meteored3" "gfs_meteored2" "gfs_meteoredM" "wrf_meteored2" "wrf_meteored3")
finalizacion=(${MAPAS} ${MAPAS2} ${CAPAS} ${CAPAS_MERCATOR} ${CAPAS_WRF} ${CAPAS_WRF2})

# Compruebo si están disponibles los productos.
for ((i=0; i<${#directorio[@]}; i++)) ; do
  if test -e /home/gfs/meteored/${finalizacion[$i]} ; then
    echo "[`date -u +%Y-%m-%d` `date -u +%H:%M:%S` UTC] -     Tareas ya realizadas para ${tarea[$i]}"
    continue
  fi
  # Pido el archivo gfs_check.php al servidor de pruebas para comprobar si están los productos.
  cd /home/gfs
  wget -q aire.ogimet.com/gfs_check.php
  cat gfs_check.php | grep ${tarea[${i}]} | grep "Se ha terminado de dibujar la pasada" > aux.tmp
  if test ! -s aux.tmp ; then
    echo "[`date -u +%Y-%m-%d` `date -u +%H:%M:%S` UTC] -     ${directorio[$i]} aún no disponibles. Siguiente..."
    rm aux.tmp gfs_check.php
    continue
  else
    echo "[`date -u +%Y-%m-%d` `date -u +%H:%M:%S` UTC] -     ${directorio[$i]} disponibles. Cambio su hora..."
    rm aux.tmp gfs_check.php
  fi
  cd ${PRODUCT_DIR}/${directorio[$i]}
  archivos=${PRODUCT_DIR}/${directorio[$i]}/*
  for j in ${archivos} ; do
    touch ${j}
  done
  cd ${CHECK_DIR}
  if test "${i}" = "2" ; then
    continue
  else
    touch ${finalizacion[$i]}
  fi
  echo "[`date -u +%Y-%m-%d` `date -u +%H:%M:%S` UTC] -     Tareas para ${directorio[$i]} terminadas."
done

# Se borran los archivos de finalización de los paroductos que tengan más de dos días.
FECHA_LIMITE=`date -u +%Y%m%d --date="2 days ago"`
rm ${CHECK_DIR}/finished_*${FECHA_LIMITE}_${PASADA}


# Borro el archivo de bloqueo
echo "[`date -u +%Y-%m-%d` `date -u +%H:%M:%S` UTC] - Borrado del archivo de bloqueo. Saliendo..."
rm ${LOCK_FILE}
