#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Copyright 2010 yinhm

'''A datafeed server daemon.
'''
import config
import logging
import os
import signal
import sys
import tornado

from tornado import ioloop
from tornado.options import define, options

from datafeed.exchange import SH
from datafeed.imiguserver import ImiguApplication
from datafeed.server import Server


DATA_DIR = os.path.join(os.path.realpath(os.path.dirname(__file__)),
                        'var')

define("port", default=8082, help="run on the given port", type=int)
define("datadir", default=DATA_DIR, help="default data dir", type=str)


def main():
    tornado.options.parse_command_line()

    app = ImiguApplication(options.datadir, SH())
    server = Server(app, auth_password=config.AUTH_PASSWORD)
    server.listen(options.port)
    io_loop = tornado.ioloop.IOLoop.instance()

    check_time = 1 * 1000  # every second
    scheduler = ioloop.PeriodicCallback(app.periodic_job,
                                        check_time,
                                        io_loop=io_loop)

    def shutdown(signum, frame):
        print 'Signal handler called with signal', signum
        io_loop.stop()
        scheduler.stop()
        server.log_stats()
        logging.info("==> Exiting datafeed.")

    signal.signal(signal.SIGTERM, shutdown)
    signal.signal(signal.SIGINT, shutdown)

    scheduler.start()
    io_loop.start()

if __name__ == "__main__":
    main()