Skip to content
Snippets Groups Projects
Commit caa9ef5b authored by jkerdreu's avatar jkerdreu
Browse files

Dashboard now support Gevent alone or Gevent + Asyncio.

git-svn-id: https://redmine.imt-atlantique.fr/svn/xaal/code/Python/branches/0.7@2922 b32b6428-25c9-4566-ad07-03861ab6144f
parent c33dfdae
Branches
No related tags found
No related merge requests found
from .app import setup
\ No newline at end of file
from gevent import monkey; monkey.patch_all(thread=False)
from bottle import default_app,debug,get,redirect,static_file,TEMPLATE_PATH
from gevent.pywsgi import WSGIServer
from geventwebsocket.handler import WebSocketHandler
import gevent
from bottle import default_app,debug,get,redirect,static_file,TEMPLATE_PATH
# load pages
from . import pages
......@@ -18,6 +15,9 @@ from .core import sio
import os
HOME = os.path.dirname(__file__)
PORT = 9090
server = None
@get('/static/<filename:path>')
def send_static(filename):
......@@ -30,26 +30,45 @@ def goto_home():
def run():
""" start the xAAL stack & launch the HTTP stuff"""
global server
# add the default template directory to the bottle search path
root = os.path.join(HOME,'templates')
TEMPLATE_PATH.append(root)
xaal_core.setup()
warp10.setup()
# debug disable template cache & enable error reporting
debug(True)
bottle_app = default_app()
app = sio.setup(bottle_app)
#server = WSGIServer(("", 9090), app, handler_class=WebSocketHandler, keyfile=KEY_PATH+'key.pem', certfile=KEY_PATH+'cert.pem')
server = WSGIServer(("", 9090), app, handler_class=WebSocketHandler)
server = WSGIServer(f":{PORT}", app, handler_class=WebSocketHandler)
server.serve_forever()
def stop():
global server
server.stop()
def main():
# This apps can run with gevent alone (without asyncio)
# bottle.py use gevent to handle websocket.
# I maintain this to be able to run it on older 2.7 Python
from xaal.lib import Engine
engine = Engine()
xaal_core.setup(engine)
green_let = gevent.Greenlet(xaal_core.xaal_loop, engine)
green_let.start()
try:
run()
except KeyboardInterrupt:
stop()
print("Bye Bye...")
def setup(engine):
# This is a AsyncEngine only setup, used w/ xaal-pkgrun for example
xaal_core.setup(engine)
gevent.spawn(run)
engine.on_stop(stop)
return True
if __name__ == '__main__':
main()
......@@ -3,7 +3,7 @@ from xaal.monitor import Monitor
from . import sio
import platform
from gevent import Greenlet
import gevent
import time
import logging
......@@ -33,11 +33,10 @@ def event_handler(ev_type,dev):
# FIXME: This should be in core.sio
sio.broadcast('event_attributeChanges',msg)
def setup():
def setup(engine):
""" setup xAAL Engine & Device. And start it in a Greenlet"""
global monitor,config
helpers.setup_console_logger()
engine = Engine()
cfg = tools.load_cfg(PACKAGE_NAME)
if not cfg:
logger.info('Missing config file, building a new one')
......@@ -58,14 +57,11 @@ def setup():
logger.info('You can set "db_server" in the config file')
monitor = Monitor(dev,filter_func=monitor_filter,db_server=tools.get_uuid(db_server))
monitor.subscribe(event_handler)
config = cfg
engine.start()
green_let = Greenlet(xaal_loop, engine)
green_let.start()
def xaal_loop(engine):
""" xAAL Engine Loop Greenlet"""
engine.start()
while 1:
engine.loop()
......
......@@ -16,9 +16,6 @@ from gevent.pywsgi import WSGIServer
from geventwebsocket.handler import WebSocketHandler
# dev-type that don't appear in results
BLACK_LIST=['cli.experimental',]
PACKAGE_NAME = "xaal.rest"
logger = logging.getLogger(PACKAGE_NAME)
......@@ -29,7 +26,7 @@ server = None
def monitor_filter(msg):
""" Filter incomming messages. Return False if you don't want to use this device"""
if msg.dev_type in BLACK_LIST:
if msg.dev_type.startswith('cli.'):
return False
return True
......@@ -149,7 +146,7 @@ def run():
debug(True)
port = int(cfg.get('config').get('port',8080))
logger.info("HTTP Server running on port : %d" % port)
server = WSGIServer(("", port), app, handler_class=WebSocketHandler)
server = WSGIServer(f":{port}", app, handler_class=WebSocketHandler)
server.serve_forever()
def stop():
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment