#!/bin/bash

set -u
set -e

TIME0="$(date +%s)"

RSYNCOPTS=""
if [ "${1:-}" = "--remove-source-files" ]; then
	RSYNCOPTS="--remove-source-files"
else
	echo >&2 "WARN: test mode, will not remove source files"
fi

LOCKFILE="/var/run/dsc-statistics-presenter/pull-and-process-data.lock"

TIME1="$(date +%s)"

if ! dotlockfile -p -l "$LOCKFILE"; then
	logger -p daemon.err -t dsc-statistics "lock not obtained (after $(( $TIME1 - $TIME0 )) ), aborting"
	echo >&2 "ERR: lockfile cannot be obtained"
        exit 1
fi
LOCKED=yes

CONFFILE="/etc/dsc-statistics/dsc-grapher.cfg"

BASEDIR="/var/lib/dsc-statistics"
DATADIR="$BASEDIR/data"

logger -p daemon.info -t dsc-statistics "lock obtained (after  $(( $TIME1 - $TIME0 )) secs), start rsync"

< $CONFFILE grep '^server' | while read dummy SERVER nodes; do
  SERVERDIR="$DATADIR/$SERVER"
  test -L $SERVERDIR && continue;
  test -d $SERVERDIR || continue;
  for NODE in $nodes; do
    NODEDIR="$SERVERDIR/$NODE"
    test -L $NODEDIR && continue;
    test -d $NODEDIR || continue;
    mkdir -p $NODEDIR/incoming
    cd $NODEDIR
    USER=""
    REMOTEHOST=""
    UPLOADDIR=""
    SSHKEY=""
    RSYNCLOCOPTS=""
    if [ -e "./config" ]; then
      . ./config
      if ! rsync $RSYNCOPTS $RSYNCLOCOPTS --rsh="ssh -i $SSHKEY" --archive $USER@$REMOTEHOST:$UPLOADDIR/* $NODEDIR/incoming; then
        logger -p daemon.err -t dsc-statistics "rsync from $REMOTEHOST failed with error code $?"
      fi
    else
      echo >&2 "ERR: $NODEDIR/config not found"
    fi
  done
done

TIME2="$(date +%s)"
logger -p daemon.info -t dsc-statistics "end rsync (after $(( $TIME2 - $TIME1 )) secs), starting refile-and-grok"

/usr/share/dsc-statistics-presenter/refile-and-grok

dotlockfile -u "$LOCKFILE" || true

TIME3="$(date +%s)"
logger -p daemon.info -t dsc-statistics "end refile-and-grok (after $(( $TIME3 - $TIME2 )) secs), end"

exit 0

# EOF
