jumpserver/templates/jlog/log_online.html

225 lines
9.7 KiB
HTML
Raw Normal View History

2015-04-20 02:12:11 +00:00
{% extends 'base.html' %}
2015-12-19 09:26:34 +00:00
{% block self_head_css_js %}
<style>
.terminal {
border: #000 solid 5px;
font-family: "Monaco", "Microsoft Yahei", "DejaVu Sans Mono", "Liberation Mono", monospace;
2015-12-19 09:26:34 +00:00
font-size: 11px;
color: #f0f0f0;
background: rgba(0, 0, 0, 0.6);
width: 600px;
box-shadow: rgba(0, 0, 0, 0.6) 2px 2px 20px;
white-space: nowrap;
display: inline-block;
2015-12-19 09:26:34 +00:00
}
2015-12-19 09:26:34 +00:00
.reverse-video {
color: #000;
background: #f0f0f0;
}
2015-04-20 02:12:11 +00:00
.bootstrap-dialog-body {
background-color: rgba(0, 0, 0, 0);
}
.bootstrap-dialog-message {
2015-12-19 09:26:34 +00:00
color: #00FF00;
2015-04-20 02:12:11 +00:00
}
.pre-class {
background-color: rgba(0, 0, 0, 1);
}
.modal-content {
2015-12-19 09:26:34 +00:00
background-color: #000;
2015-04-20 02:12:11 +00:00
}
.modal-dialog {
background-color: rgba(0, 0, 0, 0);
width: 800px;
}
.modal-body {
background-color: rgba(0, 0, 0, 0);
}
.modal-header {
background-color: #FFFFFF;
}
2015-12-19 09:26:34 +00:00
</style>
<script src="/static/js/term.js"></script>
{% endblock %}
{% block content %}
{% include 'nav_cat_bar.html' %}
2015-04-20 02:12:11 +00:00
<div class="wrapper wrapper-content animated fadeInRight">
<div class="row">
2015-12-19 09:26:34 +00:00
<div class="col-sm-12">
2015-04-20 02:12:11 +00:00
<div class="ibox float-e-margins">
<div id="ibox-content" class="ibox-title">
<h5> 用户日志详细信息列表 </h5>
<div class="ibox-tools">
<a class="collapse-link">
<i class="fa fa-chevron-up"></i>
</a>
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i>
</a>
<a class="close-link">
<i class="fa fa-times"></i>
</a>
</div>
</div>
<div class="ibox-content">
<div class="panel-options">
<ul class="nav nav-tabs">
2015-12-19 09:26:34 +00:00
<li class="active"><a href="{% url 'log_list' 'online' %}" class="text-center"><i class="fa fa-laptop"></i> 在线 </a></li>
<li><a href="{% url 'log_list' 'offline' %}" class="text-center"><i class="fa fa-bar-chart-o"></i> 登录历史</a></li>
<li><a href="{% url 'log_list' 'exec' %}" class="text-center"><i class="fa fa-bar-chart-o"></i> 命令记录 </a></li>
<li><a href="{% url 'log_list' 'file' %}" class="text-center"><i class="fa fa-bar-chart-o"></i> 上传下载 </a></li>
<div class="" style="float: right">
2015-04-20 02:12:11 +00:00
<form id="search_form" method="get" action="" class="pull-right mail-search">
<div class="input-group">
2015-12-19 09:26:34 +00:00
<input type="text" class="form-control input-sm" id="keyword" name="keyword" value="{{ keyword }}" placeholder="Search">
2015-04-20 02:12:11 +00:00
<div class="input-group-btn">
2015-12-19 09:26:34 +00:00
<button id='search_btn' type="submit" class="btn btn-sm btn-primary">
-搜索-
2015-04-20 02:12:11 +00:00
</button>
</div>
</div>
</form>
2015-12-19 09:26:34 +00:00
</div>
2015-04-20 02:12:11 +00:00
</ul>
</div>
<div class="tab-content">
<table class="table table-striped table-bordered table-hover ">
<thead>
<tr>
2015-12-19 09:26:34 +00:00
<th class="text-center"> ID </th>
2015-04-20 02:12:11 +00:00
<th class="text-center"> 用户名 </th>
<th class="text-center"> 登录主机 </th>
<th class="text-center"> 来源IP </th>
2015-12-19 09:26:34 +00:00
<th class="text-center"> 登录方式 </th>
<th class="text-center"> 命令 </th>
<th class="text-center"> 实时监控 </th>
<th class="text-center"> 阻断 </th>
2015-04-20 02:12:11 +00:00
<th class="text-center"> 登录时间 </th>
</tr>
</thead>
<tbody>
{% for post in contacts.object_list %}
<tr class="gradeX">
2015-12-19 09:26:34 +00:00
<td class="text-center">{{ post.id }}</td>
2015-04-20 02:12:11 +00:00
<td id="username" class="text-center"> {{ post.user }} </td>
<td id="ip" class="text-center"> {{ post.host }} </td>
<td id="remote_ip" class="text-center"> {{ post.remote_ip }} </td>
2015-12-19 09:26:34 +00:00
<td class="text-center"> {{ post.login_type }} </td>
<td class="text-center"><a href="{% url 'log_history' %}?id={{ post.id }}" class="log_command"> 统计 </a></td>
2016-03-28 12:24:02 +00:00
<td class="text-center"><a class="monitor" monitor-id="{{ post.id }}" file_path="{{ post.log_path }}"> 监控 </a></td>
2015-12-19 09:26:34 +00:00
<td class="text-center"><input type="button" id="cut" class="btn btn-danger btn-xs" name="cut" value="阻断" onclick='cut("{{ post.pid }}", "{{ post.login_type }}")' /></td>
<td class="text-center" id="start_time"> {{ post.start_time|date:"Y-m-d H:i:s" }} </td>
2015-04-20 02:12:11 +00:00
</tr>
{% endfor %}
</tbody>
</table>
<div class="row">
<div class="col-sm-6"></div>
{% include 'paginator.html' %}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
2015-12-19 09:26:34 +00:00
function init(obj){
if (window.location.protocol == 'https:') {
var protocol = 'wss://';
} else {
var protocol = 'ws://';
}
2016-03-04 11:48:52 +00:00
var endpoint = protocol + document.URL.match(RegExp('//(.*?)/'))[1] + '/ws/monitor';
var monitorid = obj.attr('monitor-id');
2015-12-19 09:26:34 +00:00
var file_path = obj.attr('file_path');
2016-03-28 12:24:02 +00:00
{# var socket = new WebSocket(endpoint + '?id=' + monitorid);#}
var socket = new WebSocket(endpoint + '?file_path=' + file_path);
2015-12-19 09:26:34 +00:00
var term = new Terminal({
cols: 98,
rows: 28,
screenKeys: false,
handler: function(){return false}
2015-12-19 09:26:34 +00:00
});
2015-04-20 02:12:11 +00:00
2015-12-19 09:26:34 +00:00
var tag = $('<div id="term" style="height:500px; overflow: auto;background-color: rgba(0, 0, 0, 0);border: none"></div>');
term.open();
$('.terminal').hide();
term.resize(98, 28);
2015-12-19 09:26:34 +00:00
socket.onopen = function(evt){
{# socket.send('hello');#}
2015-12-19 09:26:34 +00:00
term.write('~.~ Connect WebSocket Success.~.~ \r\n');
};
window.onbeforeunload = function(){
socket.close()
};
var username = obj.closest('tr').find('#username').text();
var ip = obj.closest('tr').find('#ip').text();
BootstrapDialog.show({message: function(){
//服务器端认证
window.setTimeout(function(){
$('.terminal').detach().appendTo('#term');
$('.terminal').show();
2015-12-19 09:26:34 +00:00
socket.onmessage = function(evt){
term.write(evt.data);
2015-12-19 09:26:34 +00:00
}}, 1000);
return tag[0];
2015-04-20 02:12:11 +00:00
} ,
title:'Jumpserver实时监控 '+' 登录用户名: '+'<span class="text-info">'+username+'</span>'+' 登录主机: '+'<span class="text-info">'+ip,
onhide:function(){
2015-12-19 09:26:34 +00:00
socket.close();
2015-04-20 02:12:11 +00:00
}});
}
2015-12-19 09:26:34 +00:00
$(document).ready(function(){
$('.monitor').click(function(){
init($(this));
2015-04-20 02:12:11 +00:00
});
2015-12-19 09:26:34 +00:00
$('.log_command').on('click',function(){
var url = $(this).attr('href');
var username = $(this).closest('tr').find('#username').text();
var ip = $(this).closest('tr').find('#ip').text();
var start_time = $(this).closest('tr').find('#start_time').text();
var div_username = ' 用户名: '+'<span class="text-info">'+username+'' + '</span>';
var div_ip = ' 主机: '+'<span class="text-info">' + ip + '</span>';
var div_time = ' 开始时间: ' + '<span class="text-info">'+start_time +'</span>' + '</span>';
var title = 'JumpServer命令统计 '+ div_username + div_ip + div_time;
$.ajax({url:url,
success:function(data){
var tag = $('<div style="height: 500px;overflow: auto;background-color: rgba(0, 0, 0, 0);"></div>').html(data.replace(/\n/g,"<br />"));
BootstrapDialog.show({title: title, message:tag[0]});
}});
return false;
});
});
function cut(num, login_type){
var protocol = window.location.protocol;
var endpoint = protocol + '//' + document.URL.match(RegExp('//(.*?)/'))[1] + '/kill';
2015-12-19 09:26:34 +00:00
if (login_type=='web'){
var g_url = endpoint + '?id=' + num;
console.log(g_url);
2015-12-19 09:26:34 +00:00
} else {
2016-02-25 12:45:48 +00:00
var g_url = "{% url 'log_kill' %}?id=" + num;
2015-12-19 09:26:34 +00:00
}
2015-04-20 02:12:11 +00:00
2016-02-25 13:00:48 +00:00
$.get(g_url+"&sessionid={{ session_id }}", function () {
window.open("{% url 'log_list' 'online' %}", "_self")
})
2015-04-20 02:12:11 +00:00
}
</script>
{% endblock %}