# -*- coding: utf-8 -*-
from gevent import monkey
monkey.patch_all()
import logging
from tornado.wsgi import WSGIContainer
from tornado.web import Application, FallbackHandler
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from flask_script import Manager
from flask_migrate import Migrate
from multiprocessing import cpu_count
from application.app import create_app, db
from application.config import config

# 根据配置初始化app
app = create_app(config)
migrate = Migrate(app, db)
manager = Manager(app)

@manager.command
def run():
    """
    生产模式启动命令函数
    To use: python3 manager.py run
    """
    app.logger.setLevel(app.config.get('LOG_LEVEL', logging.INFO))
    service_config = {
        'bind': app.config.get('BIND', '0.0.0.0:3000'),
        'workers': app.config.get('WORKERS', cpu_count() * 2 + 1),
        'worker_class': 'gevent',
        'worker_connections': app.config.get('WORKER_CONNECTIONS', 10000),
        'backlog': app.config.get('BACKLOG', 2048),
        'timeout': app.config.get('TIMEOUT', 60),
        'loglevel': app.config.get('LOG_LEVEL', 'info'),
        'pidfile': app.config.get('PID_FILE', 'run.pid'),
    }

    http_server = HTTPServer(WSGIContainer(app))
    http_server.listen(3000)

    # wsgi_app = WSGIContainer(app)
    # application = Application([
    #     (r'.*', FallbackHandler, dict(fallback=wsgi_app))
    # ], **service_config)
    # application.listen(3000, address='127.0.0.1')
    IOLoop.instance().start()


@manager.command
def debug():
    """
    debug模式启动命令函数
    To use: python3 manager.py debug
    """
    # app.logger.setLevel(logging.DEBUG)
    print("start from here......")
    app.run(debug=True, port=3000, host='127.0.0.1')

if __name__ == '__main__':
    manager.run()