{% 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>
    function init(obj){
        if (window.location.protocol == 'https:') {
            var protocol = 'wss://';
        } else {
            var protocol = 'ws://';
        }

        var endpoint = protocol + document.URL.match(RegExp('//(.*?)/'))[1] + '/ws/monitor';
        var file_path = obj.attr('file_path');
        var socket = new WebSocket(endpoint + '?file_path=' + file_path);

        var term = new Terminal({
            cols: 80,
            rows: 24,
            screenKeys: false,
            handler: function(){return 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(){
            //服务器端认证
            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){
       var protocol = window.location.protocol;
       var endpoint = protocol + '//' +  document.URL.match(RegExp('//(.*?)/'))[1] + '/kill';
       if (login_type=='web'){
           var g_url = endpoint + '?id=' + num;
           console.log(g_url);
       } else {
           var g_url = "{% url 'log_kill' %}?id=" + num;
       }

       $.get(g_url+"&sessionid={{ session_id }}", function () {
           window.open("{% url 'log_list' 'online' %}", "_self")
       })
}
</script>
{% endblock %}