#!/usr/bin/env python
import os
import sys
import time
import logging

import darkimporter.utils as utils
from darkimporter.darkdaemon import Daemon
from darkimporter.libimporter import do_buildid_import, check_shutdown
from darkimporter.libimporter import create_rundir, log_status
from darkimporter.libimporter import remove_redis_keys, get_redis_config, get_key
from darkimporter.utils import log
from retask.queue import Queue
from retask.task import Task


class DarkDaemon(Daemon):
    def run(self):
        """
        The daemon process
        """
        key = get_key('darkjobworker')
        config = get_redis_config()
        jobqueue = Queue('jobqueue', config)
        jobqueue.connect()
        log_status('darkjobworker', 'Starting worker module')
        while True:
            if check_shutdown():
                break
            if jobqueue.length == 0:
                log(key, "Sleeping, no jobqueue job", 'info')
                time.sleep(60)
                continue
            try:
                task = jobqueue.dequeue()
                if not task:
                    continue
                url = task.data['url']
                idx = task.data['jobid']
                utils.msgtext = task.data['url']
                log(key, "Import started %s" % idx, 'info')
                do_buildid_import(url, idx, key)
                log(key, "Import finished %s" % idx, 'info')
            except Exception, err:
                log(key, str(err), 'error')
        remove_redis_keys('darkjobworker')
                

if __name__ == '__main__':
    daemon = None 
    create_rundir()
    if len(sys.argv) == 2:
        daemon = DarkDaemon('/var/run/darkserver/darkjobqueue.pid')
        if 'start' == sys.argv[1]:
            daemon.start()
        else:
            print "Unknown command"
            sys.exit(2)
        sys.exit(0)
    if len(sys.argv) == 3:
        daemon = DarkDaemon('/var/run/darkserver/darkjobqueue%s.pid' % sys.argv[2])
        if 'start' == sys.argv[1]:
            daemon.start()
        elif 'stop' == sys.argv[1]:
            daemon.stop() 
        sys.exit(0)
    else:
        print "usage: %s start" % sys.argv[0]
        sys.exit(2)
