1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
#!/usr/bin/env python3
# -*- mode: python -*-
#
# Copyright (c) 2016-2017 Weitian LI <weitian@aaronly.me>
# MIT license
"""
Start (and/or control) the Web user interface (UI) of "fg21sim",
which is built using the Tornado_ web server and WebSocket_ protocol.
.. _Tornado: http://www.tornadoweb.org/
.. _WebSocket: https://en.wikipedia.org/wiki/WebSocket ,
http://caniuse.com/#feat=websockets
"""
import os
import sys
import logging
import webbrowser
import tornado.ioloop
from tornado.options import define, options, parse_command_line
from fg21sim.configs import CONFIGS
from fg21sim.utils import setup_logging
from fg21sim.webui import Application
# Each module can defines its own options, which are added to the global
# namespace. Therefore the defined options can also be used by other modules.
define("host", default="localhost", type=str,
help=("IP address or hostname the server will listen on. "
"Specify '0.0.0.0' or '' (empty string) to listen on "
"all available interfaces."))
define("port", default=21127, type=int, help="Server listen port")
define("debug", default=False, help="Enable the debug mode")
define("no_browser", default=False,
help="Do not open the Web UI in a browser after startup")
def main():
options.logging = None
parse_command_line()
if options.host == "":
options.host = "0.0.0.0"
loglevel = "DEBUG" if options.debug else None
setup_logging(dict_config=CONFIGS.logging, level=loglevel)
tool = os.path.basename(sys.argv[0])
logger = logging.getLogger(tool)
logger.info("COMMAND: {0}".format(" ".join(sys.argv)))
application = Application(debug=options.debug)
application.listen(options.port, address=options.host)
listen_url = "http://{host}:{port}".format(host=options.host,
port=options.port)
access_url = "http://{host}:{port}".format(host="localhost",
port=options.port)
logger.info("Tornado started on: {0}".format(listen_url))
logger.info("You can use the Web UI by accessing:" +
"\n\t{0}".format(access_url))
if not options.no_browser:
# Open the Web UI in a new browser tab
webbrowser.open_new_tab(access_url)
tornado.ioloop.IOLoop.current().start()
if __name__ == "__main__":
main()
|