{% extends 'base.html' %}
{% block content %}
{% include 'nav_cat_bar.html' %}
<style>
    .bootstrap-dialog-body  {
        background-color: rgba(0, 0, 0, 0);
    }
    .bootstrap-dialog-message {
        background-color: rgba(0, 0, 0, 0);
    }
    .pre-class {
        background-color: rgba(0, 0, 0, 1);
    }
    .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 class="active"><a href="/jlog/log_list/online/" class="text-center"><i class="fa fa-laptop"></i> 在线 </a></li>
                            <li><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/>
                    <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>
                                        <th class="text-center"> 实时监控 </th>
                                        <th class="text-center"> 阻断 </th>
                                    {% endifnotequal %}
                                    <th class="text-center"> 登录时间 </th>

                                </tr>
                            </thead>
                            <tbody>
                            {% for post in contacts.object_list %}
                                <tr class="gradeX">
                                    <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>
                                    {% 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"><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>
                                </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>
   $.fn.webSocket = function(opt){
    var st = {};
    st = $.extend(st,opt);
    var message = {};
    var $this = $(this);
    var genUid = function(){
        return new Date().getTime()+""+Math.floor(Math.random()*899+100);
    };
    var init = function(e){
        var socket = io.connect('ws://'+globalConfig.SOCKET_HOST);
        var node = $(e.target);
        message.id = genUid();
        message.filename = node.attr('filename');
        var username = $('#username')[0].innerText;
        var ip = $('#ip')[0].innerText;
        BootstrapDialog.show({message:function(){
            var option, exsit_message;
            var escapeString = function (html){
                var elem = document.createElement('div');
                var txt = document.createTextNode(html);
                elem.appendChild(txt);
                return elem.innerHTML;
            };
            var tag = $('<div id="log" style="height: 500px;overflow: auto;background-color: rgba(0, 0, 0, 0);"></div>');

            var username = "";
            var seed = "";
            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.emit('login', {userid:message.id, filename:message.filename,username:username,seed:seed});
            socket.on('message',function(obj){
                option = obj.option;
                console.log(option+'so')
                exsit_message = obj.content;
                console.log(obj.content)
                //去除log中的颜色控制字符
                var regx =  /\x1B\[([0-9]{1,3}((;[0-9]{1,3})*)?)?[m|K]/g;
//                tag.append('<p>'+escapeString(obj.content.replace(regx,''))+'</p>');
                if (option == 'new') {
//                    tag.append('<p style="margin: 2px">' + escapeString(obj.content) + '</p>');
                    tag.append('<p  style="margin: 2px">'+escapeString(obj.content.replace(regx,' '))+'</p>');
                } 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.emit('disconnect');
        }});
    };
        $this.on("click",function(e){
            init(e);
            return false;
        });
    };


   globalConfig = {
        SOCKET_HOST: "{{ web_socket_host }}"
   };
   $(".monitor").webSocket();

   function log_search(){
        $.ajax({
            type: "GET",
            url: "/jlog/search/?env=online",
            data: $("#search_form").serialize(),
            success: function (data) {
                $(".tab-content").html(data);
            }
        });
    }

   $(document).ready(function(){
       $('.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;
        });

       $("#search_input").keydown(function(e){
        if(e.keyCode==13){
            log_search()
            }
    });
   });



   function cut(num){
      var g_url = "/jlog/log_kill/?id="+num;
       $.ajax({
           type: "GET",
           url: g_url,
           success: window.open("/jlog/log_list/online/", "_self")
//           error: window.open(g_url, "_self")
       });

}
</script>
{% endblock %}