Commit 9cfe6c56 authored by halcyon's avatar halcyon

hehe

parent 30fd1600
...@@ -3,24 +3,24 @@ from django.conf.urls import patterns, include, url ...@@ -3,24 +3,24 @@ from django.conf.urls import patterns, include, url
from jasset.views import * from jasset.views import *
urlpatterns = patterns('', urlpatterns = patterns('',
url(r'^host_add/$', add_host), url(r'^host_add/$', host_add),
url(r"^host_add_multi/$", add_host_multi), url(r"^host_add_multi/$", host_add_batch),
url(r'^host_list/$', list_host), url(r'^host_list/$', host_list),
url(r'^search/$', host_search), url(r'^search/$', host_search),
url(r"^(\d+.\d+.\d+.\d+)/$", jlist_ip), url(r"^host_detail/$", host_detail),
url(r'^idc_add/$', add_idc), url(r'^idc_add/$', idc_add),
url(r'^idc_list/$', list_idc), url(r'^idc_list/$', idc_list),
url(r'^idc_edit/$', edit_idc), url(r'^idc_edit/$', idc_edit),
url(r'^idc_detail/$', detail_idc), url(r'^idc_detail/$', idc_detail),
url(r'^idc_del/(\w+)/$', del_idc), url(r'^idc_del/$', idc_del),
url(r'^group_add/$', add_group), url(r'^group_add/$', group_add),
url(r'^group_edit/$', edit_group), url(r'^group_edit/$', group_edit),
url(r'^group_list/$', list_group), url(r'^group_list/$', group_list),
url(r'^group_detail/$', detail_group), url(r'^group_detail/$', group_detail),
url(r'^group_del_host/(\w+)/$', group_del_host), url(r'^group_del_host/(\w+)/$', group_del_host),
url(r'^group_del/(\w+)/$', group_del), url(r'^group_del/(\w+)/$', group_del),
url(r'^host_del/(\w+)/$', host_del), url(r'^host_del/(\w+)/$', host_del),
url(r'^host_edit/$', host_edit), url(r'^host_edit/$', host_edit),
url(r'^host_edit/batch/$', batch_host_edit), url(r'^host_edit/batch/$', host_edit_batch),
url(r'^host_edit_common/batch/$', batch_host_edit_common), url(r'^host_edit_common/batch/$', host_edit_common_batch),
) )
\ No newline at end of file
This diff is collapsed.
...@@ -3,9 +3,8 @@ from django.conf.urls import patterns, include, url ...@@ -3,9 +3,8 @@ from django.conf.urls import patterns, include, url
from jlog.views import * from jlog.views import *
urlpatterns = patterns('', urlpatterns = patterns('',
url(r'^$', log_list_online), url(r'^$', log_list),
url(r'^log_list/online/$', log_list_online), url(r'^log_list/(\w+)/$', log_list),
url(r'^log_list/offline/$', log_list_offline),
url(r'^log_kill/(\d+)', log_kill), url(r'^log_kill/(\d+)', log_kill),
url(r'^history/$', log_history), url(r'^history/$', log_history),
url(r'^search/$', log_search), url(r'^search/$', log_search),
......
...@@ -13,82 +13,54 @@ from connect import BASE_DIR ...@@ -13,82 +13,54 @@ from connect import BASE_DIR
from jlog.models import Log from jlog.models import Log
from jumpserver.views import pages from jumpserver.views import pages
from juser.models import User, DEPT from juser.models import User, DEPT
from jumpserver.api import get_user_dept, is_super_user, is_group_admin, is_common_user from jumpserver.api import get_user_dept, is_super_user, is_group_admin, is_common_user, require_admin, require_login
CONF = ConfigParser.ConfigParser() CONF = ConfigParser.ConfigParser()
CONF.read('%s/jumpserver.conf' % BASE_DIR) CONF.read('%s/jumpserver.conf' % BASE_DIR)
def log_list_online(request): def get_user_log(request, keyword, env, username, dept_name):
header_title, path1, path2 = u'查看日志', u'查看日志', u'在线用户'
keyword = request.GET.get('keyword')
web_socket_host = CONF.get('websocket', 'web_socket_host')
dept_id = get_user_dept(request)
dept_name = DEPT.objects.get(id=dept_id).name
user_id = request.session.get('user_id')
username = User.objects.get(id=user_id).username
if is_super_user(request): if is_super_user(request):
if keyword: if keyword:
posts = Log.objects.filter(Q(user__contains=keyword) | Q(host__contains=keyword)) \ posts = Log.objects.filter(Q(user__contains=keyword) | Q(host__contains=keyword)) \
.filter(is_finished=0).order_by('-start_time') .filter(is_finished=env).order_by('-start_time')
else: else:
posts = Log.objects.filter(is_finished=0).order_by('-start_time') posts = Log.objects.filter(is_finished=env).order_by('-start_time')
contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)
elif is_group_admin(request): elif is_group_admin(request):
if keyword: if keyword:
posts = Log.objects.filter(Q(user__contains=keyword) | Q(host__contains=keyword)) \ posts = Log.objects.filter(Q(user__contains=keyword) | Q(host__contains=keyword)) \
.filter(is_finished=0).filter(dept_name=dept_name).order_by('-start_time') .filter(is_finished=env).filter(dept_name=dept_name).order_by('-start_time')
else: else:
posts = Log.objects.filter(is_finished=0).filter(dept_name=dept_name).order_by('-start_time') posts = Log.objects.filter(is_finished=env).filter(dept_name=dept_name).order_by('-start_time')
contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)
elif is_common_user(request): elif is_common_user(request):
if keyword: if keyword:
posts = Log.objects.filter(user=username).filter(Q(user__contains=keyword) | Q(host__contains=keyword))\ posts = Log.objects.filter(user=username).filter(Q(user__contains=keyword) | Q(host__contains=keyword))\
.filter(is_finished=0).order_by('-start_time') .filter(is_finished=env).order_by('-start_time')
else: else:
posts = Log.objects.filter(is_finished=0).filter(user=username).order_by('-start_time') posts = Log.objects.filter(is_finished=env).filter(user=username).order_by('-start_time')
contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request) return posts
return render_to_response('jlog/log_online.html', locals(), context_instance=RequestContext(request))
@require_login
def log_list_offline(request): def log_list(request, offset):
header_title, path1, path2 = u'查看日志', u'查看日志', u'历史记录' header_title, path1, path2 = u'查看日志', u'查看日志', u'在线用户'
keyword = request.GET.get('keyword')
web_socket_host = CONF.get('websocket', 'web_socket_host') web_socket_host = CONF.get('websocket', 'web_socket_host')
env_dic = {'online': 0, 'offline': 1}
env = env_dic[offset]
keyword = request.GET.get('keyword')
dept_id = get_user_dept(request) dept_id = get_user_dept(request)
dept_name = DEPT.objects.get(id=dept_id).name dept_name = DEPT.objects.get(id=dept_id).name
user_id = request.session.get('user_id') user_id = request.session.get('user_id')
username = User.objects.get(id=user_id).username username = User.objects.get(id=user_id).username
if is_super_user(request): posts = get_user_log(request, keyword, env, username, dept_name)
if keyword: contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)
posts = Log.objects.filter(Q(user__contains=keyword) | Q(host__contains=keyword)) \
.filter(is_finished=1).order_by('-start_time')
else:
posts = Log.objects.filter(is_finished=1).order_by('-start_time')
contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)
elif is_group_admin(request): return render_to_response('jlog/log_%s.html' % offset, locals(), context_instance=RequestContext(request))
if keyword:
posts = Log.objects.filter(Q(user__contains=keyword) | Q(host__contains=keyword)) \
.filter(is_finished=1).filter(dept_name=dept_name).order_by('-start_time')
else:
posts = Log.objects.filter(is_finished=1).filter(dept_name=dept_name).order_by('-start_time')
contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)
elif is_common_user(request):
if keyword:
posts = Log.objects.filter(user=username).filter(Q(user__contains=keyword) | Q(host__contains=keyword))\
.filter(is_finished=1).order_by('-start_time')
else:
posts = Log.objects.filter(is_finished=1).filter(user=username).order_by('-start_time')
contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)
return render_to_response('jlog/log_offline.html', locals(), context_instance=RequestContext(request))
@require_admin
def log_kill(request, offset): def log_kill(request, offset):
pid = offset pid = offset
if pid: if pid:
...@@ -97,6 +69,7 @@ def log_kill(request, offset): ...@@ -97,6 +69,7 @@ def log_kill(request, offset):
return HttpResponseRedirect('jlog/log_offline.html', locals(), context_instance=RequestContext(request)) return HttpResponseRedirect('jlog/log_offline.html', locals(), context_instance=RequestContext(request))
@require_login
def log_history(request): def log_history(request):
if request.method == 'GET': if request.method == 'GET':
id = request.GET.get('id', 0) id = request.GET.get('id', 0)
...@@ -109,37 +82,17 @@ def log_history(request): ...@@ -109,37 +82,17 @@ def log_history(request):
return HttpResponse(content) return HttpResponse(content)
@require_login
def log_search(request): def log_search(request):
keyword = request.GET.get('keyword') keyword = request.GET.get('keyword')
env = request.GET.get('env') offset = request.GET.get('env')
dept_id = get_user_dept(request) dept_id = get_user_dept(request)
dept_name = DEPT.objects.get(id=dept_id).name dept_name = DEPT.objects.get(id=dept_id).name
user_id = request.session.get('user_id') user_id = request.session.get('user_id')
username = User.objects.get(id=user_id).username username = User.objects.get(id=user_id).username
if is_super_user(request):
if env == 'online':
posts = contact_list = Log.objects.filter(Q(user__contains=keyword) | Q(host__contains=keyword)) \
.filter(is_finished=0).order_by('-start_time')
elif env == 'offline':
posts = contact_list = Log.objects.filter(Q(user__contains=keyword) | Q(host__contains=keyword)) \
.filter(is_finished=1).order_by('-start_time')
contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)
elif is_group_admin(request): env_dic = {'online': 0, 'offline': 1}
if env == 'online': env = env_dic[offset]
posts = contact_list = Log.objects.filter(Q(user__contains=keyword) | Q(host__contains=keyword)) \ posts = get_user_log(request, keyword, env, username, dept_name)
.filter(is_finished=0).filter(dept_name=dept_name).order_by('-start_time') contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)
elif env == 'offline':
posts = contact_list = Log.objects.filter(Q(user__contains=keyword) | Q(host__contains=keyword)) \
.filter(is_finished=1).filter(dept_name=dept_name).order_by('-start_time')
contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)
elif is_common_user(request):
if env == 'online':
posts = contact_list = Log.objects.filter(Q(user__contains=keyword) | Q(host__contains=keyword)) \
.filter(is_finished=0).filter(user=username).order_by('-start_time')
elif env == 'offline':
posts = contact_list = Log.objects.filter(Q(user__contains=keyword) | Q(host__contains=keyword)) \
.filter(is_finished=1).filter(user=username).order_by('-start_time')
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)) return render_to_response('jlog/log_search.html', locals(), context_instance=RequestContext(request))
...@@ -45,7 +45,7 @@ class Apply(models.Model): ...@@ -45,7 +45,7 @@ class Apply(models.Model):
asset = models.CharField(max_length=500) asset = models.CharField(max_length=500)
comment = models.TextField(blank=True, null=True) comment = models.TextField(blank=True, null=True)
status = models.IntegerField(max_length=2) status = models.IntegerField(max_length=2)
date_add = models.DateTimeField(default=datetime.datetime.now(), null=True) date_add = models.DateTimeField(null=True)
date_end = models.DateTimeField(null=True) date_end = models.DateTimeField(null=True)
def __unicode__(self): def __unicode__(self):
......
...@@ -28,5 +28,6 @@ urlpatterns = patterns('jperm.views', ...@@ -28,5 +28,6 @@ urlpatterns = patterns('jperm.views',
(r'^apply_show/(\w+)/$', 'perm_apply_log'), (r'^apply_show/(\w+)/$', 'perm_apply_log'),
(r'^apply_exec/$', 'perm_apply_exec'), (r'^apply_exec/$', 'perm_apply_exec'),
(r'^apply_info/$', 'perm_apply_info'), (r'^apply_info/$', 'perm_apply_info'),
(r'^apply_del/$', 'perm_apply_del'),
(r'^apply_search/$', 'perm_apply_search'), (r'^apply_search/$', 'perm_apply_search'),
) )
# coding: utf-8 # coding: utf-8
import sys import sys
reload(sys) reload(sys)
sys.setdefaultencoding('utf8') sys.setdefaultencoding('utf8')
from django.core.mail import send_mail from django.core.mail import send_mail
from django.shortcuts import render_to_response from django.shortcuts import render_to_response
from django.template import RequestContext from django.template import RequestContext
...@@ -13,6 +11,12 @@ from django.db.models import Q ...@@ -13,6 +11,12 @@ from django.db.models import Q
from jumpserver.api import * from jumpserver.api import *
CONF = ConfigParser()
CONF.read('%s/jumpserver.conf' % BASE_DIR)
send_ip = CONF.get('base', 'ip')
send_port = CONF.get('base', 'port')
def asset_cmd_groups_get(asset_groups_select='', cmd_groups_select=''): def asset_cmd_groups_get(asset_groups_select='', cmd_groups_select=''):
asset_groups_select_list = [] asset_groups_select_list = []
cmd_groups_select_list = [] cmd_groups_select_list = []
...@@ -653,9 +657,9 @@ def perm_apply(request): ...@@ -653,9 +657,9 @@ def perm_apply(request):
group_lis = ', '.join(group) group_lis = ', '.join(group)
hosts_lis = ', '.join(hosts) hosts_lis = ', '.join(hosts)
time_now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') time_now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
Apply.objects.create(applyer=applyer, dept=dept, bisgroup=group, asset=hosts, status=0, comment=comment) a = Apply.objects.create(applyer=applyer, dept=dept, bisgroup=group, date_add=datetime.datetime.now(), asset=hosts, status=0, comment=comment)
uuid = Apply.objects.get(applyer=applyer, asset=hosts, comment=comment).uuid uuid = a.uuid
url = "http://127.0.0.1:8000/jperm/apply_exec/?uuid=%s" % uuid url = "http://%s:%s/jperm/apply_exec/?uuid=%s" % (send_ip, send_port, uuid)
mail_msg = """ mail_msg = """
Hi,%s: Hi,%s:
有新的权限申请, 详情如下: 有新的权限申请, 详情如下:
...@@ -664,12 +668,12 @@ def perm_apply(request): ...@@ -664,12 +668,12 @@ def perm_apply(request):
申请的主机: %s 申请的主机: %s
申请时间: %s 申请时间: %s
申请说明: %s 申请说明: %s
请及时审批, 审批完成后点击以下链接,告知申请人。 请及时审批, 审批完成后, 点击以下链接或登录授权管理-权限审批页面点击确认键,告知申请人。
%s %s
""" % (da.username, applyer, group_lis, hosts_lis, time_now, comment, url) """ % (da.username, applyer, group_lis, hosts_lis, time_now, comment, url)
send_mail(mail_title, mail_msg, 'jumpserver@163.com', [mail_address], fail_silently=False) send_mail(mail_title, mail_msg, 'jkfunshion@fun.tv', [mail_address], fail_silently=False)
smg = "提交成功,已发邮件通知部门管理员。" smg = "提交成功,已发邮件通知部门管理员。"
return render_to_response('jperm/perm_apply.html', locals(), context_instance=RequestContext(request)) return render_to_response('jperm/perm_apply.html', locals(), context_instance=RequestContext(request))
return render_to_response('jperm/perm_apply.html', locals(), context_instance=RequestContext(request)) return render_to_response('jperm/perm_apply.html', locals(), context_instance=RequestContext(request))
...@@ -679,6 +683,8 @@ def perm_apply(request): ...@@ -679,6 +683,8 @@ def perm_apply(request):
def perm_apply_exec(request): def perm_apply_exec(request):
header_title, path1, path2 = u'主机权限申请', u'权限管理', u'审批完成' header_title, path1, path2 = u'主机权限申请', u'权限管理', u'审批完成'
uuid = request.GET.get('uuid') uuid = request.GET.get('uuid')
user_id = request.session.get('user_id')
approver = User.objects.get(id=user_id).name
if uuid: if uuid:
p_apply = Apply.objects.filter(uuid=str(uuid)) p_apply = Apply.objects.filter(uuid=str(uuid))
q_apply = Apply.objects.get(uuid=str(uuid)) q_apply = Apply.objects.get(uuid=str(uuid))
...@@ -689,7 +695,7 @@ def perm_apply_exec(request): ...@@ -689,7 +695,7 @@ def perm_apply_exec(request):
user = User.objects.get(username=q_apply.applyer) user = User.objects.get(username=q_apply.applyer)
mail_address = user.email mail_address = user.email
time_now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') time_now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
p_apply.update(status=1, date_end=time_now) p_apply.update(status=1, approver=approver, date_end=time_now)
mail_title = '%s - 权限审批完成' % q_apply.applyer mail_title = '%s - 权限审批完成' % q_apply.applyer
mail_msg = """ mail_msg = """
Hi,%s: Hi,%s:
...@@ -699,7 +705,7 @@ def perm_apply_exec(request): ...@@ -699,7 +705,7 @@ def perm_apply_exec(request):
smg = '授权完成, 已邮件通知申请人, 十秒钟后返回首页' smg = '授权完成, 已邮件通知申请人, 十秒钟后返回首页'
return render_to_response('jperm/perm_apply_exec.html', locals(), context_instance=RequestContext(request)) return render_to_response('jperm/perm_apply_exec.html', locals(), context_instance=RequestContext(request))
else: else:
smg = '没有此授权, 十秒钟后返回首页' smg = '没有此授权记录, 十秒钟后返回首页'
return render_to_response('jperm/perm_apply_exec.html', locals(), context_instance=RequestContext(request)) return render_to_response('jperm/perm_apply_exec.html', locals(), context_instance=RequestContext(request))
...@@ -735,56 +741,41 @@ def perm_apply_log(request, offset): ...@@ -735,56 +741,41 @@ def perm_apply_log(request, offset):
dept_name = DEPT.objects.get(id=dept_id).name dept_name = DEPT.objects.get(id=dept_id).name
user_id = request.session.get('user_id') user_id = request.session.get('user_id')
username = User.objects.get(id=user_id).username username = User.objects.get(id=user_id).username
if offset == 'online': status_dic = {'online': 0, 'offline': 1}
posts = get_apply_posts(request, 0, username, dept_name, keyword) status = status_dic[offset]
contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request) posts = get_apply_posts(request, status, username, dept_name, keyword)
return render_to_response('jperm/perm_log_online.html', locals(), context_instance=RequestContext(request)) contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)
return render_to_response('jperm/perm_log_%s.html' % offset, locals(), context_instance=RequestContext(request))
elif offset == 'offline':
posts = get_apply_posts(request, 1, username, dept_name, keyword)
contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)
return render_to_response('jperm/perm_log_offline.html', locals(), context_instance=RequestContext(request))
@require_login
def perm_apply_info(request): def perm_apply_info(request):
uuid = request.GET.get('uuid') uuid = request.GET.get('uuid')
post = Apply.objects.get(uuid=uuid) post = Apply.objects.get(uuid=uuid)
return render_to_response('jperm/perm_apply_info.html', locals(), context_instance=RequestContext(request)) return render_to_response('jperm/perm_apply_info.html', locals(), context_instance=RequestContext(request))
@require_admin
def perm_apply_del(request):
uuid = request.GET.get('uuid')
u_apply = Apply.objects.filter(uuid=uuid)
if u_apply:
u_apply.delete()
return HttpResponseRedirect('/jperm/apply_show/online/')
@require_login
def perm_apply_search(request): def perm_apply_search(request):
keyword = request.GET.get('keyword') keyword = request.GET.get('keyword')
env = request.GET.get('env') offset = request.GET.get('env')
dept_id = get_user_dept(request) dept_id = get_user_dept(request)
dept_name = DEPT.objects.get(id=dept_id).name dept_name = DEPT.objects.get(id=dept_id).name
user_id = request.session.get('user_id') user_id = request.session.get('user_id')
username = User.objects.get(id=user_id).username username = User.objects.get(id=user_id).username
if is_super_user(request): status_dic = {'online': 0, 'offline': 1}
if env == 'online': status = status_dic[offset]
posts = Apply.objects.filter(Q(applyer__contains=keyword) | Q(approver__contains=keyword)) \ posts = get_apply_posts(request, status, username, dept_name, keyword)
.filter(status=0).order_by('-date_add') contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)
elif env == 'offline':
posts = Apply.objects.filter(Q(applyer__contains=keyword) | Q(approver__contains=keyword)) \
.filter(status=1).order_by('-date_add')
contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)
elif is_group_admin(request):
if env == 'online':
posts = Apply.objects.filter(Q(applyer__contains=keyword) | Q(approver__contains=keyword)) \
.filter(status=0).filter(dept_name=dept_name).order_by('-date_add')
elif env == 'offline':
posts = Apply.objects.filter(Q(applyer__contains=keyword) | Q(approver__contains=keyword)) \
.filter(status=1).filter(dept_name=dept_name).order_by('-date_add')
contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)
elif is_common_user(request):
if env == 'online':
posts = Apply.objects.filter(Q(applyer__contains=keyword) | Q(approver__contains=keyword)) \
.filter(status=0).filter(user=username).order_by('-date_add')
elif env == 'offline':
posts = Apply.objects.filter(Q(applyer__contains=keyword) | Q(approver__contains=keyword)) \
.filter(status=1).filter(applyer=username).order_by('-date_add')
contact_list, p, contacts, page_range, current_page, show_first, show_end = pages(posts, request)
return render_to_response('jperm/perm_apply_search.html', locals(), context_instance=RequestContext(request)) return render_to_response('jperm/perm_apply_search.html', locals(), context_instance=RequestContext(request))
......
#coding: utf8 #coding: utf8
[base]
ip = 192.168.173.129
port = 80
[db] [db]
host = 127.0.0.1 host = 127.0.0.1
port = 3306 port = 3306
...@@ -7,6 +12,7 @@ user = jumpserver ...@@ -7,6 +12,7 @@ user = jumpserver
password = mysql234 password = mysql234
database = jumpserver database = jumpserver
[ldap] [ldap]
ldap_enable = 1 ldap_enable = 1
host_url = ldap://127.0.0.1:389 host_url = ldap://127.0.0.1:389
...@@ -14,15 +20,18 @@ base_dn = dc=jumpserver, dc=org ...@@ -14,15 +20,18 @@ base_dn = dc=jumpserver, dc=org
root_dn = cn=admin,dc=jumpserver,dc=org root_dn = cn=admin,dc=jumpserver,dc=org
root_pw = secret234 root_pw = secret234
[websocket] [websocket]
web_socket_host = 127.0.0.1:3000 web_socket_host = 192.168.173.129:3000
[web] [web]
key = 88aaaf7ffe3c6c04 key = 88aaaf7ffe3c6c04
[mail] [mail]
email_host = 'mail.funshion.com' email_host = mail.funshion.com
email_port = '25' email_port = 25
email_host_user = 'jkfunshion' email_host_user = jkfunshion
email_host_password = 'jkmail%' email_host_password = jkmail%
email_use_tls = False email_use_tls = False
...@@ -288,9 +288,10 @@ def user_perm_asset_api(username): ...@@ -288,9 +288,10 @@ def user_perm_asset_api(username):
asset_group_list = user_perm_group_api(user) asset_group_list = user_perm_group_api(user)
for asset_group in asset_group_list: for asset_group in asset_group_list:
asset_list.extend(asset_group.asset_set.all()) asset_list.extend(asset_group.asset_set.all())
asset_list = list(set(asset_list))
return asset_list return asset_list
return [] else:
return []
def asset_perm_api(asset): def asset_perm_api(asset):
...@@ -307,6 +308,7 @@ def asset_perm_api(asset): ...@@ -307,6 +308,7 @@ def asset_perm_api(asset):
user_permed_list = [] user_permed_list = []
for user_group in user_group_list: for user_group in user_group_list:
user_permed_list.extend(user_group.user_set.all()) user_permed_list.extend(user_group.user_set.all())
user_permed_list = list(set(user_permed_list))
return user_permed_list return user_permed_list
......
...@@ -9,16 +9,22 @@ def name_proc(request): ...@@ -9,16 +9,22 @@ def name_proc(request):
if role_id == 2: if role_id == 2:
user_total_num = User.objects.all().count() user_total_num = User.objects.all().count()
user_active_num = User.objects.filter().count() user_active_num = User.objects.filter().count()
host_total_num = Asset.objects.all().count()
host_active_num = Asset.objects.filter(is_active=True).count()
else: else:
user, dept = get_session_user_dept(request) user, dept = get_session_user_dept(request)
user_total_num = dept.user_set.all().count() user_total_num = dept.user_set.all().count()
user_active_num = dept.user_set.filter(is_active=True).count() user_active_num = dept.user_set.filter(is_active=True).count()
host_total_num = dept.asset_set.all().count()
host_total_num = Asset.objects.all().count() host_active_num = dept.asset_set.all().filter(is_active=True).count()
host_active_num = Asset.objects.filter(is_active=True).count()
request.session.set_expiry(3600) request.session.set_expiry(3600)
return {'session_user_id': user_id, 'session_role_id': role_id, info_dic = {'session_user_id': user_id,
'user_total_num': user_total_num, 'user_active_num': user_active_num, 'session_role_id': role_id,
'host_total_num': host_total_num, 'host_active_num': host_active_num} 'user_total_num': user_total_num,
'user_active_num': user_active_num,
'host_total_num': host_total_num,
'host_active_num': host_active_num}
return info_dic
...@@ -24,11 +24,11 @@ DB_PASSWORD = config.get('db', 'password') ...@@ -24,11 +24,11 @@ DB_PASSWORD = config.get('db', 'password')
DB_DATABASE = config.get('db', 'database') DB_DATABASE = config.get('db', 'database')
# mail config # mail config
EMAIL_HOST = 'mail.funshion.com' EMAIL_HOST = config.get('mail', 'email_host')
EMAIL_PORT = '25' EMAIL_PORT = config.get('mail', 'email_port')
EMAIL_HOST_USER = 'jkfunshion' EMAIL_HOST_USER = config.get('mail', 'email_host_user')
EMAIL_HOST_PASSWORD = 'jkmail%' EMAIL_HOST_PASSWORD = config.get('mail', 'email_host_password')
EMAIL_USE_TLS = False EMAIL_USE_TLS = config.getboolean('mail', 'email_use_tls')
# Quick-start development settings - unsuitable for production # Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/1.7/howto/deployment/checklist/ # See https://docs.djangoproject.com/en/1.7/howto/deployment/checklist/
......
...@@ -200,6 +200,18 @@ def ast_to_list(lis): ...@@ -200,6 +200,18 @@ def ast_to_list(lis):
return restr return restr
@register.filter(name='get_group_count')
def get_group_count(post, dept):
count = post.asset_set.filter(dept=dept).count()
return count
@register.filter(name='get_idc_count')
def get_idc_count(post, dept):
count = post.asset_set.filter(dept=dept).count()
return count
@register.filter(name='ast_to_list_1') @register.filter(name='ast_to_list_1')
def ast_to_list_1(lis): def ast_to_list_1(lis):
return ast.literal_eval(lis) return ast.literal_eval(lis)
......
...@@ -109,6 +109,7 @@ def admin_index(request): ...@@ -109,6 +109,7 @@ def admin_index(request):
# latest 10 login # latest 10 login
login_10 = Log.objects.order_by('-start_time')[:10] login_10 = Log.objects.order_by('-start_time')[:10]
login_more_10 = Log.objects.order_by('-start_time')[10:21]
# a week top 10 # a week top 10
for user_info in user_top_ten: for user_info in user_top_ten:
...@@ -148,10 +149,16 @@ def index(request): ...@@ -148,10 +149,16 @@ def index(request):
active_hosts = Asset.objects.filter(is_active=1) active_hosts = Asset.objects.filter(is_active=1)
# percent of dashboard # percent of dashboard
percent_user = format(active_users.count() / users.count(), '.0%') if users.count() == 0:
percent_host = format(active_hosts.count() / hosts.count(), '.0%') percent_user, percent_online_user = '0%', '0%'
percent_online_user = format(online_user.count() / users.count(), '.0%') else:
percent_online_host = format(online_host.count() / hosts.count(), '.0%') percent_user = format(active_users.count() / users.count(), '.0%')
percent_online_user = format(online_user.count() / users.count(), '.0%')
if hosts.count() == 0:
percent_host, percent_online_host = '0%', '0%'
else:
percent_host = format(active_hosts.count() / hosts.count(), '.0%')
percent_online_host = format(online_host.count() / hosts.count(), '.0%')
li_date, li_str = getDaysByNum(7) li_date, li_str = getDaysByNum(7)
today = datetime.datetime.now().day today = datetime.datetime.now().day
...@@ -170,6 +177,7 @@ def index(request): ...@@ -170,6 +177,7 @@ def index(request):
# perm apply latest 10 # perm apply latest 10
perm_apply_10 = Apply.objects.order_by('-date_add')[:10] perm_apply_10 = Apply.objects.order_by('-date_add')[:10]
login_more_10 = Log.objects.order_by('-start_time')[10:20]
# latest 10 login # latest 10 login
login_10 = Log.objects.order_by('-start_time')[:10] login_10 = Log.objects.order_by('-start_time')[:10]
......
...@@ -89,6 +89,10 @@ ...@@ -89,6 +89,10 @@
<a class="collapse-link"> <a class="collapse-link">
<i class="fa fa-chevron-up"></i> <i class="fa fa-chevron-up"></i>
</a> </a>
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i>
</a>
<ul class="dropdown-menu dropdown-user"></ul>
<a class="close-link"> <a class="close-link">
<i class="fa fa-times"></i> <i class="fa fa-times"></i>
</a> </a>
...@@ -153,7 +157,29 @@ ...@@ -153,7 +157,29 @@
{% endfor %} {% endfor %}
</div> </div>
<button class="btn btn-primary btn-block m-t"><i class="fa fa-arrow-down"></i> 更多 </button> <button id="show" class="btn btn-primary btn-block m-t"><i class="fa fa-arrow-down"></i> 更多 </button>
<div id='more' style="display: none">
<br/>
<div class="feed-activity-list">
{% for login in login_more_10 %}
<div class="feed-element">
<a href="profile.html" class="pull-left">
<img alt="image" class="img-circle" src="/static/img/root.png">
</a>
<div class="media-body ">
{% ifequal login.is_finished 0 %}
<small class="pull-right text-navy">{{ login.start_time|naturaltime }}</small>
{% else %}
<small class="pull-right">{{ login.start_time|naturaltime }}</small>
{% endifequal %}
<strong>{{ login.user }}</strong> 登录了{{ login.host }} <br>
<small class="text-muted">{{ login.start_time }}</small>
</div>
</div>
{% endfor %}
</div>
</div>
</div> </div>
...@@ -172,12 +198,7 @@ ...@@ -172,12 +198,7 @@
<a class="dropdown-toggle" data-toggle="dropdown" href="#"> <a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-wrench"></i> <i class="fa fa-wrench"></i>
</a> </a>
<ul class="dropdown-menu dropdown-user"> <ul class="dropdown-menu dropdown-user"></ul>
<li><a href="#">Config option 1</a>
</li>
<li><a href="#">Config option 2</a>
</li>
</ul>
<a class="close-link"> <a class="close-link">
<i class="fa fa-times"></i> <i class="fa fa-times"></i>
</a> </a>
...@@ -218,6 +239,12 @@ ...@@ -218,6 +239,12 @@
</div> </div>
<script> <script>
$(document).ready(function(){
$('#show').click(function(){
$('#show').css('display', 'none');
$('#more').css('display', 'block');
})
})
var cate = {{ li_str|safe }}; var cate = {{ li_str|safe }};
$(function () { $(function () {
$('#top10').highcharts({ $('#top10').highcharts({
......
{% extends 'base.html' %} {% extends 'base.html' %}
{% load mytags %}
{% block content %} {% block content %}
{% include 'nav_cat_bar.html' %} {% include 'nav_cat_bar.html' %}
...@@ -40,12 +41,16 @@ ...@@ -40,12 +41,16 @@
<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_id" value="{{ post.id }}" data-editable='false'><input name="id" value="{{ post.id }}" type="checkbox" class="i-checks"></td>
<td class="text-center"> {{ post.name }} </td> <td class="text-center"> {{ post.name }} </td>
<td class="text-center"> {{ post.dept.name }} </td> <td class="text-center"> {{ post.dept.name }} </td>
<td class="text-center"> <a href="/jasset/group_detail/?id={{ post.id }}">{{ post.asset_set.count }}</a> </td> {% ifequal session_role_id 2 %}
<td class="text-center"> <a href="/jasset/group_detail/?id={{ post.id }}">{{ post.asset_set.count }}</a> </td>
{% else %}
<td class="text-center"> <a href="/jasset/group_detail/?id={{ post.id }}">{{ post|get_group_count:dept }}</a> </td>
{% endifequal %}
<td class="text-center"> {{ post.comment }} </td> <td class="text-center"> {{ post.comment }} </td>
<td class="text-center"> <td class="text-center">
<a href="/jasset/group_detail/?id={{ post.id }}" class="btn btn-xs btn-info">详情</a> <a href="/jasset/group_detail/?id={{ post.id }}" class="btn btn-xs btn-info">详情</a>
<a href="/jasset/group_edit/?id={{ post.id }}" class="btn btn-xs btn-info">编辑</a> <a href="/jasset/group_edit/?id={{ post.id }}" class="btn btn-xs btn-info">编辑</a>
<a href="/jasset/group_del/{{ post.id }}" class="btn btn-xs btn-danger">删除</a> <a href="/jasset/group_del/{{ post.id }}/" class="btn btn-xs btn-danger">删除</a>
</td> </td>
</tr> </tr>
{% endfor %} {% endfor %}
......
This diff is collapsed.
...@@ -73,7 +73,7 @@ ...@@ -73,7 +73,7 @@
<td class="text-center" name="j_active"> {{ post.is_active|bool2str }} </td> <td class="text-center" name="j_active"> {{ post.is_active|bool2str }} </td>
<td class="text-center" name="j_comment"> {{ post.comment }} </td> <td class="text-center" name="j_comment"> {{ post.comment }} </td>
<td class="text-center" data-editable='false'> <td class="text-center" data-editable='false'>
<a value="/jasset/{{ post.ip }}/" class="iframe btn btn-xs btn-primary">详情</a> <a href="/jasset/host_detail/?id={{ post.id }}" class="btn btn-xs btn-primary">详情</a>
{% ifnotequal session_role_id 0 %} {% ifnotequal session_role_id 0 %}
<a href="/jasset/host_edit/?id={{ post.id }}" class="btn btn-xs btn-info">编辑</a> <a href="/jasset/host_edit/?id={{ post.id }}" class="btn btn-xs btn-info">编辑</a>
<a href="/jasset/host_del/{{ post.id }}" class="btn btn-xs btn-danger">删除</a> <a href="/jasset/host_del/{{ post.id }}" class="btn btn-xs btn-danger">删除</a>
......
{% extends 'base.html' %} {% extends 'base.html' %}
{% load mytags %}
{% block content %} {% block content %}
{% include 'nav_cat_bar.html' %} {% include 'nav_cat_bar.html' %}
...@@ -8,7 +9,9 @@ ...@@ -8,7 +9,9 @@
<div class="ibox float-e-margins"> <div class="ibox float-e-margins">
<div class="ibox-content"> <div class="ibox-content">
<div class=""> <div class="">
<a target="_blank" href="/jasset/idc_add" class="btn btn-sm btn-primary "> 添加IDC </a> {% ifequal session_role_id 2 %}
<a target="_blank" href="/jasset/idc_add" class="btn btn-sm btn-primary "> 添加IDC </a>
{% endifequal %}
<form id="search_form" method="get" action="" class="pull-right mail-search"> <form id="search_form" method="get" action="" class="pull-right mail-search">
<div class="input-group"> <div class="input-group">
<input type="text" class="form-control input-sm" id="search_input" name="keyword" placeholder="Search"> <input type="text" class="form-control input-sm" id="search_input" name="keyword" placeholder="Search">
...@@ -26,7 +29,9 @@ ...@@ -26,7 +29,9 @@
<table class="table table-striped table-bordered table-hover " id="editable" > <table class="table table-striped table-bordered table-hover " id="editable" >
<thead> <thead>
<tr> <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> {% ifequal session_role_id 2 %}
<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>
{% endifequal %}
<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>
...@@ -36,14 +41,22 @@ ...@@ -36,14 +41,22 @@
<tbody> <tbody>
{% for post in contacts.object_list %} {% for post in contacts.object_list %}
<tr class="gradeX"> <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> {% ifequal session_role_id 2 %}
<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>
{% endifequal %}
<td class="text-center"> {{ post.name }} </td> <td class="text-center"> {{ post.name }} </td>
<td class="text-center"> <a href="/jasset/idc_detail/?id={{ post.id }}">{{ post.asset_set.count }}</a> </td> {% ifequal session_role_id 2 %}
<td class="text-center"> <a href="/jasset/idc_detail/?id={{ post.id }}">{{ post.asset_set.count }}</a> </td>
{% else %}
<td class="text-center"> <a href="/jasset/idc_detail/?id={{ post.id }}">{{ post|get_idc_count:dept }}</a> </td>
{% endifequal %}
<td class="text-center"> {{ post.comment }} </td> <td class="text-center"> {{ post.comment }} </td>
<td class="text-center"> <td class="text-center">
<a href="/jasset/idc_detail/?id={{ post.id }}" class="iframe btn btn-xs btn-primary">详情</a> <a href="/jasset/idc_detail/?id={{ post.id }}" class="iframe btn btn-xs btn-primary">详情</a>
<a href="/jasset/idc_edit/?id={{ post.id }}" class="btn btn-xs btn-info">编辑</a> {% ifequal session_role_id 2 %}
<a href="/jasset/idc_del/{{ post.id }}" class="btn btn-xs btn-danger">删除</a> <a href="/jasset/idc_edit/?id={{ post.id }}" class="btn btn-xs btn-info">编辑</a>
<a href="/jasset/idc_del/{{ post.id }}" class="btn btn-xs btn-danger">删除</a>
{% endifequal %}
</td> </td>
</tr> </tr>
{% endfor %} {% endfor %}
...@@ -51,8 +64,10 @@ ...@@ -51,8 +64,10 @@
</table> </table>
<div class="row"> <div class="row">
<div class="col-sm-6"> <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')" /> {% ifequal session_role_id 2 %}
<input type="button" id="alter_button" class="btn btn-warning btn-sm" name="alter_button" value="修改" onclick="alter('contents_form')" /> <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')" />
{% endifequal %}
</div> </div>
{% include 'paginator.html' %} {% include 'paginator.html' %}
</div> </div>
......
...@@ -125,8 +125,8 @@ ...@@ -125,8 +125,8 @@
var ip = $('#ip')[0].innerText; var ip = $('#ip')[0].innerText;
var start_time = $('#start_time')[0].innerText; var start_time = $('#start_time')[0].innerText;
var end_time = $('#end_time')[0].innerText; var end_time = $('#end_time')[0].innerText;
var div_username = ' 登录用户名: '+'<span class="text-info">'+username+'' + '</span>'; var div_username = ' 用户名: '+'<span class="text-info">'+username+'' + '</span>';
var div_ip = ' 登录主机: '+'<span class="text-info">' + ip + '</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 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 var title = 'JumpServer命令统计 '+ div_username + div_ip + div_time
$.ajax({url:url,success:function(data){ $.ajax({url:url,success:function(data){
...@@ -138,16 +138,6 @@ ...@@ -138,16 +138,6 @@
SOCKET_HOST: "{{ web_socket_host }}" SOCKET_HOST: "{{ web_socket_host }}"
} }
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")
});
}
function log_search(){ function log_search(){
$.ajax({ $.ajax({
type: "GET", type: "GET",
......
...@@ -92,9 +92,9 @@ ...@@ -92,9 +92,9 @@
{% for post in contacts.object_list %} {% for post in contacts.object_list %}
<tr class="gradeX"> <tr class="gradeX">
<td id="username" class="text-center"> {{ post.user }} </td> <td id="username" class="text-center"> {{ post.user }} </td>
<td id="ip" class="text-center"> {{ post.dept_name }} </td> <td id="deptname" class="text-center"> {{ post.dept_name }} </td>
<td id="ip" class="text-center"> {{ post.host }} </td> <td id="ip" class="text-center"> {{ post.host }} </td>
<td id="ip" class="text-center"> {{ post.remote_ip }} </td> <td id="remote_ip" class="text-center"> {{ post.remote_ip }} </td>
{% ifnotequal session_role_id 0 %} {% ifnotequal session_role_id 0 %}
<td class="text-center"><a class="monitor" filename="{{ post.log_path }}"> 监控 </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> <td class="text-center"><input type="button" id="cut" class="btn btn-danger btn-xs" name="cut" value="阻断" onclick='cut("{{ post.pid }}")' /></td>
...@@ -187,7 +187,6 @@ ...@@ -187,7 +187,6 @@
function log_search(){ function log_search(){
console.log('hell0')
$.ajax({ $.ajax({
type: "GET", type: "GET",
url: "/jlog/search/?env=online", url: "/jlog/search/?env=online",
...@@ -210,7 +209,7 @@ ...@@ -210,7 +209,7 @@
$.ajax({ $.ajax({
type: "GET", type: "GET",
url: g_url, url: g_url,
success: window.open("/jlog/","_self") success: window.open("/jlog/log_list/online/","_self")
}); });
} }
......
...@@ -9,7 +9,6 @@ ...@@ -9,7 +9,6 @@
<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>
<!--<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>
...@@ -20,11 +19,10 @@ ...@@ -20,11 +19,10 @@
<tr class="gradeX"> <tr class="gradeX">
<td class="text-center" id="username"> {{ post.applyer }} </td> <td class="text-center" id="username"> {{ post.applyer }} </td>
<td class="text-center" id="dept"> {{ post.dept }} </td> <td class="text-center" id="dept"> {{ post.dept }} </td>
<td class="text-center" id="ip"> {% for i in post.bisgroup|ast_to_list %} {{ i }} {% endfor %}... </td> <td class="text-center" id="ip"> {{ post.bisgroup|ast_to_list }} </td>
<td class="text-center" id="remote_ip">{% for i in post.asset|ast_to_list %} {{ i }} {% endfor %}... </td> <td class="text-center" id="remote_ip"> {{ post.asset|ast_to_list }} </td>
<td class="text-center" id="approver"> {{ post.approver }} </td> <td class="text-center" id="approver"> {{ post.approver }} </td>
<td class="text-center" id="start_time"> {{ post.date_add|date:"Y-m-d H:i:s"}} </td> <td class="text-center" id="start_time"> {{ post.date_add|date:"Y-m-d H:i:s"}} </td>
<!--<td class="text-center" id="end_time"> {{ post.date_end|date:"Y-m-d H:i:s" }} </td>-->
<td class="text-center" id=""> {{ post.comment }} </td> <td class="text-center" id=""> {{ post.comment }} </td>
<td class="text-center" data-editable='false'> <td class="text-center" data-editable='false'>
<a value="/jperm/apply_info/?uuid={{ post.uuid }}" class="iframe btn btn-xs btn-primary">详情</a> <a value="/jperm/apply_info/?uuid={{ post.uuid }}" class="iframe btn btn-xs btn-primary">详情</a>
......
...@@ -72,7 +72,11 @@ ...@@ -72,7 +72,11 @@
<td class="text-center" id="start_time"> {{ post.date_add|date:"Y-m-d H:i:s"}} </td> <td class="text-center" id="start_time"> {{ post.date_add|date:"Y-m-d H:i:s"}} </td>
<td class="text-center" id=""> {{ post.comment }} </td> <td class="text-center" id=""> {{ post.comment }} </td>
<td class="text-center" data-editable='false'> <td class="text-center" data-editable='false'>
<a value="/jperm/apply_info/?uuid={{ post.uuid }}" class="iframe btn btn-xs btn-primary">详情</a> <a value="/jperm/apply_info/?uuid={{ post.uuid }}" class="iframe btn btn-xs btn-primary">详情</a>
{% ifnotequal session_role_id 0 %}
<a href="/jperm/apply_exec/?uuid={{ post.uuid }}" class="btn btn-xs btn-info">确认</a>
<a href="/jperm/apply_del/?uuid={{ post.uuid }}" class="btn btn-xs btn-danger">删除</a>
{% endifnotequal %}
</td> </td>
</tr> </tr>
{% endfor %} {% endfor %}
......
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
<a><i class="fa fa-cube"></i> <span class="nav-label">资产管理</span><span class="fa arrow"></span></a> <a><i class="fa fa-cube"></i> <span class="nav-label">资产管理</span><span class="fa arrow"></span></a>
<ul class="nav nav-second-level"> <ul class="nav nav-second-level">
<li class="host_add host_add_multi"><a href="/jasset/host_add/">添加资产</a></li> <li class="host_add host_add_multi"><a href="/jasset/host_add/">添加资产</a></li>
<li class="host_list"><a href="/jasset/host_list/">查看资产&nbsp&nbsp</span><span class="label label-info pull-right">{{ host_active_num }}/{{ host_total_num}}</span></a></li> <li class="host_list host_detail"><a href="/jasset/host_list/">查看资产&nbsp&nbsp</span><span class="label label-info pull-right">{{ host_active_num }}/{{ host_total_num}}</span></a></li>
<li class="group_add"><a href="/jasset/group_add/">添加主机组</a></li> <li class="group_add"><a href="/jasset/group_add/">添加主机组</a></li>
<li class="group_list group_detail"><a href="/jasset/group_list/">查看主机组</a></li> <li class="group_list group_detail"><a href="/jasset/group_list/">查看主机组</a></li>
<li class="idc_add"><a href="/jasset/idc_add/">添加IDC</a></li> <li class="idc_add"><a href="/jasset/idc_add/">添加IDC</a></li>
...@@ -97,7 +97,7 @@ ...@@ -97,7 +97,7 @@
<a><i class="fa fa-cube"></i> <span class="nav-label">资产管理</span><span class="fa arrow"></span></a> <a><i class="fa fa-cube"></i> <span class="nav-label">资产管理</span><span class="fa arrow"></span></a>
<ul class="nav nav-second-level"> <ul class="nav nav-second-level">
<li class="host_add host_add_multi"><a href="/jasset/host_add/">添加资产</a></li> <li class="host_add host_add_multi"><a href="/jasset/host_add/">添加资产</a></li>
<li class="host_list"><a href="/jasset/host_list/">查看资产&nbsp&nbsp</span><span class="label label-info pull-right">{{ host_active_num }}/{{ host_total_num}}</span></a></li> <li class="host_list host_detail"><a href="/jasset/host_list/">查看资产&nbsp&nbsp</span><span class="label label-info pull-right">{{ host_active_num }}/{{ host_total_num}}</span></a></li>
<li class="group_add"><a href="/jasset/group_add/">添加主机组</a></li> <li class="group_add"><a href="/jasset/group_add/">添加主机组</a></li>
<li class="group_list group_detail"><a href="/jasset/group_list/">查看主机组</a></li> <li class="group_list group_detail"><a href="/jasset/group_list/">查看主机组</a></li>
<li class="idc_list idc_detail"><a href="/jasset/idc_list/">查看IDC</a></li> <li class="idc_list idc_detail"><a href="/jasset/idc_list/">查看IDC</a></li>
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
</li> </li>
<li class="dropdown"> <li class="dropdown">
<a class="dropdown-toggle count-info" data-toggle="dropdown" href="#"> <a class="dropdown-toggle count-info" data-toggle="dropdown" href="#">
<i class="fa fa-envelope"></i> <span class="label label-warning">16</span> <i class="fa fa-envelope"></i> <span class="label label-warning">{{ message }}</span>
</a> </a>
<ul class="dropdown-menu dropdown-messages"> <ul class="dropdown-menu dropdown-messages">
<li> <li>
...@@ -64,49 +64,6 @@ ...@@ -64,49 +64,6 @@
</li> </li>
</ul> </ul>
</li> </li>
<li class="dropdown">
<a class="dropdown-toggle count-info" data-toggle="dropdown" href="#">
<i class="fa fa-bell"></i> <span class="label label-primary">8</span>
</a>
<ul class="dropdown-menu dropdown-alerts">
<li>
<a href="mailbox.html">
<div>
<i class="fa fa-envelope fa-fw"></i> You have 16 messages
<span class="pull-right text-muted small">4 minutes ago</span>
</div>
</a>
</li>
<li class="divider"></li>
<li>
<a href="profile.html">
<div>
<i class="fa fa-twitter fa-fw"></i> 3 New Followers
<span class="pull-right text-muted small">12 minutes ago</span>
</div>
</a>
</li>
<li class="divider"></li>
<li>
<a href="grid_options.html">
<div>
<i class="fa fa-upload fa-fw"></i> Server Rebooted
<span class="pull-right text-muted small">4 minutes ago</span>
</div>
</a>
</li>
<li class="divider"></li>
<li>
<div class="text-center link-block">
<a href="notifications.html">
<strong>See All Alerts</strong>
<i class="fa fa-angle-right"></i>
</a>
</div>
</li>
</ul>
</li>
<li> <li>
<a href="/logout/"> <a href="/logout/">
<i class="fa fa-sign-out"></i> Log out <i class="fa fa-sign-out"></i> Log out
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment