diff --git a/jasset/urls.py b/jasset/urls.py index 3b8fd120dbb2942305305d2a86507417bb4a1be5..a859e209ac7edad680139dbdf36328581f7de76a 100644 --- a/jasset/urls.py +++ b/jasset/urls.py @@ -5,15 +5,18 @@ from jasset.views import * urlpatterns = patterns('', url(r'^$', index), url(r'^host_add/$', jadd_host), + url(r'^host_add_multi/$', jadd_host_multi), url(r'^host_list/$', jlist_host), url(r"^(\d+.\d+.\d+.\d+)/$",jlist_ip), url(r'^idc_add/$', jadd_idc), url(r'^idc_list/$', jlist_idc), + url(r'^idc_detail/(\d+)$', idc_detail), url(r'^idc_del/(\d+)/$', idc_del), url(r'^group_add/$', jadd_group), url(r'^group_list/$', jlist_group), + url(r'^group_detail/(\d)/$', group_detail), url(r'^group_del/(\d+)/$', group_del), - url(r'^host_del/(\d+)/$', host_del), + url(r'^host_del/(\w+)/$', host_del), url(r'^host_edit/(\d+)$', host_edit), url(r'^host_edit/batch/$', batch_host_edit), url(r'^test/$', test), diff --git a/jasset/views.py b/jasset/views.py index f50f1e58369eb67d76c1a00352b8bb9a9d6caefa..81a0c7dd3d8d59505b6b9188dfc45118eed82668 100644 --- a/jasset/views.py +++ b/jasset/views.py @@ -8,7 +8,6 @@ from models import IDC, Asset, BisGroup from juser.models import UserGroup from connect import PyCrypt, KEY from jumpserver.views import jasset_group_add, jasset_host_edit -from jperm.models import Perm cryptor = PyCrypt(KEY) @@ -35,27 +34,25 @@ def jadd_host(request): j_comment = request.POST.get('j_comment') j_idc = IDC.objects.get(name=j_idc) + all_group = BisGroup.objects.get(name='ALL') for group in j_group: c = BisGroup.objects.get(name=group) groups.append(c) + groups.append(all_group) if Asset.objects.filter(ip=str(j_ip)): - emg = u'该IPå·²å˜åœ¨!' + emg = u'该IP %s å·²å˜åœ¨!' %j_ip return render_to_response('jasset/host_add.html', locals(), context_instance=RequestContext(request)) if j_type == 'M': j_user = request.POST.get('j_user') j_password = cryptor.encrypt(request.POST.get('j_password')) - j_root = request.POST.get('j_root') - j_passwd = cryptor.encrypt(request.POST.get('j_passwd')) a = Asset(ip=j_ip, port=j_port, login_type=j_type, idc=j_idc, is_active=int(j_active), comment=j_comment, username_common=j_user, - password_common=j_password, - username_super=j_root, - password_super=j_passwd,) + password_common=j_password) else: a = Asset(ip=j_ip, port=j_port, login_type=j_type, idc=j_idc, @@ -66,13 +63,63 @@ def jadd_host(request): a.bis_group = groups a.save() smg = u'主机 %s æ·»åŠ æˆåŠŸ' %j_ip + return render_to_response('jasset/host_add.html', locals(), context_instance=RequestContext(request)) + +def jadd_host_multi(request): + header_title, path1, path2 = u'æ‰¹é‡æ·»åŠ ä¸»æœº | Add Hosts', u'资产管ç†', u'æ‰¹é‡æ·»åŠ ä¸»æœº' + login_types = {'LDAP': 'L', 'SSH_KEY': 'S', 'PASSWORD': 'P', 'MAP': 'M'} + if request.method == 'POST': + multi_hosts = request.POST.get('j_multi').split('\n') + for host in multi_hosts: + if host == '': + break + groups = [] + j_ip, j_port, j_type, j_idc, j_group, j_user_group, j_active, j_comment = host.split() + j_idc = IDC.objects.get(name=j_idc) + j_type = login_types[j_type] + all_group = BisGroup.objects.get(name='ALL') + j_group = j_group.split(',') + for group in j_group: + g = group.strip('[]') + print g + c = BisGroup.objects.get(name=g) + groups.append(c) + groups.append(all_group) + + if Asset.objects.filter(ip=str(j_ip)): + emg = u'该IP %s å·²å˜åœ¨!' %j_ip + return render_to_response('jasset/host_add_multi.html', locals(), context_instance=RequestContext(request)) + + if j_type == 'M': + j_user = request.POST.get('j_user') + j_password = cryptor.encrypt(request.POST.get('j_password')) + a = Asset(ip=j_ip, port=j_port, + login_type=j_type, idc=j_idc, + is_active=int(j_active), + comment=j_comment, + username_common=j_user, + password_common=j_password) + else: + a = Asset(ip=j_ip, port=j_port, + login_type=j_type, idc=j_idc, + is_active=int(j_active), + comment=j_comment) + jasset_group_add(j_ip, j_ip, 'P') + a.save() + a.bis_group = groups + a.save() + smg = u'æ‰¹é‡æ·»åŠ æ·»åŠ æˆåŠŸ' + return HttpResponseRedirect('/jasset/host_list/') + return render_to_response('jasset/host_add_multi.html', locals(), context_instance=RequestContext(request)) + + def batch_host_edit(request): if request.method == 'POST': len_table = request.POST.get('len_table') - print len_table for i in range(int(len_table)): + j_id = "editable["+str(i)+"][j_id]" j_ip = "editable["+str(i)+"][j_ip]" j_port = "editable["+str(i)+"][j_port]" j_idc = "editable["+str(i)+"][j_idc]" @@ -81,6 +128,7 @@ def batch_host_edit(request): j_active = "editable["+str(i)+"][j_active]" j_comment = "editable["+str(i)+"][j_comment]" + j_id = request.POST.get(j_id).strip() j_ip = request.POST.get(j_ip).strip() j_port = request.POST.get(j_port).strip() j_idc = request.POST.get(j_idc).strip() @@ -90,7 +138,7 @@ def batch_host_edit(request): j_comment = request.POST.get(j_comment).strip() print j_ip - jasset_host_edit(j_ip, j_idc, j_port, j_type, j_group, j_active, j_comment) + jasset_host_edit(j_id, j_ip, j_idc, j_port, j_type, j_group, j_active, j_comment) return render_to_response('jasset/host_list.html') @@ -100,7 +148,7 @@ def jlist_host(request): login_types = {'L': 'LDAP', 'S': 'SSH_KEY', 'P': 'PASSWORD', 'M': 'MAP'} posts = contact_list = Asset.objects.all().order_by('ip') print posts - p = paginator = Paginator(contact_list, 5) + p = paginator = Paginator(contact_list, 20) try: page = int(request.GET.get('page', '1')) except ValueError: @@ -113,16 +161,23 @@ def jlist_host(request): return render_to_response('jasset/host_list.html', locals(), context_instance=RequestContext(request)) + def host_del(request, offset): - len_list = request.POST.get("len_list") - for i in range(int(len_list)): - key = "id_list["+str(i)+"]" - print key - jid = request.POST.get(key) - print jid + print offset + if offset == 'multi': + len_list = request.POST.get("len_list") + for i in range(int(len_list)): + key = "id_list["+str(i)+"]" + print key + jid = request.POST.get(key) + print jid + Asset.objects.filter(id=jid).delete() + else: + jid = int(offset) Asset.objects.filter(id=jid).delete() return HttpResponseRedirect('/jasset/host_list/') + def host_edit(request, offset): actives = {1: u'激活', 0: u'ç¦ç”¨'} login_types = {'L': 'LDAP', 'S': 'SSH_KEY', 'P': 'PASSWORD', 'M': 'MAP'} @@ -132,7 +187,7 @@ def host_edit(request, offset): egroup = BisGroup.objects.filter(type='A') for g in Asset.objects.get(id=int(offset)).bis_group.all(): e_group.append(g) - post = Asset.objects.get(id = int(offset)) + post = Asset.objects.get(id=int(offset)) if request.method == 'POST': j_ip = request.POST.get('j_ip') j_idc = request.POST.get('j_idc') @@ -142,27 +197,24 @@ def host_edit(request, offset): j_active = request.POST.get('j_active') j_comment = request.POST.get('j_comment') j_idc = IDC.objects.get(name=j_idc) + print j_group for group in j_group: c = BisGroup.objects.get(name=group) groups.append(c) - a = Asset.objects.get(ip=int(offset)) + a = Asset.objects.get(id=int(offset)) if j_type == 'M': j_user = request.POST.get('j_user') j_password = cryptor.encrypt(request.POST.get('j_password')) - j_root = request.POST.get('j_root') - j_passwd = cryptor.encrypt(request.POST.get('j_passwd')) a.ip = j_ip a.port = j_port a.login_type = j_type a.idc = j_idc a.is_active = j_active a.comment = j_comment - a.username_common = j_user - a.password_common = j_password - a.username_super = j_root - a.password_super = j_passwd + a.username = j_user + a.password = j_password else: a.ip = j_ip a.port = j_port @@ -183,9 +235,10 @@ def host_edit(request, offset): def jlist_ip(request, offset): header_title, path1, path2 = u'ä¸»æœºè¯¦ç»†ä¿¡æ¯ | Host Detail.', u'资产管ç†', u'主机详情' print offset - post = contact_list = Asset.objects.get(ip = str(offset)) + post = contact_list = Asset.objects.get(ip=str(offset)) return render_to_response('jasset/jlist_ip.html', locals(), context_instance=RequestContext(request)) + def jadd_idc(request): header_title, path1, path2 = u'æ·»åŠ IDC | Add IDC', u'资产管ç†', u'æ·»åŠ IDC' if request.method == 'POST': @@ -204,14 +257,16 @@ def jadd_idc(request): def jlist_idc(request): - header_title, path1, path2 = u'查看IDC | List Host', u'资产管ç†', u'查看IDC' + header_title, path1, path2 = u'查看IDC | List IDC', u'资产管ç†', u'查看IDC' posts = IDC.objects.all().order_by('id') return render_to_response('jasset/idc_list.html', locals(), context_instance=RequestContext(request)) + def idc_del(request, offset): IDC.objects.filter(id=offset).delete() return HttpResponseRedirect('/jasset/idc_list/') + def jadd_group(request): header_title, path1, path2 = u'æ·»åŠ ä¸»æœºç»„ | Add Group', u'资产管ç†', u'æ·»åŠ ä¸»æœºç»„' if request.method == 'POST': @@ -229,13 +284,53 @@ def jadd_group(request): def jlist_group(request): - header_title, path1, path2 = u'查看业务组 | Add Group', u'资产管ç†', u'查看业务组' + header_title, path1, path2 = u'查看主机组 | List Group', u'资产管ç†', u'查看主机组' posts = BisGroup.objects.filter(type='A').order_by('id') return render_to_response('jasset/group_list.html', locals(), context_instance=RequestContext(request)) + +def group_detail(request, offset): + header_title, path1, path2 = u'主机组详情 | Group Detail', u'资产管ç†', u'主机组详情' + login_types = {'L': 'LDAP', 'S': 'SSH_KEY', 'P': 'PASSWORD', 'M': 'MAP'} + group_name = BisGroup.objects.get(id=offset).name + b = BisGroup.objects.get(id=offset) + posts = contact_list = Asset.objects.filter(bis_group=b).order_by('ip') + p = paginator = Paginator(contact_list, 5) + try: + page = int(request.GET.get('page', '1')) + except ValueError: + page = 1 + + try: + contacts = paginator.page(page) + except (EmptyPage, InvalidPage): + contacts = paginator.page(paginator.num_pages) + return render_to_response('jasset/group_detail.html', locals(), context_instance=RequestContext(request)) + + +def idc_detail(request, offset): + header_title, path1, path2 = u'主机组详情 | Group Detail', u'资产管ç†', u'主机组详情' + login_types = {'L': 'LDAP', 'S': 'SSH_KEY', 'P': 'PASSWORD', 'M': 'MAP'} + idc_name = IDC.objects.get(id=offset).name + b = IDC.objects.get(id=offset) + posts = contact_list = Asset.objects.filter(idc=b).order_by('ip') + p = paginator = Paginator(contact_list, 5) + try: + page = int(request.GET.get('page', '1')) + except ValueError: + page = 1 + + try: + contacts = paginator.page(page) + except (EmptyPage, InvalidPage): + contacts = paginator.page(paginator.num_pages) + return render_to_response('jasset/idc_detail.html', locals(), context_instance=RequestContext(request)) + + def group_del(request, offset): BisGroup.objects.filter(id=offset).delete() return HttpResponseRedirect('/jasset/group_list/') + def test(request): return render_to_response('jasset/test.html', locals()) diff --git a/jlog/urls.py b/jlog/urls.py index 75f4111fec643df8adae6552f97fe1c91f4dbb67..55a17bd7b71eb50096be032daa5df215585d78ab 100644 --- a/jlog/urls.py +++ b/jlog/urls.py @@ -4,6 +4,6 @@ from jlog.views import * urlpatterns = patterns('', url(r'^$', jlog_list), - url(r'^log_list/$', jlog_list), + url(r'^log_list/(\w+)/$', jlog_list), url(r'^log_kill/(\d+)', jlog_kill), ) diff --git a/jlog/views.py b/jlog/views.py index 6ce5714b5634d7cc0f87c6ecb2d1b83dafefbdad..af4758224799e5cc347bc4b41edc76f088cd4355 100644 --- a/jlog/views.py +++ b/jlog/views.py @@ -13,12 +13,14 @@ from jlog.models import Log CONF = ConfigParser.ConfigParser() CONF.read('%s/jumpserver.conf' % BASE_DIR) -def jlog_list(request): + +def jlog_list(request, offset='online'): header_title, path1, path2 = u'查看日志 | Log List.', u'查看日志', u'日志列表' + web_socket_host = CONF.get('websocket', 'web_socket_host') online = Log.objects.filter(is_finished=0) offline = Log.objects.filter(is_finished=1) - web_socket_host = CONF.get('websocket', 'web_socket_host') - return render_to_response('jlog/log_list.html',locals()) + + return render_to_response('jlog/log_list.html', locals()) def jlog_kill(request, offset): @@ -26,4 +28,4 @@ def jlog_kill(request, offset): if pid: os.kill(int(pid), 9) Log.objects.filter(pid=pid).update(is_finished=1, end_time=datetime.now()) - return render_to_response('jlog/log_list.html', locals()) \ No newline at end of file + return HttpResponseRedirect('jlog/log_list.html', locals()) \ No newline at end of file diff --git a/jumpserver/templatetags/mytags.py b/jumpserver/templatetags/mytags.py index 43bfca702463d9ecc9f6c88175c4f860f772f774..20ba40fd4d8c86eff6a3629de538ded14f18b44b 100644 --- a/jumpserver/templatetags/mytags.py +++ b/jumpserver/templatetags/mytags.py @@ -5,6 +5,7 @@ from django import template from django.db.models import Q from juser.models import User, UserGroup from jperm.views import perm_user_asset +from jasset.models import BisGroup register = template.Library() @@ -85,6 +86,15 @@ def group_type_to_str(type_name): } return group_types.get(type_name) + @register.filter(name='perm_asset_count') def perm_asset_count(user_id): return len(perm_user_asset(user_id)) + + +@register.filter(name='filter_private') +def filter_private(group): + agroup = [] + p = BisGroup.objects.get(name='ALL') + [agroup.append(g) for g in group if g != p] + return agroup diff --git a/jumpserver/views.py b/jumpserver/views.py index b19e7364405d5a3809aad23c7f89d2dd2cf38276..44e5d1f5d1e8bb70278b57d7f581bd5a7c5a09ac 100644 --- a/jumpserver/views.py +++ b/jumpserver/views.py @@ -30,17 +30,23 @@ def jasset_group_add(name, comment, type): BisGroup.objects.create(name=name, comment=comment, type=type) smg = u'业务组%sæ·»åŠ æˆåŠŸ' %name -def jasset_host_edit(j_ip, j_idc, j_port, j_type, j_group, j_active, j_comment): + +def jasset_host_edit(j_id, j_ip, j_idc, j_port, j_type, j_group, j_active, j_comment): + print 'ok' groups = [] is_active = {u'是': '1', u'å¦': '2'} login_types = {'LDAP': 'L', 'SSH_KEY': 'S', 'PASSWORD': 'P', 'MAP': 'M'} - for group in j_group: + for group in j_group[0].split(): + print group.strip() c = BisGroup.objects.get(name=group.strip()) groups.append(c) j_type = login_types[j_type] + print j_type j_idc = IDC.objects.get(name=j_idc) - a = Asset.objects.get(ip=str(j_ip)) - + print j_idc + print + a = Asset.objects.get(id=j_id) + print '123' if j_type == 'M': a.ip = j_ip a.port = j_port @@ -48,10 +54,8 @@ def jasset_host_edit(j_ip, j_idc, j_port, j_type, j_group, j_active, j_comment): a.idc = j_idc a.is_active = j_active a.comment = j_comment - a.username_common = j_user - a.password_common = j_password - a.username_super = j_root - a.password_super = j_passwd + a.username = j_user + a.password = j_password else: a.ip = j_ip a.port = j_port @@ -59,7 +63,6 @@ def jasset_host_edit(j_ip, j_idc, j_port, j_type, j_group, j_active, j_comment): a.login_type = j_type a.is_active = is_active[j_active] a.comment = j_comment - a.save() a.bis_group = groups a.save() diff --git a/templates/head_script.html b/templates/head_script.html index 4e4716ded475aaf5a502dd665819f28bb4f594b0..a2d50f12e37145dd1c4b3fc3ac5c736839091554 100644 --- a/templates/head_script.html +++ b/templates/head_script.html @@ -1,48 +1,54 @@ <script src="/static/js/jquery-2.1.1.js"></script> <script src="/static/js/bootstrap.min.js"></script> - -<script> - - function selectAll(){ - var checklist = document.getElementsByName ("selected"); - if(document.getElementById("select_all").checked) - { - for(var i=0;i<checklist.length;i++) - { - checklist[i].checked = 1; - } - }else{ - for(var j=0;j<checklist.length;j++) - { - checklist[j].checked = 0; - } - } - - } - - function move(from, to) { - $("#"+from+" option").each(function(){ - if ( $(this).prop("selected") == true ) { - $("#"+to).append(this); - } - }); - } - - function move_all(from, to){ - $("#"+from).children().each(function(){ - $("#"+to).append(this); - }); - } +<script src="/static/js/base.js"></script> +<!--<script>--> + <!--$(document).ready(function(){--> + <!--$('.i-checks').iCheck({--> + <!--checkboxClass: 'icheckbox_square-green',--> + <!--radioClass: 'iradio_square-green'--> + <!--});--> + <!--});--> + + <!--function selectAll(){--> + <!--var checklist = document.getElementsByName ("selected");--> + <!--if(document.getElementById("select_all").checked)--> + <!--{--> + <!--for(var i=0;i<checklist.length;i++)--> + <!--{--> + <!--checklist[i].checked = 1;--> + <!--}--> + <!--}else{--> + <!--for(var j=0;j<checklist.length;j++)--> + <!--{--> + <!--checklist[j].checked = 0;--> + <!--}--> + <!--}--> + + <!--}--> + + <!--function move(from, to) {--> + <!--$("#"+from+" option").each(function(){--> + <!--if ( $(this).prop("selected") == true ) {--> + <!--$("#"+to).append(this);--> + <!--}--> + <!--});--> + <!--}--> + + <!--function move_all(from, to){--> + <!--$("#"+from).children().each(function(){--> + <!--$("#"+to).append(this);--> + <!--});--> + <!--}--> </script> -<!-- validator js --> -<script src="/static/js/validator/jquery.validator.js"></script> -<script src="/static/js/validator/zh_CN.js"></script> + <!-- pop windows --> <script src="/static/js/jquery.colorbox.js"></script> - +<!-- validator js --> +<script src="/static/js/validator/jquery.validator.js"></script> +<script src="/static/js/validator/zh_CN.js"></script> diff --git a/templates/jasset/group_detail.html b/templates/jasset/group_detail.html new file mode 100644 index 0000000000000000000000000000000000000000..650404d06a2fb7dc98951de218b96353ee29e80c --- /dev/null +++ b/templates/jasset/group_detail.html @@ -0,0 +1,151 @@ +{% extends 'base.html' %} +{% load mytags %} +{% block content %} +{% include 'nav_cat_bar.html' %} + +<div class="wrapper wrapper-content animated fadeInRight"> + <div class="row"> + <div class="col-lg-12"> + <div class="ibox float-e-margins" id="all"> + <div class="ibox-title"> + <h5> 主机组<span class="text-info">{{ group_name }}</span>详细信æ¯åˆ—表 </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> + <ul class="dropdown-menu dropdown-user"> + <li><a href="#">未å¯ç”¨ 1</a> + </li> + <li><a href="#">未å¯ç”¨ 2</a> + </li> + </ul> + <a class="close-link"> + <i class="fa fa-times"></i> + </a> + </div> + </div> + + <div class="ibox-content"> + <div class=""> + <a target="_blank" href="/jasset/host_add" class="btn btn-sm btn-primary "> æ·»åŠ </a> + </div> + + <form id="contents_form" name="contents_form"> + <table class="table table-striped table-bordered table-hover " id="editable" name="editable"> + <thead> + <tr> + <th class="text-center"><input id="checkall" type="checkbox" class="i-checks" name="checkall" value="checkall" data-editable='false' onclick="check_all('contents_form')"></th> + <th class="text-center" name="j_ip"> IPåœ°å€ </th> + <th class="text-center"> 端å£å· </th> + <th class="text-center" name="j_type"> ç™»å½•æ–¹å¼ </th> + <th class="text-center" name="j_idc"> 所属IDC </th> + <th class="text-center"> 所属业务组 </th> + <th class="text-center"> æ˜¯å¦æ¿€æ´» </th> + <th class="text-center" name="j_time"> æ·»åŠ æ—¶é—´ </th> + <th class="text-center" name="j_comment"> 备注 </th> + <th class="text-center"> æ“作 </th> + </tr> + </thead> + <tbody> + {% for post in contacts.object_list %} + <tr class="gradeX"> + <td class="text-center" name="j_id" value="{{ post.id }}" data-editable='false'><input name="id" value="{{ post.id }}" type="checkbox" class="i-checks"></td> + <td class="text-center" name="j_ip"> {{ post.ip }} </td> + <td class="text-center" name="j_port"> {{ post.port }} </td> + <td class="text-center" name="j_type"> {{ login_types|get_item:post.login_type }} </td> + <td class="text-center" name="j_idc"> {{ post.idc.name }} </td> + <td class="text-center" name="j_group">{% for group in post.bis_group.all %} {{ group }} {% endfor %}</td> + <td class="text-center" name="j_active"> {{ post.is_active|bool2str }} </td> + <td class="text-center"> {{ post.date_added|date:"Y-m-d H:i:s" }} </td> + <td class="text-center" name="j_comment"> {{ post.comment }} </td> + <td class="text-center" data-editable='false'> + <a href="/jasset/{{ post.ip }}/" class="iframe btn btn-xs btn-primary">详情</a> + <a href="/jasset/host_edit/{{ post.id }}" class="btn btn-xs btn-info">编辑</a> + <a href="/jasset/host_del/{{ post.id }}" class="btn btn-xs btn-danger">åˆ é™¤</a> + </td> + </tr> + {% endfor %} + </tbody> + </table> + <div class="row"> + <div class="col-sm-6"> + <input type="button" id="del_button" class="btn btn-danger btn-sm" name="del_button" value="åˆ é™¤" onclick="del('contents_form')" /> + <input type="button" id="alter_button" class="btn btn-warning btn-sm" name="alter_button" value="修改" onclick="alter('contents_form')" /> + </div> + <div class="col-sm-6"> + <div class="dataTables_paginate paging_simple_numbers" id="editable_paginate"> + <ul class="pagination" style="margin-top: 0; float: right"> + + {% if contacts.has_previous %} + <li><a href="?page={{ contacts.previous_page_number }}">«</a></li> + {% endif %} + + {% for page in p.page_range %} + {% ifequal offset1 page %} + <li class="active"><a href="?page={{ page }}" title="第{{ page }}页">{{ page }}</a></li> + {% else %} + <li><a href="?page={{ page }}" title="第{{ page }}页">{{ page }}</a></li> + {% endifequal %} + {% endfor %} + {% if contacts.has_next %} + <li><a href="?page={{ contacts.next_page_number }}">»</a></li> + {% endif %} + </ul> + </div> + </div> + </div> + </form> + </div> + </div> + </div> + </div> +</div> + +<script> + $(document).ready(function(){ + $(".iframe").colorbox({iframe:true, width:"70%", height:"70%"}); + $('#editable').editableTableWidget(); + }); + + function alter(form) { + selectData = GetTableDataBox(); + if (selectData[1] != 0) { + $.ajax({ + type: "post", + url: "/jasset/host_edit/batch/", + data: {"editable": selectData[0], "len_table": selectData[1]}, + success: function (data) { + alert("修改æˆåŠŸ"); + window.open("/jasset/host_list/", "_self"); + } + }); + } + } + + function del(form) { + var checkboxes = document.getElementById(form); + var id_list = {}; + var j = 0; + for (var i = 0; i < checkboxes.elements.length; i++) { + if (checkboxes.elements[i].type == "checkbox" && checkboxes.elements[i].checked == true && checkboxes.elements[i].value != "checkall") { + id_list[j] = checkboxes.elements[i].value; + j++; + } + } + if (confirm("ç¡®å®šåˆ é™¤")) { + $.ajax({ + type: "POST", + url: "/jasset/host_del/", + data: {"id_list": id_list, "len_list": j}, + success: function (data) { + window.open("/jasset/host_list/", "_self"); + } + }); + } + } +</script> + +{% endblock %} \ No newline at end of file diff --git a/templates/jasset/group_list.html b/templates/jasset/group_list.html index bd57a5abfa56e8a7b135eae91181b14218f1162f..69ceff7e3fb46c80b9503941f9623b4cea430127 100644 --- a/templates/jasset/group_list.html +++ b/templates/jasset/group_list.html @@ -22,6 +22,7 @@ <tr> <th class="text-center"> ID </th> <th class="text-center"> 主机组å </th> + <th class="text-center"> ä¸»æœºæ•°é‡ </th> <th class="text-center"> 备注 </th> <th class="text-center"> æ“作 </th> </tr> @@ -31,10 +32,10 @@ <tr class="gradeX"> <td class="text-center"> {{ post.id }} </td> <td class="text-center"> {{ post.name }} </td> + <td class="text-center"> <a href="/jasset/group_detail/{{ post.id }}">{{ post.asset_set.count }}</a> </td> <td class="text-center"> {{ post.comment }} </td> <td class="text-center"> - <a href="/jasset/{{ post.ip }}/" class="iframe btn btn-xs btn-primary">详情</a> - <a href="/jasset/host_edit/{{ post.ip }}" class="btn btn-xs btn-info">编辑</a> + <a href="/jasset/group_detail/{{ post.id }}" class="btn btn-xs btn-info">详情</a> <a href="/jasset/group_del/{{ post.id }}" class="btn btn-xs btn-danger">åˆ é™¤</a> </td> </tr> diff --git a/templates/jasset/host_add.html b/templates/jasset/host_add.html index 4483ac57cd1cc54606bdd818c0c7640f88914616..ab28db1e353155628f1c137281930871e6544cf2 100644 --- a/templates/jasset/host_add.html +++ b/templates/jasset/host_add.html @@ -4,13 +4,7 @@ <div class="wrapper wrapper-content animated fadeInRight"> <div class="row"> <div class="col-lg-10"> - <div class="text-center"> - <span>è¯·é€‰æ‹©æ·»åŠ å†…å®¹: </span> - <a href="#" class="btn btn-xs btn-primary" onclick='change("addhost")'>æ·»åŠ ä¸»æœº</a> - <a href="#" class="btn btn-xs btn-primary" onclick='change("addidc")'>æ·»åŠ IDC</a> - <a href="#" class="btn btn-xs btn-primary" onclick='change("addgroup")'>æ·»åŠ ä¸šåŠ¡ç»„</a> - </div> - <div id="add_asset" class="ibox float-e-margins"> + <div class="ibox float-e-margins"> <div id="ibox-content" class="ibox-title"> <h5> å¡«å†™ä¸»æœºåŸºæœ¬ä¿¡æ¯ </h5> <div class="ibox-tools"> @@ -33,107 +27,112 @@ </div> <div class="ibox-content"> - {% if emg %} - <div class="alert alert-warning text-center">{{ emg }}</div> - {% endif %} - {% if smg %} - <div class="alert alert-success text-center">{{ smg }}</div> - {% endif %} - <form id="assetForm" method="post" class="form-horizontal"> - <div class="form-group"><label class="col-sm-2 control-label"> IPåœ°å€ </label> - <div class="col-sm-8"><input type="text" name="j_ip" placeholder="192.168.1.1" class="form-control"></div> - </div> - - <div class="hr-line-dashed"></div> - <div class="form-group"><label class="col-sm-2 control-label"> 端å£å· </label> - <div class="col-sm-8"><input type="text" placeholder="22" name="j_port" class="form-control"></div> + <div class="panel blank-panel"> + <div class="panel-options"> + <ul class="nav nav-tabs"> + <li class="active"><a href="/jasset/host_add/" class="text-center"><i class="fa fa-laptop"></i> å•å°æ·»åŠ </a></li> + <li><a href="/jasset/host_add_multi" class="text-center"><i class="fa fa-bar-chart-o"></i> æ‰¹é‡æ·»åŠ </a></li> + </ul> </div> - - <div class="hr-line-dashed"></div> - <div class="form-group"><label class="col-sm-2 control-label"> ç™»å½•æ–¹å¼ </label> - <div class="col-sm-8"> - <div class="radio i-checks"><label> <input type="radio" id="L" checked="" value="L" name="j_type" onclick="show(this)"> <i> LDAP </i></label></div> - <div class="radio i-checks"><label> <input type="radio" id="S" value="S" name="j_type" onclick="show(this)"> <i> SSH_KEY </i></label></div> - <div class="radio i-checks"><label> <input type="radio" id="P" value="P" name="j_type" onclick="show(this)"> <i> PASSWORD </i></label></div> - <div class="radio i-checks"><label> <input type="radio" id="M" value="M" name="j_type" onclick="show(this)"> <i> MAP </i></label></div> - </div> - - <div name="a1" id=a1 style="display:none;"> - <div class="form-group"><label class="col-sm-2 col-sm-offset-1 control-label"> 普通用户å </label> - <div class="col-sm-6"><input type="text" name="j_user" placeholder="lilei" class="form-control"></div> - </div> - - <div class="hr-line-dashed"></div> - <div class="form-group"><label class="col-sm-2 col-sm-offset-1 control-label"> 普通用户密ç </label> - <div class="col-sm-6"><input type="password" name="j_password" placeholder="Password" class="form-control"></div> + <div class="panel-body"> + <div class="tab-content"> + <div id="tab-1" class="ibox float-e-margins tab-pane active"> + {% if emg %} + <div class="alert alert-warning text-center">{{ emg }}</div> + {% endif %} + {% if smg %} + <div class="alert alert-success text-center">{{ smg }}</div> + {% endif %} + <form id="assetForm" method="post" class="form-horizontal"> + <div class="form-group"><label class="col-sm-2 control-label"> IP地å€<span class="red-fonts">*</span> </label> + <div class="col-sm-8"><input type="text" name="j_ip" placeholder="192.168.1.1" class="form-control"></div> + </div> + + <div class="hr-line-dashed"></div> + <div class="form-group"><label class="col-sm-2 control-label"> 端å£å·<span class="red-fonts">*</span> </label> + <div class="col-sm-8"><input type="text" placeholder="22" name="j_port" class="form-control"></div> + </div> + + <div class="hr-line-dashed"></div> + <div class="form-group"><label class="col-sm-2 control-label"> 登录方å¼<span class="red-fonts">*</span> </label> + <div class="col-sm-8"> + <div class="radio i-checks"><label> <input type="radio" id="L" checked="" value="L" name="j_type" onclick="show(this)"> <i> LDAP </i></label></div> + <div class="radio i-checks"><label> <input type="radio" id="S" value="S" name="j_type" onclick="show(this)"> <i> SSH_KEY </i></label></div> + <div class="radio i-checks"><label> <input type="radio" id="P" value="P" name="j_type" onclick="show(this)"> <i> PASSWORD </i></label></div> + <div class="radio i-checks"><label> <input type="radio" id="M" value="M" name="j_type" onclick="show(this)"> <i> MAP </i></label></div> + </div> + + <div name="a1" id=a1 style="display:none;"> + <div class="form-group"><label class="col-sm-2 col-sm-offset-1 control-label"> 普通用户å </label> + <div class="col-sm-6"><input type="text" name="j_user" placeholder="lilei" class="form-control"></div> + </div> + + <div class="form-group"><label class="col-sm-2 col-sm-offset-1 control-label"> 普通用户密ç </label> + <div class="col-sm-6"><input type="password" name="j_password" placeholder="Password" class="form-control"></div> + </div> + + </div> + </div> + + <div class="hr-line-dashed"></div> + <div class="form-group"> + <label for="j_idc" class="col-lg-2 control-label"> 所属IDC<span class="red-fonts">*</span> </label> + <div class="col-sm-8"> + <select id="j_idc" name="j_idc" class="form-control m-b"> + {% for i in eidc %} + <option> {{ i }} </option> + {% endfor %} + </select> + </div> + </div> + + <div class="hr-line-dashed"></div> + <div class="form-group"> + <label for="j_group" class="col-lg-2 control-label">所属主机组<span class="red-fonts">*</span></label> + <div class="col-sm-8"> + <select id="j_group" name="j_group" class="form-control m-b" multiple size="10"> + {% for g in egroup %} + <option type="checkbox" value="{{ g.name }}">{{ g.name }} --- {{ g.comment }}</option> + {% endfor %} + </select> + </div> + </div> + + <div class="hr-line-dashed"></div> + <div class="form-group"> + <label for="j_group" class="col-sm-2 control-label"> 所属用户组<span class="red-fonts">*</span> </label> + <div class="col-sm-8"> + {% for g in eusergroup %} + <label class="checkbox-inline"><input type="checkbox" id="j_usergroup" value="{{ g }}" name="j_usergroup"> {{ g }} </label> + {% endfor %} + </div> + </div> + + <div class="hr-line-dashed"></div> + <div class="form-group"><label class="col-sm-2 control-label"> æ˜¯å¦æ¿€æ´»<span class="red-fonts">*</span> </label> + <div class="col-sm-8"> + <div class="radio i-checks"><label> <input type="radio" checked="" value="1" name="j_active"> <i> 激活 </i></label></div> + <div class="radio i-checks"><label> <input type="radio" value="0" name="j_active"> <i> ç¦ç”¨ </i></label></div> + </div> + </div> + + <div class="hr-line-dashed"></div> + <div class="form-group"><label class="col-sm-2 control-label"> 备注 </label> + <div class="col-sm-8"><input type="text" placeholder="hadoop01" name="j_comment" class="form-control"></div> + </div> + + <div class="hr-line-dashed"></div> + <div class="form-group"> + <div class="col-sm-4 col-sm-offset-5"> + <button class="btn btn-white" type="submit"> é‡ç½® </button> + <button class="btn btn-primary" type="submit"> æäº¤ </button> + </div> + </div> + </form> </div> - - <div class="hr-line-dashed"></div> - <div class="form-group"><label class="col-sm-2 col-sm-offset-1 control-label"> 超管用户å </label> - <div class="col-sm-6"><input type="text" name="j_root" placeholder="root" class="form-control"></div> - </div> - - <div class="hr-line-dashed"></div> - <div class="form-group"><label class="col-sm-2 col-sm-offset-1 control-label"> 超管用户密ç </label> - <div class="col-sm-6"><input type="password" name="j_passwd" placeholder="Password" class="form-control"></div> - </div> - - </div> - </div> - - <div class="hr-line-dashed"></div> - <div class="form-group"> - <label for="j_idc" class="col-lg-2 control-label"> 所属IDC </label> - <div class="col-sm-8"> - <select id="j_idc" name="j_idc" class="form-control m-b"> - {% for i in eidc %} - <option> {{ i }} </option> - {% endfor %} - </select> - </div> - </div> - - <div class="hr-line-dashed"></div> - <div class="form-group"> - <label for="j_group" class="col-sm-2 control-label"> 所属业务组 </label> - <div class="col-sm-8"> - {% for g in egroup %} - <label class="checkbox-inline"><input type="checkbox" id="j_group" value="{{ g }}" name="j_group"> {{ g }} </label> - {% endfor %} - </div> - </div> - - <div class="hr-line-dashed"></div> - <div class="form-group"> - <label for="j_group" class="col-sm-2 control-label"> 所属用户组 </label> - <div class="col-sm-8"> - {% for g in eusergroup %} - <label class="checkbox-inline"><input type="checkbox" id="j_usergroup" value="{{ g }}" name="j_usergroup"> {{ g }} </label> - {% endfor %} </div> </div> - - <div class="hr-line-dashed"></div> - <div class="form-group"><label class="col-sm-2 control-label"> æ˜¯å¦æ¿€æ´» </label> - <div class="col-sm-8"> - <div class="radio i-checks"><label> <input type="radio" checked="" value="1" name="j_active"> <i> 激活 </i></label></div> - <div class="radio i-checks"><label> <input type="radio" value="0" name="j_active"> <i> ç¦ç”¨ </i></label></div> - </div> - </div> - - <div class="hr-line-dashed"></div> - <div class="form-group"><label class="col-sm-2 control-label"> 备注 </label> - <div class="col-sm-8"><input type="text" placeholder="hadoop01" name="j_comment" class="form-control"></div> - </div> - - <div class="hr-line-dashed"></div> - <div class="form-group"> - <div class="col-sm-4 col-sm-offset-5"> - <!--<button class="btn btn-white" type="submit"> é‡ç½® </button>--> - <button class="btn btn-primary" type="submit"> æäº¤ </button> - </div> - </div> - </form> + </div> </div> </div> </div> @@ -151,17 +150,6 @@ document.getElementById("a1").style.display="none"; }}; - function change(type){ - if (type == 'addhost') { - var data = $('#add_asset'); - } else if (type == 'addidc') { - var data = $('#addidc'); - } else { - var data = $('addgroup'); - } - $("#add_asset").html(data); - } - $('#assetForm').validator({ timely: 2, theme: "yellow_right_effect", diff --git a/templates/jasset/host_add_multi.html b/templates/jasset/host_add_multi.html new file mode 100644 index 0000000000000000000000000000000000000000..df88841087ee981062fb55f5bdda77fbecf2f289 --- /dev/null +++ b/templates/jasset/host_add_multi.html @@ -0,0 +1,67 @@ +{% extends 'base.html' %} +{% block content %} +{% include 'nav_cat_bar.html' %} +<div class="wrapper wrapper-content animated fadeInRight"> + <div class="row"> + <div class="col-lg-10"> + <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> + <ul class="dropdown-menu dropdown-user"> + <li><a href="#">未å¯ç”¨ 1</a> + </li> + <li><a href="#">未å¯ç”¨ 2</a> + </li> + </ul> + <a class="close-link"> + <i class="fa fa-times"></i> + </a> + </div> + </div> + + <div class="ibox-content"> + <div class="panel blank-panel"> + <div class="panel-options"> + <ul class="nav nav-tabs"> + <li><a href="/jasset/host_add/" class="text-center"><i class="fa fa-laptop"></i> å•å°æ·»åŠ </a></li> + <li class="active"><a href="/jasset/host_add_multi/" class="text-center"><i class="fa fa-bar-chart-o"></i> æ‰¹é‡æ·»åŠ </a></li> + </ul> + </div> + <div class="panel-body"> + <div id="tab-2" class="ibox float-e-margins tab-pane active"> + {% if emg %} + <div class="alert alert-warning text-center">{{ emg }}</div> + {% endif %} + {% if smg %} + <div class="alert alert-success text-center">{{ smg }}</div> + {% endif %} + <h4>æŒ‰ç…§æ–‡æœ¬æ¡†å†…ä¸»æœºä¿¡æ¯æ ¼å¼å¡«å†™, 多å°ä¸»æœºå›žè½¦æ¢è¡Œ</h4> + <form id="assetMulti" method="post" class="form-horizontal"> + <div><textarea id="j_multi" name="j_multi" type="text" placeholder="192.168.1.1 22 LDAP 北京è”通 [网站,æ•°æ®åº“] admin 1 网站æœåС噍" class="form-control" style="width:700px;height:500px"></textarea></div> + <div class="hr-line-dashed"></div> + <div class="form-group"> + <div class="col-sm-4 col-sm-offset-4"> + <button class="btn btn-white" type="submit"> é‡ç½® </button> + <button class="btn btn-primary" type="submit"> æäº¤ </button> + </div> + </div> + </form> + </div> + </div> + </div> + </div> + </div> + </div> + </div> + </div> +</div> + + +{% endblock %} \ No newline at end of file diff --git a/templates/jasset/host_edit.html b/templates/jasset/host_edit.html index f197efa53d8031a1a6c84d504534fdcae27ef40a..00e8483f582122adaec6344f9a027fdc7a6aff2b 100644 --- a/templates/jasset/host_edit.html +++ b/templates/jasset/host_edit.html @@ -35,17 +35,17 @@ <div class="alert alert-success text-center">{{ smg }}</div> {% endif %} <form id="assetForm" method="post" class="form-horizontal" autocomplete="off"> - <div class="form-group"><label class="col-sm-2 control-label"> IPåœ°å€ </label> + <div class="form-group"><label class="col-sm-2 control-label"> IP地å€<span class="red-fonts">*</span> </label> <div class="col-sm-8"><input type="text" name="j_ip" value="{{ post.ip }}" placeholder="192.168.1.1" class="form-control"></div> </div> <div class="hr-line-dashed"></div> - <div class="form-group"><label class="col-sm-2 control-label"> 端å£å· </label> + <div class="form-group"><label class="col-sm-2 control-label"> 端å£å·<span class="red-fonts">*</span> </label> <div class="col-sm-8"><input type="text" placeholder="22" name="j_port" value="{{ post.port }}" class="form-control"></div> </div> <div class="hr-line-dashed"></div> - <div class="form-group"><label class="col-sm-2 control-label"> ç™»å½•æ–¹å¼ </label> + <div class="form-group"><label class="col-sm-2 control-label"> 登录方å¼<span class="red-fonts">*</span> </label> <div class="col-sm-8"> {% for t, type in login_types.items %} {% ifequal t post.login_type %} @@ -61,27 +61,15 @@ <div class="col-sm-6"><input type="text" name="j_user" placeholder="lilei" class="form-control"></div> </div> - <div class="hr-line-dashed"></div> <div class="form-group"><label class="col-sm-2 col-sm-offset-1 control-label"> 普通用户密ç </label> <div class="col-sm-6"><input type="password" name="j_password" placeholder="Password" class="form-control"></div> </div> - - <div class="hr-line-dashed"></div> - <div class="form-group"><label class="col-sm-2 col-sm-offset-1 control-label"> 超管用户å </label> - <div class="col-sm-6"><input type="text" name="j_root" placeholder="root" class="form-control"></div> - </div> - - <div class="hr-line-dashed"></div> - <div class="form-group"><label class="col-sm-2 col-sm-offset-1 control-label"> 超管用户密ç </label> - <div class="col-sm-6"><input type="password" name="j_passwd" placeholder="Password" class="form-control"></div> - </div> - </div> </div> <div class="hr-line-dashed"></div> <div class="form-group"> - <label for="j_idc" class="col-lg-2 control-label"> 所属IDC </label> + <label for="j_idc" class="col-lg-2 control-label"> 所属IDC<span class="red-fonts">*</span> </label> <div class="col-sm-8"> <select id="j_idc" name="j_idc" class="form-control m-b"> {% for i in eidc %} @@ -97,20 +85,22 @@ <div class="hr-line-dashed"></div> <div class="form-group"> - <label for="j_group" class="col-sm-2 control-label"> 所属业务组 </label> + <label for="j_group" class="col-lg-2 control-label"> 所属主机组<span class="red-fonts">*</span> </label> <div class="col-sm-8"> - {% for g in egroup %} - {% if g in e_group %} - <label class="checkbox-inline"><input type="checkbox" id="j_group" checked value="{{ g }}" name="j_group"> {{ g }} </label> - {% else %} - <label class="checkbox-inline"><input type="checkbox" id="j_group" value="{{ g }}" name="j_group"> {{ g }} </label> - {% endif %} - {% endfor %} + <select id="j_group" name="j_group" class="form-control m-b" multiple size="10"> + {% for g in egroup %} + {% if g in e_group %} + <option type="checkbox" value="{{ g.name }}" selected>{{ g.name }} --- {{ g.comment }}</option> + {% else %} + <option type="checkbox" value="{{ g.name }}" >{{ g.name }} --- {{ g.comment }}</option> + {% endif %} + {% endfor %} + </select> </div> </div> <div class="hr-line-dashed"></div> - <div class="form-group"><label class="col-sm-2 control-label"> æ˜¯å¦æ¿€æ´» </label> + <div class="form-group"><label class="col-sm-2 control-label"> æ˜¯å¦æ¿€æ´»<span class="red-fonts">*</span> </label> <div class="col-sm-8"> {% for a,active in actives.items %} {% ifequal a post.is_active %} diff --git a/templates/jasset/host_list.html b/templates/jasset/host_list.html index 5d485a6232aed5a404b61568ab6fb80e55114360..4b333fdfb8591055e76b072bfb1924a0ab8797d5 100644 --- a/templates/jasset/host_list.html +++ b/templates/jasset/host_list.html @@ -52,12 +52,12 @@ <tbody> {% for post in contacts.object_list %} <tr class="gradeX"> - <td class="text-center" data-editable='false'><input name="id" value="{{ post.id }}" type="checkbox" class="i-checks"></td> + <td class="text-center" name="j_id" value="{{ post.id }}" data-editable='false'><input name="id" value="{{ post.id }}" type="checkbox" class="i-checks"></td> <td class="text-center" name="j_ip"> {{ post.ip }} </td> <td class="text-center" name="j_port"> {{ post.port }} </td> <td class="text-center" name="j_type"> {{ login_types|get_item:post.login_type }} </td> <td class="text-center" name="j_idc"> {{ post.idc.name }} </td> - <td class="text-center" name="j_group">{% for group in post.bis_group.all %} {{ group }} {% endfor %}</td> + <td class="text-center" name="j_group">{% for group in post.bis_group.all|filter_private %} {{ group }} {% endfor %}</td> <td class="text-center" name="j_active"> {{ post.is_active|bool2str }} </td> <td class="text-center"> {{ post.date_added|date:"Y-m-d H:i:s" }} </td> <td class="text-center" name="j_comment"> {{ post.comment }} </td> @@ -112,40 +112,40 @@ function alter(form) { selectData = GetTableDataBox(); - if (selectData[1] != 0){ + if (selectData[1] != 0) { $.ajax({ type: "post", url: "/jasset/host_edit/batch/", - data : {"editable":selectData[0],"len_table":selectData[1]}, - success: function(data){ + data: {"editable": selectData[0], "len_table": selectData[1]}, + success: function (data) { alert("修改æˆåŠŸ"); - window.open("/jasset/host_list/","_self"); + window.open("/jasset/host_list/", "_self"); } }); } + } - function del(form) { - var checkboxes = document.getElementById(form); - var id_list = {}; - var j = 0; - for (var i = 0; i < checkboxes.elements.length; i++) { - if (checkboxes.elements[i].type == "checkbox" && checkboxes.elements[i].checked == true && checkboxes.elements[i].value != "checkall") { - id_list[j] = checkboxes.elements[i].value; - j++; - } - } - if (confirm("ç¡®å®šåˆ é™¤")) { - $.ajax({ - type: "POST", - url: "/jasset/host_del/", - data: {"id_list": id_list, "len_list": j}, - success: function (data) { - window.open("/jasset/host_list/", "_self"); + function del(form) { + var checkboxes = document.getElementById(form); + var id_list = {}; + var j = 0; + for (var i = 0; i < checkboxes.elements.length; i++) { + if (checkboxes.elements[i].type == "checkbox" && checkboxes.elements[i].checked == true && checkboxes.elements[i].value != "checkall") { + id_list[j] = checkboxes.elements[i].value; + j++; } - }); + } + if (confirm("ç¡®å®šåˆ é™¤")) { + $.ajax({ + type: "POST", + url: "/jasset/host_del/multi/", + data: {"id_list": id_list, "len_list": j}, + success: function (data) { + window.open("/jasset/host_list/", "_self"); + } + }); + } } - } -} </script> {% endblock %} \ No newline at end of file diff --git a/templates/jasset/idc_detail.html b/templates/jasset/idc_detail.html new file mode 100644 index 0000000000000000000000000000000000000000..c76f40b54ce7953ddcb203e43f930cf6b55f6ad9 --- /dev/null +++ b/templates/jasset/idc_detail.html @@ -0,0 +1,150 @@ +{% extends 'base.html' %} +{% load mytags %} +{% block content %} +{% include 'nav_cat_bar.html' %} + +<div class="wrapper wrapper-content animated fadeInRight"> + <div class="row"> + <div class="col-lg-12"> + <div class="ibox float-e-margins" id="all"> + <div class="ibox-title"> + <h5> IDC<span class="text-info"> {{ idc_name }} </span>详细信æ¯åˆ—表 </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> + <ul class="dropdown-menu dropdown-user"> + <li><a href="#">未å¯ç”¨ 1</a> + </li> + <li><a href="#">未å¯ç”¨ 2</a> + </li> + </ul> + <a class="close-link"> + <i class="fa fa-times"></i> + </a> + </div> + </div> + + <div class="ibox-content"> + <div class=""> + <a target="_blank" href="/jasset/host_add" class="btn btn-sm btn-primary "> æ·»åŠ </a> + </div> + + <form id="contents_form" name="contents_form"> + <table class="table table-striped table-bordered table-hover " id="editable" name="editable"> + <thead> + <tr> + <th class="text-center"><input id="checkall" type="checkbox" class="i-checks" name="checkall" value="checkall" data-editable='false' onclick="check_all('contents_form')"></th> + <th class="text-center" name="j_ip"> IPåœ°å€ </th> + <th class="text-center"> 端å£å· </th> + <th class="text-center" name="j_type"> ç™»å½•æ–¹å¼ </th> + <th class="text-center" name="j_idc"> 所属IDC </th> + <th class="text-center"> 所属业务组 </th> + <th class="text-center"> æ˜¯å¦æ¿€æ´» </th> + <th class="text-center" name="j_time"> æ·»åŠ æ—¶é—´ </th> + <th class="text-center" name="j_comment"> 备注 </th> + <th class="text-center"> æ“作 </th> + </tr> + </thead> + <tbody> + {% for post in contacts.object_list %} + <tr class="gradeX"> + <td class="text-center" name="j_id" value="{{ post.id }}" data-editable='false'><input name="id" value="{{ post.id }}" type="checkbox" class="i-checks"></td> + <td class="text-center" name="j_ip"> {{ post.ip }} </td> + <td class="text-center" name="j_port"> {{ post.port }} </td> + <td class="text-center" name="j_type"> {{ login_types|get_item:post.login_type }} </td> + <td class="text-center" name="j_idc"> {{ post.idc.name }} </td> + <td class="text-center" name="j_group">{% for group in post.bis_group.all %} {{ group }} {% endfor %}</td> + <td class="text-center" name="j_active"> {{ post.is_active|bool2str }} </td> + <td class="text-center"> {{ post.date_added|date:"Y-m-d H:i:s" }} </td> + <td class="text-center" name="j_comment"> {{ post.comment }} </td> + <td class="text-center" data-editable='false'> + <a href="/jasset/{{ post.ip }}/" class="iframe btn btn-xs btn-primary">详情</a> + <a href="/jasset/host_del/{{ post.id }}" class="btn btn-xs btn-danger">åˆ é™¤</a> + </td> + </tr> + {% endfor %} + </tbody> + </table> + <div class="row"> + <div class="col-sm-6"> + <input type="button" id="del_button" class="btn btn-danger btn-sm" name="del_button" value="åˆ é™¤" onclick="del('contents_form')" /> + <input type="button" id="alter_button" class="btn btn-warning btn-sm" name="alter_button" value="修改" onclick="alter('contents_form')" /> + </div> + <div class="col-sm-6"> + <div class="dataTables_paginate paging_simple_numbers" id="editable_paginate"> + <ul class="pagination" style="margin-top: 0; float: right"> + + {% if contacts.has_previous %} + <li><a href="?page={{ contacts.previous_page_number }}">«</a></li> + {% endif %} + + {% for page in p.page_range %} + {% ifequal offset1 page %} + <li class="active"><a href="?page={{ page }}" title="第{{ page }}页">{{ page }}</a></li> + {% else %} + <li><a href="?page={{ page }}" title="第{{ page }}页">{{ page }}</a></li> + {% endifequal %} + {% endfor %} + {% if contacts.has_next %} + <li><a href="?page={{ contacts.next_page_number }}">»</a></li> + {% endif %} + </ul> + </div> + </div> + </div> + </form> + </div> + </div> + </div> + </div> +</div> + +<script> + $(document).ready(function(){ + $(".iframe").colorbox({iframe:true, width:"70%", height:"70%"}); + $('#editable').editableTableWidget(); + }); + + function alter(form) { + selectData = GetTableDataBox(); + if (selectData[1] != 0){ + $.ajax({ + type: "post", + url: "/jasset/host_edit/batch/", + data : {"editable":selectData[0],"len_table":selectData[1]}, + success: function(data){ + alert("修改æˆåŠŸ"); + window.open("/jasset/host_list/","_self"); + } + }); + } + + function del(form) { + var checkboxes = document.getElementById(form); + var id_list = {}; + var j = 0; + for (var i = 0; i < checkboxes.elements.length; i++) { + if (checkboxes.elements[i].type == "checkbox" && checkboxes.elements[i].checked == true && checkboxes.elements[i].value != "checkall") { + id_list[j] = checkboxes.elements[i].value; + j++; + } + } + if (confirm("ç¡®å®šåˆ é™¤")) { + $.ajax({ + type: "POST", + url: "/jasset/host_del/", + data: {"id_list": id_list, "len_list": j}, + success: function (data) { + window.open("/jasset/host_list/", "_self"); + } + }); + } + } +} +</script> + +{% endblock %} \ No newline at end of file diff --git a/templates/jasset/idc_list.html b/templates/jasset/idc_list.html index a8693ea2f35ce0bc414be20148effc25fe0acd93..81912f6ac6357b981db1f4bb5265762e3b40c185 100644 --- a/templates/jasset/idc_list.html +++ b/templates/jasset/idc_list.html @@ -22,6 +22,7 @@ <tr> <th class="text-center"> ID </th> <th class="text-center"> 机房å </th> + <th class="text-center"> ä¸»æœºæ•°é‡ </th> <th class="text-center"> 备注 </th> <th class="text-center"> æ“作 </th> </tr> @@ -31,10 +32,10 @@ <tr class="gradeX"> <td class="text-center"> {{ post.id }} </td> <td class="text-center"> {{ post.name }} </td> + <td class="text-center"> <a href="/jasset/idc_detail/{{ post.id }}">{{ post.asset_set.count }}</a> </td> <td class="text-center"> {{ post.comment }} </td> <td class="text-center"> - <a href="/jasset/{{ post.ip }}/" class="iframe btn btn-xs btn-primary">详情</a> - <a href="/jasset/host_edit/{{ post.ip }}" class="btn btn-xs btn-info">编辑</a> + <a href="/jasset/idc_detail/{{ post.id }}" class="iframe btn btn-xs btn-primary">详情</a> <a href="/jasset/idc_del/{{ post.id }}" class="btn btn-xs btn-danger">åˆ é™¤</a> </td> </tr> diff --git a/templates/jlog/log_list.html b/templates/jlog/log_list.html index c015ee6bd1d5ef612e90e59599e48c6e9447cb67..cd9b98720d4b0260e6c35d60e5a4e2da28c98d1d 100644 --- a/templates/jlog/log_list.html +++ b/templates/jlog/log_list.html @@ -2,83 +2,115 @@ {% 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); + } + .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: #000000; + 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="panel-heading"> - <div class="panel-title m-b-md"><h4> 用户日志详细信æ¯åˆ—表 </h4></div> - <div class="panel-options"> - - <ul class="nav nav-tabs"> - <li class="active"><a data-toggle="tab" href="#tab-1" class="text-center"><i class="fa fa-laptop"></i> 在线 </a></li> - <li><a data-toggle="tab" href="#tab-2" class="text-center"><i class="fa fa-bar-chart-o"></i> 历å²è®°å½• </a></li> - </ul> + <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> + <ul class="dropdown-menu dropdown-user"> + <li><a href="#">未å¯ç”¨ 1</a> + </li> + <li><a href="#">未å¯ç”¨ 2</a> + </li> + </ul> + <a class="close-link"> + <i class="fa fa-times"></i> + </a> + </div> </div> - </div> - <div class="panel-body"> - <div class="tab-content"> - <div id="tab-1" class="ibox float-e-margins tab-pane active"> - <div class="ibox-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"> 实时监控 </th> - <th class="text-center"> é˜»æ– </th> - <th class="text-center"> 登录时间 </th> - <th class="text-center"> ç»“æŸæ—¶é—´ </th> - </tr> - </thead> - <tbody> - {% for post in online %} - <tr class="gradeX"> - <td class="text-center"> {{ post.user.name }} </td> - <td class="text-center"> {{ post.asset.ip }} </td> - <td class="text-center"><a class="monitor" filename="{{ post.log_path }}"> 监控 </a></td> - <td class="text-center"><a href="/jlog/log_kill/{{ post.pid }}"> é˜»æ– </a></td> - <td class="text-center"> {{ post.start_time|date:"Y-m-d H:i:s" }} </td> - <td class="text-center"> {{ post.end_time|date:"Y-m-d H:i:s" }} </td> - </tr> - {% endfor %} - </tbody> - </table> + <div class="ibox-content"> + <div class="panel blank-panel"> + <div class="panel-options"> + <ul class="nav nav-tabs"> + <li class="active"><a data-toggle="tab" href="#tab-1" class="text-center" onclick='log_fresh'><i class="fa fa-laptop"></i> 在线 </a></li> + <li><a data-toggle="tab" href="#tab-2" class="text-center" onclick='log_fresh'><i class="fa fa-bar-chart-o"></i> 历å²è®°å½• </a></li> + </ul> </div> - </div> - <div id="tab-2" class="ibox float-e-margins tab-pane"> - <div class="ibox-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"> 命令统计 </th> - <th class="text-center"> 登录时间 </th> - <th class="text-center"> ç»“æŸæ—¶é—´ </th> + <div class="panel-body"> + <div class="tab-content"> + <div id="tab-1" class="ibox float-e-margins tab-pane active"> + <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"> 实时监控 </th> + <th class="text-center"> é˜»æ– </th> + <th class="text-center"> 登录时间 </th> + <th class="text-center"> ç»“æŸæ—¶é—´ </th> + + </tr> + </thead> + <tbody> + {% for post in online %} + <tr class="gradeX"> + <td id="username" class="text-center"> {{ post.user.name }} </td> + <td id="ip" class="text-center"> {{ post.asset.ip }} </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> + <td class="text-center"> {{ post.start_time|date:"Y-m-d H:i:s" }} </td> + <td class="text-center"> {{ post.end_time|date:"Y-m-d H:i:s" }} </td> + </tr> + {% endfor %} + </tbody> + </table> + </div> + <div id="tab-2" class="ibox float-e-margins tab-pane"> + <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"> 命令统计 </th> + <th class="text-center"> 登录时间 </th> + <th class="text-center"> ç»“æŸæ—¶é—´ </th> - </tr> - </thead> - <tbody> - {% for post in offline %} - <tr class="gradeX"> - <td class="text-center"> {{ post.user.name }} </td> - <td class="text-center"> {{ post.asset.ip }} </td> - <td class="text-center"> 命令统计 </td> - <td class="text-center"> {{ post.start_time|date:"Y-m-d H:i:s"}} </td> - <td class="text-center"> {{ post.end_time|date:"Y-m-d H:i:s" }} </td> - </tr> - {% endfor %} - </tbody> - </table> + </tr> + </thead> + <tbody> + {% for post in offline %} + <tr class="gradeX"> + <td class="text-center"> {{ post.user.name }} </td> + <td class="text-center"> {{ post.asset.ip }} </td> + <td class="text-center"> 命令统计 </td> + <td class="text-center"> {{ post.start_time|date:"Y-m-d H:i:s"}} </td> + <td class="text-center"> {{ post.end_time|date:"Y-m-d H:i:s" }} </td> + </tr> + {% endfor %} + </tbody> + </table> + </div> + </div> </div> </div> </div> @@ -103,6 +135,8 @@ 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 escapeString = function (html){ var elem = document.createElement('div') @@ -110,7 +144,7 @@ elem.appendChild(txt) return elem.innerHTML; } - var tag = $('<div id="log" style="height: 500px;overflow: auto;"></div>'); + var tag = $('<div id="log" style="height: 500px;overflow: auto;background-color: rgba(0, 0, 0, 0);"></div>'); //告诉æœåŠ¡å™¨ç«¯æœ‰ç”¨æˆ·ç™»å½• socket.emit('login', {userid:message.id, filename:message.filename}); socket.on('message',function(obj){ @@ -123,7 +157,7 @@ tag[0].style.color = "#00FF00"; return tag[0]; } , - title:'Jumpserver实时监控:', + title:'Jumpserver实时监控 '+' 登录用户å: '+'<span class="text-info">'+username+'</span>'+' 登录主机: '+'<span class="text-info">'+ip, onhide:function(){ socket.emit('disconnect'); }}); @@ -144,5 +178,25 @@ SOCKET_HOST: "{{ web_socket_host }}" } $(".monitor").webSocket() + +// function log_fresh(str){ +// $.ajax({ +// type: "GET", +// url: "/jlog/log_list/", +// data : $(".panel-body").serialize(), +// success: function(data){ +// $("#tab-1").html(data); +// } +// }); + + function cut(num){ + var g_url = "/jlog/log_kill/"+num; + console.log(g_url); + $.ajax({ + type: "GET", + url: g_url, + success: window.open("/jlog/","_self") + }); +} </script> {% endblock %} \ No newline at end of file diff --git a/templates/nav.html b/templates/nav.html index bf2440b3545648977059e36c9eaa4d4e95fc5a65..f4c069580a5f97e36d6475af91bf184b226ac8f7 100644 --- a/templates/nav.html +++ b/templates/nav.html @@ -39,7 +39,7 @@ <li id="jlog"> <a href="#"><i class="fa fa-files-o"></i> <span class="nav-label">日志审计</span><span class="fa arrow"></span></a> <ul class="nav nav-second-level"> - <li id="log_list"><a href="/jlog/log_list/">查看日志</a></li> + <li id="log_list"><a href="/jlog/">查看日志</a></li> <li id="log_detail"><a href="/jlog/log_detail/">日志分æž</a></li> </ul> </li>