Commit 054edeef authored by 黄成维's avatar 黄成维

try fix tornado connection timeout

parent 5ab882ae
...@@ -7,8 +7,10 @@ import os ...@@ -7,8 +7,10 @@ import os
import sys import sys
import os.path import os.path
import threading import threading
import datetime
import re import re
import functools
from django.core.signals import request_started, request_finished
import tornado.ioloop import tornado.ioloop
import tornado.options import tornado.options
...@@ -20,10 +22,10 @@ import tornado.httpclient ...@@ -20,10 +22,10 @@ import tornado.httpclient
from tornado.websocket import WebSocketClosedError from tornado.websocket import WebSocketClosedError
from tornado.options import define, options from tornado.options import define, options
from pyinotify import WatchManager, Notifier, ProcessEvent, IN_DELETE, IN_CREATE, IN_MODIFY, AsyncNotifier from pyinotify import WatchManager, ProcessEvent, IN_DELETE, IN_CREATE, IN_MODIFY, AsyncNotifier
import select import select
from connect import Tty, User, Asset, PermRole, logger, get_object, PermRole, gen_resource from connect import Tty, User, Asset, PermRole, logger, get_object, gen_resource
from connect import TtyLog, Log, Session, user_have_perm, get_group_user_perm, MyRunner, ExecLog from connect import TtyLog, Log, Session, user_have_perm, get_group_user_perm, MyRunner, ExecLog
try: try:
...@@ -36,6 +38,16 @@ define("port", default=3000, help="run on the given port", type=int) ...@@ -36,6 +38,16 @@ define("port", default=3000, help="run on the given port", type=int)
define("host", default='0.0.0.0', help="run port on given host", type=str) define("host", default='0.0.0.0', help="run port on given host", type=str)
def django_request_support(func):
@functools.wraps(func)
def _deco(*args, **kwargs):
request_started.send_robust()
response = func(*args, **kwargs)
request_finished.send_robust()
return response
return _deco
def require_auth(role='user'): def require_auth(role='user'):
def _deco(func): def _deco(func):
def _deco2(request, *args, **kwargs): def _deco2(request, *args, **kwargs):
...@@ -56,6 +68,7 @@ def require_auth(role='user'): ...@@ -56,6 +68,7 @@ def require_auth(role='user'):
request.user = user request.user = user
if role == 'admin': if role == 'admin':
if user.role in ['SU', 'GA']: if user.role in ['SU', 'GA']:
request_finished.send_robust()
return func(request, *args, **kwargs) return func(request, *args, **kwargs)
logger.debug('Websocket: user [ %s ] is not admin.' % user.username) logger.debug('Websocket: user [ %s ] is not admin.' % user.username)
else: else:
...@@ -67,6 +80,7 @@ def require_auth(role='user'): ...@@ -67,6 +80,7 @@ def require_auth(role='user'):
except AttributeError: except AttributeError:
pass pass
logger.warning('Websocket: Request auth failed.') logger.warning('Websocket: Request auth failed.')
return _deco2 return _deco2
return _deco return _deco
...@@ -127,6 +141,7 @@ class MonitorHandler(tornado.websocket.WebSocketHandler): ...@@ -127,6 +141,7 @@ class MonitorHandler(tornado.websocket.WebSocketHandler):
def check_origin(self, origin): def check_origin(self, origin):
return True return True
@django_request_support
@require_auth('admin') @require_auth('admin')
def open(self): def open(self):
# 获取监控的path # 获取监控的path
...@@ -178,6 +193,7 @@ class WebTty(Tty): ...@@ -178,6 +193,7 @@ class WebTty(Tty):
class WebTerminalKillHandler(tornado.web.RequestHandler): class WebTerminalKillHandler(tornado.web.RequestHandler):
@django_request_support
@require_auth('admin') @require_auth('admin')
def get(self): def get(self):
ws_id = self.get_argument('id') ws_id = self.get_argument('id')
...@@ -207,6 +223,7 @@ class ExecHandler(tornado.websocket.WebSocketHandler): ...@@ -207,6 +223,7 @@ class ExecHandler(tornado.websocket.WebSocketHandler):
def check_origin(self, origin): def check_origin(self, origin):
return True return True
@django_request_support
@require_auth('user') @require_auth('user')
def open(self): def open(self):
logger.debug('Websocket: Open exec request') logger.debug('Websocket: Open exec request')
...@@ -287,6 +304,7 @@ class WebTerminalHandler(tornado.websocket.WebSocketHandler): ...@@ -287,6 +304,7 @@ class WebTerminalHandler(tornado.websocket.WebSocketHandler):
def check_origin(self, origin): def check_origin(self, origin):
return True return True
@django_request_support
@require_auth('user') @require_auth('user')
def open(self): def open(self):
logger.debug('Websocket: Open request') logger.debug('Websocket: Open request')
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment