mirror of https://github.com/jumpserver/jumpserver
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
207 lines
9.6 KiB
207 lines
9.6 KiB
{% extends 'base.html' %}
|
|
{% block self_head_css_js %}
|
|
<link href="/static/css/plugins/datapicker/datepicker3.css" rel="stylesheet">
|
|
<link href="/static/css/plugins/chosen/chosen.css" rel="stylesheet">
|
|
<script src="/static/js/plugins/chosen/chosen.jquery.js"></script>
|
|
{% endblock %}
|
|
{% block content %}
|
|
{% include 'nav_cat_bar.html' %}
|
|
|
|
<style>
|
|
.bootstrap-dialog-body {
|
|
background-color: rgba(0, 0, 0, 0);
|
|
}
|
|
.bootstrap-dialog-message {
|
|
color: #00FF00;
|
|
}
|
|
.modal-content {
|
|
background-color: rgba(0, 0, 0, 0.6);
|
|
}
|
|
.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;
|
|
}
|
|
|
|
</style>
|
|
|
|
<div class="wrapper wrapper-content animated fadeInRight">
|
|
<div class="row">
|
|
<div class="col-lg-12">
|
|
<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">
|
|
<li><a href="/jlog/log_list/online/" class="text-center"><i class="fa fa-laptop"></i> 在线 </a></li>
|
|
<li class="active"><a href="/jlog/log_list/offline/" class="text-center"><i class="fa fa-bar-chart-o"></i> 历史记录 </a></li>
|
|
{# <li><a href="/jlog/search/" class="text-center"><i class="fa fa-bar-chart-o"></i> 详细搜索 </a></li>#}
|
|
|
|
</ul>
|
|
</div>
|
|
<br/>
|
|
<form class="form-inline" action="" method="get">
|
|
<div class="form-group" id="data_5">
|
|
<div class="form-group" id="data_5">
|
|
<div class="input-daterange input-group" id="datepicker">
|
|
<input type="text" class="input-sm form-control" style="width: 100px;" name="start" value="{{ date_seven_day }}">
|
|
<span class="input-group-addon">to</span>
|
|
<input type="text" class="input-sm form-control" style="width: 100px;" name="end" value="{{ date_now_str }}">
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<div class="input-group">
|
|
<select name="username" data-placeholder="用户名" class="chosen-select" multiple style="width:200px;" tabindex="2">
|
|
{% for username in username_all %}
|
|
<option value="{{ username }}"{% if username in username_list %}selected{% endif %}>{{ username }}</option>
|
|
{% endfor %}
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<div class="input-group">
|
|
<select name="host" data-placeholder="主机" class="chosen-select" multiple style="width:200px;" tabindex="4">
|
|
{% for ip in ip_all %}
|
|
<option value="{{ ip }}" {% if ip in host_list %}selected{% endif %}>{{ ip }}</option>
|
|
{% endfor %}
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<input id="cmd" name="cmd" placeholder="命令" type="text" class="form-control" value="{{ cmd }}" style="width: 200px;">
|
|
</div>
|
|
</div>
|
|
<button id='search_btn' type="submit" class="btn btn-sm btn-primary">
|
|
Search
|
|
</button>
|
|
</form>
|
|
<div class="tab-content">
|
|
<table class="table table-striped table-bordered table-hover ">
|
|
<thead>
|
|
<tr>
|
|
<th class="text-center"> 用户名 </th>
|
|
<th class="text-center"> 登录主机 </th>
|
|
<th class="text-center"> 来源IP </th>
|
|
{% ifnotequal session_role_id 0 %}
|
|
<th class="text-center"> 命令统计 </th>
|
|
{% endifnotequal %}
|
|
<th class="text-center"> 回放录像 </th>
|
|
<th class="text-center"> 登录时间 </th>
|
|
<th class="text-center"> 结束时间 </th>
|
|
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
|
|
{% for post in contacts.object_list %}
|
|
<tr class="gradeX">
|
|
<td class="text-center" id="username"> {{ post.user }} </td>
|
|
<td class="text-center" id="ip"> {{ post.host }} </td>
|
|
<td class="text-center" id="remote_ip"> {{ 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>
|
|
{% endifnotequal %}
|
|
<td class="text-center"><a value="/jlog/record/?id={{ post.id }}" class="log_record"> 回放 </a></td>
|
|
<td class="text-center" id="start_time"> {{ post.start_time|date:"Y-m-d H:i:s"}} </td>
|
|
<td class="text-center" id="end_time"> {{ post.end_time|date:"Y-m-d H:i:s" }} </td>
|
|
</tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table>
|
|
<div class="row">
|
|
<div class="col-sm-6">
|
|
</div>
|
|
{% include 'paginator.html' %}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<script>
|
|
$('.log_record').click(function(){
|
|
var url = $(this).attr('value');
|
|
window.open(url, '播放', 'height=500, width=910, top=89px, left=99px,toolbar=no,menubar=no,scrollbars=auto,resizeable=no,location=no,status=no');
|
|
return false;
|
|
});
|
|
|
|
$('.log_command').on('click',function(){
|
|
var url = $(this).attr('href');
|
|
var username = $('#username')[0].innerText;
|
|
var ip = $('#ip')[0].innerText;
|
|
var start_time = $('#start_time')[0].innerText;
|
|
var end_time = $('#end_time')[0].innerText;
|
|
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 class="text-info">' + end_time + '</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 log_search(){
|
|
$.ajax({
|
|
type: "GET",
|
|
url: "/jlog/search/?env=offline",
|
|
data: $("#search_form").serialize(),
|
|
success: function (data) {
|
|
$(".tab-content").html(data);
|
|
}
|
|
});
|
|
}
|
|
|
|
{# $("#search_input").keydown(function(e){#}
|
|
{# if(e.keyCode==13){#}
|
|
{# log_search()#}
|
|
{# }#}
|
|
{# });#}
|
|
|
|
$('#data_5 .input-daterange').datepicker({
|
|
dateFormat: 'yy-mm-dd',
|
|
keyboardNavigation: false,
|
|
forceParse: false,
|
|
autoclose: true
|
|
});
|
|
|
|
var config = {
|
|
'.chosen-select' : {},
|
|
'.chosen-select-deselect' : {allow_single_deselect:true},
|
|
'.chosen-select-no-single' : {disable_search_threshold:10},
|
|
'.chosen-select-no-results': {no_results_text:'Oops, nothing found!'},
|
|
'.chosen-select-width' : {width:"95%"}
|
|
};
|
|
for (var selector in config) {
|
|
$(selector).chosen(config[selector]);
|
|
}
|
|
|
|
</script>
|
|
{% endblock %}
|
|
{% block self_footer_js %}
|
|
<script src="/static/js/cropper/cropper.min.js"></script>
|
|
<script src="/static/js/datapicker/bootstrap-datepicker.js"></script>
|
|
{% endblock %} |