-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathwsgi.py
executable file
·59 lines (46 loc) · 1.76 KB
/
wsgi.py
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
import logging
# from gevent.pywsgi import WSGIServer
import webapp2
import gevent
import config
import routes
import models
from services import ws
from web import errors
from lib import basehandler, utils
from ws4py.websocket import EchoWebSocket
from ws4py.server.geventserver import WSGIServer
from ws4py.server.wsgiutils import WebSocketWSGIApplication
import gevent.monkey
gevent.monkey.patch_all()
models.create_tables()
app = webapp2.WSGIApplication(debug=basehandler.IS_DEV, config=config.webapp2_config, routes=routes.get_routes())
# defined custom error handlers
class Webapp2HandlerAdapter(webapp2.BaseHandlerAdapter):
def __call__(self, request, response, exception):
request.route_args = {
'exception': exception
}
logging.exception(exception)
handler = self.handler(request, response)
return handler.get()
app.error_handlers[403] = Webapp2HandlerAdapter(errors.Error403Handler)
app.error_handlers[404] = Webapp2HandlerAdapter(errors.Error404Handler)
app.error_handlers[503] = Webapp2HandlerAdapter(errors.Error503Handler)
app.error_handlers[500] = Webapp2HandlerAdapter(errors.Error500Handler)
if __name__ == '__main__':
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
http_server = WSGIServer(('', config.http_config), app)
ws_server = WSGIServer(('', config.web_socket_port), WebSocketWSGIApplication(handler_cls=ws.Commands))
greenlets = [
gevent.spawn(http_server.serve_forever),
gevent.spawn(models.Rule.background_run_rules),
gevent.spawn(models.Sensor.background_send_values),
gevent.spawn(ws_server.serve_forever)
]
try:
gevent.joinall(greenlets)
except KeyboardInterrupt:
http_server.stop()
print 'Stopping'