#!/usr/bin/env python

import sys
import time
import interp.bootstrap
from   interp.cluster import QueueManager, get_qs
from   optparse       import OptionParser

if __name__ == '__main__':
  parser = OptionParser(usage = "usage: %s [options] <status|watch|add|fresult #|slay|clear|clearall|clearresults>")

  parser.add_option('-p', '--port',
    type="int", dest="port", default=6666,
    help="specify the port to use on the server (default: %default)")

  parser.add_option('-a', '--auth-key',
    type="str", dest="authkey", default='asdf',
    help="authkey (default: %default)")

  (options, args) = parser.parse_args()

  if len(args) == 0:
    cmd = 'status'
  else:
    cmd = args[0]

  m = QueueManager(address=('', options.port), authkey=options.authkey)
  m.connect()

  tq,rq,mq,sq = get_qs(m)

  if cmd.startswith("st"):
    print "interp queue status:"
    print " tasksq   : %d" % tq.qsize()
    print " resultsq : %d" % rq.qsize()
    print " masterq  : %d" % mq.qsize()
    print " minionsq  : %d" % sq.qsize()

  if cmd.startswith("wa"):
    if len(args) == 2:
      sleeptime = float(args[1])
    else:
      sleeptime = 1

    i = 0
    while True:
      time.sleep(sleeptime)
      if i % 20 == 0:
        print "tasksq resultsq masterq minionsq"
      print "%d %d %d %d" % \
           (tq.qsize(),
            rq.qsize(),
            mq.qsize(),
            sq.qsize(),)
      i += 1

  if cmd == 'add':
    for i in xrange(int(args[1])):
      mq.put('jane%d' % i)

  if cmd == 'fresult':
    for i in xrange(int(args[1])):
      rq.put('fake.%d' % i)

  if cmd == 'slay':
    if len(args) == 1:
      for i in xrange(mq.qsize()):
        print i, "killing", mq.get()
        sq.put("slay")
    elif len(args) == 2:
      for i in xrange(int(args[1])):
        print i, "killing", mq.get()
        sq.put("slay")


  if cmd == 'clear':
    for i in xrange(tq.qsize()): print tq.get()
    for i in xrange(rq.qsize()): print rq.get()

  if cmd == 'clearall':
    for i in xrange(tq.qsize()): print tq.get()
    for i in xrange(rq.qsize()): print rq.get()
    for i in xrange(mq.qsize()): print mq.get()
    for i in xrange(sq.qsize()): print sq.get()

  if cmd == 'clearresults':
    for i in xrange(rq.qsize()): print rq.get()
