mirror of https://github.com/jumpserver/jumpserver
基本完成
parent
50d21fcdca
commit
b30697ea20
|
@ -182,6 +182,7 @@ class Jtty(object):
|
|||
raise ServerError('Create %s failed, Please modify %s permission.' % (today_connect_log_dir, tty_log_dir))
|
||||
|
||||
try:
|
||||
# log_file_f = open('/opt/jumpserver/logs/tty/20151102/a_b_191034.log', 'a')
|
||||
log_file_f = open(log_file_path + '.log', 'a')
|
||||
log_time_f = open(log_file_path + '.time', 'a')
|
||||
except IOError:
|
||||
|
|
|
@ -11,11 +11,13 @@ import tornado.options
|
|||
import tornado.web
|
||||
import tornado.websocket
|
||||
import tornado.httpserver
|
||||
import tornado.gen
|
||||
|
||||
from tornado.options import define, options
|
||||
from pyinotify import WatchManager, Notifier, ProcessEvent, IN_DELETE, IN_CREATE, IN_MODIFY
|
||||
|
||||
define("port", default=8080, help="run on the given port", type=int)
|
||||
define("host", default='0.0.0.0', help="run port on", type=str)
|
||||
|
||||
|
||||
class EventHandler(ProcessEvent):
|
||||
|
@ -63,7 +65,7 @@ class Application(tornado.web.Application):
|
|||
def __init__(self):
|
||||
handlers = [
|
||||
(r'/', MainHandler),
|
||||
(r'/send', SendHandler),
|
||||
(r'/monitor', MonitorHandler),
|
||||
]
|
||||
|
||||
setting = {
|
||||
|
@ -75,31 +77,33 @@ class Application(tornado.web.Application):
|
|||
tornado.web.Application.__init__(self, handlers, **setting)
|
||||
|
||||
|
||||
class SendHandler(tornado.websocket.WebSocketHandler):
|
||||
class MonitorHandler(tornado.websocket.WebSocketHandler):
|
||||
clients = set()
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.file_path = None
|
||||
super(self.__class__, self).__init__(*args, **kwargs)
|
||||
|
||||
def check_origin(self, origin):
|
||||
return True
|
||||
|
||||
def open(self):
|
||||
SendHandler.clients.add(self)
|
||||
# 获取监控的path
|
||||
self.file_path = self.get_argument('file_path', '')
|
||||
MonitorHandler.clients.add(self)
|
||||
self.stream.set_nodelay(True)
|
||||
|
||||
def on_message(self, message):
|
||||
self.write_message(message)
|
||||
# while True:
|
||||
# self.write_message(json.dumps(message))
|
||||
# time.sleep(1)
|
||||
# # 服务器主动关闭
|
||||
# self.close()
|
||||
# SendHandler.clients.remove(self)
|
||||
|
||||
file_monitor('/opt/jumpserver/logs/tty/20151102/a_b_191034.log', client=self)
|
||||
self.write_message('monitor /tmp/test1234')
|
||||
self.write_message('Connect WebSocket Success. <br/>')
|
||||
# 监控日志,发生变动发向客户端
|
||||
file_monitor('%s.log' % self.file_path, client=self)
|
||||
self.write_message('Disconnect WebSocket.<br/>')
|
||||
|
||||
def on_close(self):
|
||||
# 客户端主动关闭
|
||||
SendHandler.clients.remove(self)
|
||||
self.close()
|
||||
self.finish()
|
||||
MonitorHandler.clients.remove(self)
|
||||
|
||||
|
||||
class MainHandler(tornado.web.RequestHandler):
|
||||
|
@ -111,5 +115,7 @@ if __name__ == '__main__':
|
|||
tornado.options.parse_command_line()
|
||||
app = Application()
|
||||
server = tornado.httpserver.HTTPServer(app)
|
||||
server.listen(options.port)
|
||||
server.bind(options.port, options.host)
|
||||
# server.listen(options.port)
|
||||
server.start(num_processes=1)
|
||||
tornado.ioloop.IOLoop.instance().start()
|
||||
|
|
|
@ -42,7 +42,7 @@
|
|||
|
||||
ws.onmessage = function(evt){
|
||||
console.log(evt.data);
|
||||
$('#content').append(evt.data.replace('\r\n', '<br />').replace('[\r\n]', '<br />'));
|
||||
$('#content').append(evt.data.replace(/\n|\r|(\r\n)|(\u0085)|(\u2028)|(\u2029)/g, '<br>'));
|
||||
};
|
||||
|
||||
ws.onclose = function(evt){
|
||||
|
|
|
@ -77,7 +77,7 @@
|
|||
<td id="remote_ip" class="text-center"> {{ post.remote_ip }} </td>
|
||||
{% ifnotequal session_role_id 0 %}
|
||||
<td class="text-center"><a href="/jlog/history/?id={{ post.id }}" class="log_command"> 命令统计 </a></td>
|
||||
<td class="text-center"><a class="monitor" filename="{{ post.log_path }}"> 监控 </a></td>
|
||||
<td class="text-center"><a class="monitor" file_path="{{ post.log_path }}"> 监控 </a></td>
|
||||
<td class="text-center"><input type="button" id="cut" class="btn btn-danger btn-xs" name="cut" value="阻断" onclick='cut("{{ post.pid }}")' /></td>
|
||||
{% endifnotequal %}
|
||||
<td class="text-center"> {{ post.start_time|date:"Y-m-d H:i:s" }} </td>
|
||||
|
@ -99,13 +99,66 @@
|
|||
|
||||
{#<script src="http://{{ web_socket_host }}/socket.io/socket.io.js"></script>#}
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
$('.monitor').click(function(){
|
||||
window.open('/jlog/monitor/', '监控', 'height=500, width=910, top=89px, left=99px,toolbar=no,menubar=no,scrollbars=auto,resizeable=no,location=no,status=no');
|
||||
})
|
||||
});
|
||||
{# $(document).ready(function(){#}
|
||||
{# $('.monitor').click(function(){#}
|
||||
{# window.open('/jlog/monitor/', '监控', 'height=500, width=910, top=89px, left=99px,toolbar=no,menubar=no,scrollbars=auto,resizeable=no,location=no,status=no');#}
|
||||
{# })#}
|
||||
{# });#}
|
||||
|
||||
function log_search(){
|
||||
|
||||
function init(obj){
|
||||
var file_path = obj.attr('file_path');
|
||||
console.log(file_path);
|
||||
var socket = new WebSocket('ws://j:8080/monitor?file_path='+file_path);
|
||||
socket.onopen = function(evt){
|
||||
socket.send(file_path)
|
||||
};
|
||||
|
||||
var username = obj.closest('tr').find('#username').text();
|
||||
var ip = obj.closest('tr').find('#ip').text();
|
||||
|
||||
BootstrapDialog.show({message: function(){
|
||||
var tag = $('<pre id="log" style="height: 500px;overflow: auto;background-color: rgba(0, 0, 0, 0);line-height: 0.8; border: none"></pre>');
|
||||
{# document.cookie.split('; ').forEach(function(obj){#}
|
||||
{# var info = obj.split('=');#}
|
||||
{# if(info.length == 2 ){#}
|
||||
{# if(info[0] == 'username'){#}
|
||||
{# username = info[1];#}
|
||||
{# }else if(info[0] == 'seed'){#}
|
||||
{# seed = info[1];#}
|
||||
{# }#}
|
||||
{# }#}
|
||||
{# });#}
|
||||
|
||||
//服务器端认证
|
||||
{# socket.send('login', {userid:message.id, filename:message.filename,username:username,seed:seed});#}
|
||||
socket.onmessage = function(evt){
|
||||
var control_regx = /\x1B\[([0-9]{1,3}((;[0-9]{1,3})*)?)?[m|K]/g;
|
||||
var newline_regx = /\n|\r|(\r\n)|(\u0085)|(\u2028)|(\u2029)/g;
|
||||
{# if (option == 'new') {#}
|
||||
tag.append(evt.data.replace(newline_regx, '<br />').replace(control_regx, ''));
|
||||
{# } else if (option == 'exist') {#}
|
||||
{# tag.append('<pre>' + exsit_message + '</pre>');#}
|
||||
{# }#}
|
||||
tag.animate({ scrollTop: tag[0].scrollHeight}, 1);
|
||||
};
|
||||
|
||||
tag[0].style.color = "#00FF00";
|
||||
return tag[0];
|
||||
} ,
|
||||
title:'Jumpserver实时监控 '+' 登录用户名: '+'<span class="text-info">'+username+'</span>'+' 登录主机: '+'<span class="text-info">'+ip,
|
||||
onhide:function(){
|
||||
socket.close();
|
||||
}});
|
||||
}
|
||||
|
||||
$(document).ready(function(){
|
||||
$('.monitor').click(function(){
|
||||
init($(this))
|
||||
})
|
||||
});
|
||||
|
||||
function log_search(){
|
||||
$.ajax({
|
||||
type: "GET",
|
||||
url: "/jlog/search/?env=online",
|
||||
|
@ -114,9 +167,9 @@
|
|||
$(".tab-content").html(data);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
$(document).ready(function(){
|
||||
$(document).ready(function(){
|
||||
$('.log_command').on('click',function(){
|
||||
var url = $(this).attr('href');
|
||||
var username = $('#username')[0].innerText;
|
||||
|
@ -142,7 +195,7 @@
|
|||
});
|
||||
|
||||
$('')
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue