#!/bin/bash
# -----------------------------------------------------------------------------
# Collect ONOS logs from a single node or the current ONOS cell.
# -----------------------------------------------------------------------------

[ ! -d "$ONOS_ROOT" ] && echo "ONOS_ROOT is not defined" >&2 && exit 1
. $ONOS_ROOT/tools/build/envDefaults

function print_usage {
    command_name=`basename $0`
    echo "Collect ONOS logs from a single node or the current ONOS cell."
    echo
    echo "Usage:     $command_name <TARGET> "
    echo "           $command_name [-h | --help]"
    echo "Options:"
    echo "    TARGET          The target of the command"
    echo "    [-h | --help]   Print this help"
    echo ""
    echo "TARGET:  <hostname | --cell>"
    echo "      hostname        Execute on the specified host name"
    echo "        --cell        Execute on the current ONOS cell"
    echo ""
}

# Print usage
if [ "${1}" = "-h" -o "${1}" = "--help" ]; then
    print_usage
    exit 0
fi

# Select the target
if [ "${1}" = "--cell" ]; then
    nodes=$(env | sort | egrep "^OC[0-9]+" | cut -d= -f2)
else
    nodes=${1:-$OCI}
fi

# Execute the remote commands
for node in $nodes; do
    echo "fetching from ${node}..."
    USE_RSYNC=${USE_RSYNC:-'false'}
    # Check if RSYNC is installed
    if [ "$USE_RSYNC" = "true" ]; then
      if ssh $ONOS_USER@${node} $SSH_OPTIONS which rsync >&2 > /dev/null; then
        echo "Using rsync"
      else
        echo "Installing rsync"
        # TODO check remote OS and use proper method to install rsync
        ssh $ONOS_USER@${node} sudo apt-get install -y rsync || USE_RSYNC='false'
      fi
    fi

    mkdir -p ${node}
    if [ "$USE_RSYNC" = "true" ]; then
        rsync -avhz --progress [$ONOS_USER@${node}]:$ONOS_INSTALL_DIR/log/karaf.log* ./${node}/
    else
        scp -p $ONOS_USER@[${node}]:$ONOS_INSTALL_DIR/log/karaf.log* ./${node}/
    fi
done
