# coding:utf-8
from django.db.models import Q
from django.template import RequestContext
from django.shortcuts import render_to_response

from jumpserver.api import *
from jasset.views import httperror
from django.http import HttpResponseNotFound

CONF = ConfigParser()
CONF.read('%s/jumpserver.conf' % BASE_DIR)


def get_user_info(request, offset):
    """ 获取用户信息及环境 """
    env_dic = {'online': 0, 'offline': 1}
    env = env_dic[offset]
    keyword = request.GET.get('keyword', '')
    user_info = get_session_user_info(request)
    user_id, username = user_info[0:2]
    dept_id, dept_name = user_info[3:5]
    ret = [request, keyword, env, username, dept_name]

    return ret


def get_user_log(ret_list):
    """ 获取不同类型用户日志记录 """
    request, keyword, env, username, dept_name = ret_list
    post_all = Log.objects.filter(is_finished=env).order_by('-start_time')
    post_keyword_all = Log.objects.filter(Q(user__contains=keyword) |
                                          Q(host__contains=keyword)) \
        .filter(is_finished=env).order_by('-start_time')

    if is_super_user(request):
        if keyword:
            posts = post_keyword_all
        else:
            posts = post_all

    elif is_group_admin(request):
        if keyword:
            posts = post_keyword_all.filter(dept_name=dept_name)
        else:
            posts = post_all.filter(dept_name=dept_name)

    elif is_common_user(request):
        if keyword:
            posts = post_keyword_all.filter(user=username)
        else:
            posts = post_all.filter(user=username)

    return posts


@require_login
def log_list(request, offset):
    """ 显示日志 """
    header_title, path1, path2 = u'查看日志', u'查看日志', u'在线用户'
    keyword = request.GET.get('keyword', '')
    web_socket_host = CONF.get('websocket', 'web_socket_host')
    posts = get_user_log(get_user_info(request, offset))
    contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)

    return render_to_response('jlog/log_%s.html' % offset, locals(), context_instance=RequestContext(request))


@require_admin
def log_kill(request):
    """ 杀掉connect进程 """
    pid = request.GET.get('id', '')
    log = Log.objects.filter(pid=pid)
    if log:
        log = log[0]
        dept_name = log.dept_name
        deptname = get_session_user_info(request)[4]
        if is_group_admin(request) and dept_name != deptname:
            return httperror(request, u'Kill失败, 您无权操作!')
        try:
            os.kill(int(pid), 9)
        except OSError:
            pass
        Log.objects.filter(pid=pid).update(is_finished=1, end_time=datetime.datetime.now())
        return render_to_response('jlog/log_offline.html', locals(), context_instance=RequestContext(request))
    else:
        return HttpResponseNotFound(u'没有此进程!')


@require_login
def log_history(request):
    """ 命令历史记录 """
    log_id = request.GET.get('id', 0)
    log = Log.objects.filter(id=int(log_id))
    if log:
        log = log[0]
        dept_name = log.dept_name
        deptname = get_session_user_info(request)[4]
        if is_group_admin(request) and dept_name != deptname:
            return httperror(request, '查看失败, 您无权查看!')

        elif is_common_user(request):
            return httperror(request, '查看失败, 您无权查看!')

        log_his = "%s.his" % log.log_path
        if os.path.isfile(log_his):
            f = open(log_his)
            content = f.read()
            return HttpResponse(content)
        else:
            return httperror(request, '无日志记录, 请查看日志处理脚本是否开启!')


@require_login
def log_search(request):
    """ 日志搜索 """
    offset = request.GET.get('env', '')
    keyword = request.GET.get('keyword', '')
    posts = get_user_log(get_user_info(request, offset))
    contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)
    return render_to_response('jlog/log_search.html', locals(), context_instance=RequestContext(request))
