#! /bin/zsh

nukeem() { \
  trap - INT QUIT TERM
  pkill -9 -f 'vw.*--port 26543'
}

if which netcat >/dev/null 2>/dev/null; then
  netcat=netcat
elif which nc >/dev/null 2>/dev/null; then
  netcat=nc
else
  echo "Install netcat or nc" >&2
  exit 1
fi

data="$1"
shift

{ vw "$@" --num_children 24 --port 26543 2>&1 | perl -lane 'print $_ unless $F[2] =~ /^\d$/ && $c{$F[2]}++;' } &

trap 'nukeem; exit 1' INT QUIT TERM

while ! $netcat -z localhost 26543
  do
    sleep 1
  done

sleep 5

zcat $data |                                            \
./map                                                   \
  >($netcat localhost 26543 > /dev/null)                \
  >($netcat localhost 26543 > /dev/null)                \
  >($netcat localhost 26543 > /dev/null)                \
  >($netcat localhost 26543 > /dev/null)                \
  >($netcat localhost 26543 > /dev/null)                \
  >($netcat localhost 26543 > /dev/null)                \
  >($netcat localhost 26543 > /dev/null)                \
  >($netcat localhost 26543 > /dev/null)                \
  >($netcat localhost 26543 > /dev/null)                \
  >($netcat localhost 26543 > /dev/null)                \
  >($netcat localhost 26543 > /dev/null)                \
  >($netcat localhost 26543 > /dev/null)                \
  >($netcat localhost 26543 > /dev/null)                \
  >($netcat localhost 26543 > /dev/null)                \
  >($netcat localhost 26543 > /dev/null)                \
  >($netcat localhost 26543 > /dev/null)                \
  >($netcat localhost 26543 > /dev/null)                \
  >($netcat localhost 26543 > /dev/null)                \
  >($netcat localhost 26543 > /dev/null)                \
  >($netcat localhost 26543 > /dev/null)                \
  >($netcat localhost 26543 > /dev/null)                \
  >($netcat localhost 26543 > /dev/null)                \
  >($netcat localhost 26543 > /dev/null)                \
  >($netcat localhost 26543 > /dev/null)

pkill -f 'vw.*--port 26543'

while test "x$1" = "x-f" && test ! -s "$2"
  do
    sleep 1
  done
