#!/bin/bash
# -----------------------------------------------------------------------------
# Allows a select group of commands to be sent to all ONOS instances in a cell.
# -----------------------------------------------------------------------------

echo "This command has been deprecated and will be removed after Falcon release"
echo "Please use the 'stc setup|shutdown|teardown' command instead"

set -o pipefail
IFS=$'\n'

source ogroup-opts

function err() {
    printf '%s: %s: %s\n' "$(basename $0)" "$1" "$2" >&2
    usage >&2
    exit 1
}

function usage() {
cat << EOF

usage: $(basename $0) <help|[command]>

Sends a command to all ONOS instances in the current cell. Currently supported
commands are: $GOPTS

options:
    [command]  : A command to send to the instances.
    help       : Displays this message and exits.

notes:
    Hitting <TAB> will display the options for $(basename $0).

EOF
}

# gets the utility name
function getcmd() {
  # check that utility can be run in "batch-mode"
  local isgopt=false
  for c in $(printf '%s' "$GOPTS" | tr ' ' $'\n'); do
    [ "$c" = "$1" ] && isgopt=true && break
  done
  if $isgopt ; then
    printf 'onos-%s' "$1"
  else
    err 'unsupported command' "$1"
  fi
}

# early sanity check for instances/arguments
[ -z "$1" ] && usage && exit 0

OCIS=( $(env | sed -ne 's:OC[0-9]\{1,\}=\(.*\):\1 :g p' | sort -k1) )
if [ -z "$OCIS" ]; then
  printf "no controller instances, quitting early" >&2 && exit 0
fi

CMD_HELP=false
while [ $# -gt 0 ]; do
  case "$1" in
    'help')
      usage && exit 0
      ;;
    '-'?)
      err 'invalid flag' "$1" && exit 1
      ;;
     *)
      cmd=$(getcmd $1) || exit 1
      shift
      # grab flags aimed at the utility being called.
      argv=( $@ )
      args=()
      for i in "${!argv[@]}"; do
        # 'help' is a parameter for us; '-h' is for the command
        [ "${argv[$i]}" = 'help' ] && break
        [ "${argv[$i]}" = '-h' ] && CMD_HELP=true
        args[$i]="${argv[$i]}"
        shift
      done
      continue
      ;;
  esac
  shift
done

( $CMD_HELP ) && $cmd '-h' && exit 0 

# TODO: verbose-mode and cleanup
for i in ${OCIS[@]}; do
  ${cmd} $(echo ${args[@]}) "$i" 2>/dev/null &
done
