{% extends 'base.html' %} {% block self_head_css_js %} <style> .terminal { border: #000 solid 5px; font-family: "Monaco", "DejaVu Sans Mono", "Liberation Mono", monospace; 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; } .reverse-video { color: #000; background: #f0f0f0; } .bootstrap-dialog-body { background-color: rgba(0, 0, 0, 0); } .bootstrap-dialog-message { color: #00FF00; } .pre-class { background-color: rgba(0, 0, 0, 1); } .modal-content { background-color: #000; } .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> <script src="/static/js/term.js"></script> {% endblock %} {% block content %} {% include 'nav_cat_bar.html' %} <div class="wrapper wrapper-content animated fadeInRight"> <div class="row"> <div class="col-sm-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 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"> <form id="search_form" method="get" action="" class="pull-right mail-search"> <div class="input-group"> <input type="text" class="form-control input-sm" id="keyword" name="keyword" value="{{ keyword }}" placeholder="Search"> <div class="input-group-btn"> <button id='search_btn' type="submit" class="btn btn-sm btn-primary"> -搜索- </button> </div> </div> </form> </div> </ul> </div> <div class="tab-content"> <table class="table table-striped table-bordered table-hover "> <thead> <tr> <th class="text-center"> ID </th> <th class="text-center"> 用户名 </th> <th class="text-center"> 登录主机 </th> <th class="text-center"> 来源IP </th> <th class="text-center"> 登录方式 </th> <th class="text-center"> 命令 </th> <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">{{ post.id }}</td> <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> <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> <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 }}", "{{ post.login_type }}")' /></td> <td class="text-center" id="start_time"> {{ post.start_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 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');#} {# })#} {# });#} function init(obj){ var protocol = "ws://"; if (window.location.protocol == 'https:') { protocol = 'wss://'; } var file_path = obj.attr('file_path'); var wsUri = protocol + '{{ web_monitor_uri }}'; var socket = new WebSocket(wsUri + '?file_path=' + file_path); var term = new Terminal({ cols: 80, rows: 24, screenKeys: false }); var tag = $('<div id="term" style="height:500px; overflow: auto;background-color: rgba(0, 0, 0, 0);border: none"></div>'); term.open(); term.resize(80, 24); socket.onopen = function(evt){ socket.send('hello'); 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(){ //服务器端认证 {# socket.send('login', {userid:message.id, filename:message.filename,username:username,seed:seed});#} window.setTimeout(function(){ $('.terminal').detach().appendTo('#term'); socket.onmessage = function(evt){ term.write(evt.data); }}, 1000); 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)); }); $('.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){ console.log(login_type); if (login_type=='web'){ var g_url = '{{ web_kill_uri }}' + '?id=' + num; } else { var g_url = "{% url 'log_kill' %} }?id=" + num; } $.ajax({ type: "GET", url: g_url+"&sessionid={{ session_id }}", success: window.open("{% url 'log_list' 'online' %}", "_self") }); } </script> {% endblock %}