diff --git a/run_websocket.py b/run_websocket.py
index ec6b2f73fb3f44ed8dd46c73ffdeff247aae7f28..18aeb480257c9ddcb08486072c922df193796530 100755
--- a/run_websocket.py
+++ b/run_websocket.py
@@ -7,8 +7,10 @@ import os
 import sys
 import os.path
 import threading
-import datetime
 import re
+import functools
+
+from django.core.signals import request_started, request_finished
 
 import tornado.ioloop
 import tornado.options
@@ -20,10 +22,10 @@ import tornado.httpclient
 from tornado.websocket import WebSocketClosedError
 
 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
 
-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
 
 try:
@@ -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)
 
 
+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 _deco(func):
         def _deco2(request, *args, **kwargs):
@@ -56,6 +68,7 @@ def require_auth(role='user'):
                         request.user = user
                         if role == 'admin':
                             if user.role in ['SU', 'GA']:
+                                request_finished.send_robust()
                                 return func(request, *args, **kwargs)
                             logger.debug('Websocket: user [ %s ] is not admin.' % user.username)
                         else:
@@ -67,6 +80,7 @@ def require_auth(role='user'):
             except AttributeError:
                 pass
             logger.warning('Websocket: Request auth failed.')
+
         return _deco2
     return _deco
 
@@ -127,6 +141,7 @@ class MonitorHandler(tornado.websocket.WebSocketHandler):
     def check_origin(self, origin):
         return True
 
+    @django_request_support
     @require_auth('admin')
     def open(self):
         # 获取监控的path
@@ -178,6 +193,7 @@ class WebTty(Tty):
 
 
 class WebTerminalKillHandler(tornado.web.RequestHandler):
+    @django_request_support
     @require_auth('admin')
     def get(self):
         ws_id = self.get_argument('id')
@@ -207,6 +223,7 @@ class ExecHandler(tornado.websocket.WebSocketHandler):
     def check_origin(self, origin):
         return True
 
+    @django_request_support
     @require_auth('user')
     def open(self):
         logger.debug('Websocket: Open exec request')
@@ -287,6 +304,7 @@ class WebTerminalHandler(tornado.websocket.WebSocketHandler):
     def check_origin(self, origin):
         return True
 
+    @django_request_support
     @require_auth('user')
     def open(self):
         logger.debug('Websocket: Open request')