#!/bin/ksh
##
## Mailman: qrunner scheduler
## Copyright (c) 2008-2014 SATOH Fumiyasu @ OSS Technology Corp., Japan
##               <https://GitHub.com/fumiyas/>
##               <http://www.OSSTech.co.jp/>
##
## License: GNU General Public License version 2 or later
## Date: 2014-01-30, since 2008-06-19
##
## See also:
##   Mailman FAQ Entry
##   4.54. How do I get qrunner to run under daemontools?
##   http://www.python.org/cgi-bin/faqw-mm.py?req=show&file=faq04.054.htp

set -u

qrunner_cmd="/opt/osstech/lib/mailman/bin/qrunner"
queue_dir="/opt/osstech/var/spool/mailman"
failure_limit="${FAILURELIMIT-30}"

check_interval="$1"; shift
force_interval="$1"; shift

cd "$queue_dir" || exit 1

sleep_time="0"
failure_count="0"

while :; do
  qrunner_run=""

  if [ "$sleep_time" -ge "$force_interval" ]; then
    qrunner_run="set"
  else
    for queue_name in in out virgin archive retry bounces commands news; do
      for queue_file in "$queue_name"/*.pck; do
        if [ -f "$queue_file" ]; then
          qrunner_run="set"
          break 2
        fi
      done
    done
  fi

  if [ -n "$qrunner_run" ]; then
    if "$qrunner_cmd" --runner=All --once; then
      failure_count="0"
    else
      let failure_count++
      if [ "$failure_count" -gt $failure_limit ]; then
	echo "Aborting" 1>&2
	exit 1
      fi
      echo "Retrying later" 1>&2
    fi
    sleep_time="0"
  fi

  sleep "$check_interval"
  let sleep_time+=check_interval
done

