#!/bin/sh
##  $Revision: 1.10 $
##  SH script to send UUCP batches out.
. /usr/lib/news/lib/innshellvars

PROGNAME=`basename $0`
LOG=${MOST_LOGS}/${PROGNAME}.log

MAXJOBS=200
UUXFLAGS="- -r -gd"

##  Go to where the action is, start logging
cd $BATCH
umask 002
DEBUG=""
if [ "X$1" = X-d ] ; then
    DEBUG="-d"
    shift
else
    test ! -f ${LOG} && touch ${LOG}
    chmod 0660 ${LOG}
    exec >>${LOG} 2>&1
fi

echo "${PROGNAME}: [$$] begin `date`"

##  List of sitename:hostname pairs to send to
if [ -n "$1" ] ; then
    LIST="$*"
else
    echo "${PROGNAME}: [$$] no sites specified" >&2
    exit 1
fi

case ${HAVE_UUSTAT} in
DONT)
    TEMP=${TMPDIR}/uuq$$
    uuq -h |tr -d : >${TEMP}
    ;;
esac

##  Do the work...
for SITE in ${LIST}; do
    case $SITE in
    *:*)
	HOST=`expr $SITE : '.*:\(.*\)'`
	SITE=`expr $SITE : '\(.*\):.*'`
        ;;
    *)
        HOST=$SITE
        ;;
    esac
    BATCHFILE=${SITE}.uucp
    LOCK=${LOCKS}/LOCK.${SITE}
    trap 'rm -f ${LOCK} ; exit 1' 1 2 3 15
    shlock -p $$ -f ${LOCK} || {
	echo "${PROGNAME}: [$$] ${SITE} locked by `cat ${LOCK}`"
	continue
    }

    ##  See if any data is ready for host.
    if [ -f ${SITE}.work ] ; then
	cat ${SITE}.work >>${BATCHFILE}
	rm -f ${SITE}.work
    fi
    if [ ! -f ${SITE} -o ! -s ${SITE} ] ; then
	if [ ! -f ${BATCHFILE} -o ! -s ${BATCHFILE} ] ; then
	    rm -f ${LOCK}
	    continue
	fi
    fi
    mv ${SITE} ${SITE}.work
    ctlinnd -s -t30 flush ${SITE} || continue
    cat ${SITE}.work >>${BATCHFILE}
    rm -f ${SITE}.work
    if [ ! -s ${BATCHFILE} ] ; then
	echo "${PROGNAME}: [$$] no articles for ${SITE}"
	rm -f ${BATCHFILE}
	continue
    fi

    ##  Get number of jobs for the current site.
    case ${HAVE_UUSTAT} in
    DONT)
	JOBS=`${AWK} \
	    'BEGIN{X=0}  {if ($1 == "'$HOST'") X=$2}  END{print X}' <${TEMP}`
	;;
    DO)
	JOBS=`uustat -s${HOST} | grep rnews | wc -l`
	;;
    *)
	JOBS=0
	;;
    esac
    if [ ${JOBS} -ge ${MAXJOBS} ] ; then
	echo "${PROGNAME}: [$$] ${JOBS} files already queued for ${SITE}"
	continue
    fi
    QUEUEJOBS=`expr ${MAXJOBS} - ${JOBS}`

    ##  Get the compression flags.
    echo "${PROGNAME}: [$$] begin ${SITE}"
    case "${SITE}" in
#    esca)
#	COMPRESS="compress -b12"
#	;;
    *)
	# The default is set in innshelvars
	# COMPRESS="compress"
	;;
    esac

    time batcher -N ${QUEUEJOBS} \
	-p"(echo '#! cunbatch' ; exec ${COMPRESS} ) | uux ${UUXFLAGS} %s!rnews" \
	${HOST} ${BATCHFILE}

    echo "${PROGNAME}: [$$] end ${SITE}"
    rm -f ${LOCK}
done

case ${HAVE_UUSTAT} in
DONT)
    rm -f ${TEMP}
    ;;
esac

echo "${PROGNAME}: [$$] end `date`"
