#!/usr/bin/env python

import argparse
import sys
import time
from contextlib import closing
from itertools import count
from vsqs.queue import QueueManager

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Consumes messages from a '
                                                 'queue.')
    parser.add_argument('-d', '--dir', default='.',
                        help='directory containing the queue')
    parser.add_argument('queue')
    cfg = parser.parse_args()

    with closing(QueueManager(cfg.dir)) as qm:
        with closing(qm.get_queue(cfg.queue)) as q:
            start, first, prev = time.time(), 0, -1
            for i in count(1):
                mid, data = q.receive(timeout=1)
                if mid:
                    q.delete(mid)
                    if int(mid) <= prev:
                        print('Out-of-order delivery of %s (prev: %d)' %
                              (mid, prev))
                        # break
                    prev = int(mid)
                    if i % 50 == 0:
                        end = time.time()
                        sys.stdout.write('\r%d (%.2f/s)' %
                                         (i, float(i - first) / (end - start)))
                        sys.stdout.flush()
                        start, first = end, i
