Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
J
jumpserver
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ops
jumpserver
Commits
e77ec102
Commit
e77ec102
authored
Nov 08, 2015
by
halcyon
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
just do it
parent
159398b3
Hide whitespace changes
Inline
Side-by-side
Showing
22 changed files
with
630 additions
and
353 deletions
+630
-353
asset_api.py
jasset/asset_api.py
+113
-35
forms.py
jasset/forms.py
+2
-9
models.py
jasset/models.py
+17
-52
urls.py
jasset/urls.py
+2
-2
views.py
jasset/views.py
+66
-99
mytags.py
jumpserver/templatetags/mytags.py
+16
-0
style.css
static/css/style.css
+6
-0
cmdb_excel_2015_11_07_15_58.xlsx
static/files/excels/cmdb_excel_2015_11_07_15_58.xlsx
+0
-0
cmdb_excel_2015_11_07_15_59.xlsx
static/files/excels/cmdb_excel_2015_11_07_15_59.xlsx
+0
-0
cmdb_excel_2015_11_07_20_55.xlsx
static/files/excels/cmdb_excel_2015_11_07_20_55.xlsx
+0
-0
cmdb_excel_2015_11_07_20_56.xlsx
static/files/excels/cmdb_excel_2015_11_07_20_56.xlsx
+0
-0
cmdb_excel_2015_11_07_20_57.xlsx
static/files/excels/cmdb_excel_2015_11_07_20_57.xlsx
+0
-0
cmdb_excel_2015_11_07_20_58.xlsx
static/files/excels/cmdb_excel_2015_11_07_20_58.xlsx
+0
-0
cmdb_excel_2015_11_07_21_00.xlsx
static/files/excels/cmdb_excel_2015_11_07_21_00.xlsx
+0
-0
cmdb_excel_2015_11_08_14_28.xlsx
static/files/excels/cmdb_excel_2015_11_08_14_28.xlsx
+0
-0
cmdb_excel_2015_11_08_14_29.xlsx
static/files/excels/cmdb_excel_2015_11_08_14_29.xlsx
+0
-0
asset_add.html
templates/jasset/asset_add.html
+49
-51
asset_detail.html
templates/jasset/asset_detail.html
+47
-6
asset_edit.html
templates/jasset/asset_edit.html
+64
-57
asset_edit_batch.html
templates/jasset/asset_edit_batch.html
+180
-0
asset_excel_download.html
templates/jasset/asset_excel_download.html
+8
-0
asset_list.html
templates/jasset/asset_list.html
+60
-42
No files found.
jasset/asset_api.py
View file @
e77ec102
# coding: utf-8
# coding: utf-8
import
ast
import
xlsxwriter
import
xlsxwriter
from
jumpserver.api
import
*
from
jumpserver.api
import
*
from
jasset.models
import
ASSET_STATUS
,
ASSET_TYPE
,
ASSET_ENV
,
IDC
,
AssetRecord
def
group_add_asset
(
group
,
asset_id
=
None
,
asset_ip
=
None
):
def
group_add_asset
(
group
,
asset_id
=
None
,
asset_ip
=
None
):
...
@@ -99,9 +101,9 @@ def db_asset_update(**kwargs):
...
@@ -99,9 +101,9 @@ def db_asset_update(**kwargs):
#
#
#
#
# def batch_host_edit(host_
info
, j_user='', j_password=''):
# def batch_host_edit(host_
alter_dic
, j_user='', j_password=''):
# """ 批量修改主机函数 """
# """ 批量修改主机函数 """
# j_id, j_ip, j_idc, j_port, j_type, j_group, j_dept, j_active, j_comment = host_
info
# j_id, j_ip, j_idc, j_port, j_type, j_group, j_dept, j_active, j_comment = host_
alter_dic
# groups, depts = [], []
# groups, depts = [], []
# is_active = {u'是': '1', u'否': '2'}
# is_active = {u'是': '1', u'否': '2'}
# login_types = {'LDAP': 'L', 'MAP': 'M'}
# login_types = {'LDAP': 'L', 'MAP': 'M'}
...
@@ -174,34 +176,117 @@ def db_asset_update(**kwargs):
...
@@ -174,34 +176,117 @@ def db_asset_update(**kwargs):
# return httperror(request, '删除失败, 没有这个IDC!')
# return httperror(request, '删除失败, 没有这个IDC!')
SERVER_STATUS
=
{
1
:
u"已安装系统"
,
2
:
u"未安装系统"
,
3
:
u"正在安装系统"
,
4
:
u"报废"
}
def
sort_ip_list
(
ip_list
):
now
=
datetime
.
datetime
.
now
()
.
strftime
(
'
%
Y_
%
m_
%
d_
%
H_
%
M'
)
""" ip地址排序 """
file_name
=
'cmdb_excel_'
+
now
+
'.xlsx'
ip_list
.
sort
(
key
=
lambda
s
:
map
(
int
,
s
.
split
(
'.'
)))
workbook
=
xlsxwriter
.
Workbook
(
'static/excels/
%
s'
%
file_name
)
return
ip_list
worksheet
=
workbook
.
add_worksheet
(
'CMDB数据'
)
worksheet
.
set_first_sheet
()
worksheet
.
set_column
(
'A:Z'
,
15
)
def
get_tuple_name
(
asset_tuple
,
value
):
""""""
for
t
in
asset_tuple
:
if
t
[
0
]
==
value
:
return
t
[
1
]
return
''
def
get_tuple_diff
(
asset_tuple
,
field_name
,
value
):
""""""
old_name
=
get_tuple_name
(
asset_tuple
,
int
(
value
[
0
]))
if
value
[
0
]
else
u''
new_name
=
get_tuple_name
(
asset_tuple
,
int
(
value
[
1
]))
if
value
[
1
]
else
u''
alert_info
=
[
field_name
,
old_name
,
new_name
]
return
alert_info
def
asset_diff
(
before
,
after
):
"""
asset change before and after
"""
alter_dic
=
{}
before_dic
,
after_dic
=
before
,
dict
(
after
.
iterlists
())
for
k
,
v
in
before_dic
.
items
():
after_dic_values
=
after_dic
.
get
(
k
,
[])
if
k
==
'group'
:
after_dic_value
=
after_dic_values
if
len
(
after_dic_values
)
>
0
else
u''
uv
=
v
if
v
is
not
None
else
u''
else
:
after_dic_value
=
after_dic_values
[
0
]
if
len
(
after_dic_values
)
>
0
else
u''
uv
=
unicode
(
v
)
if
v
is
not
None
else
u''
if
uv
!=
after_dic_value
:
alter_dic
.
update
({
k
:
[
uv
,
after_dic_value
]})
for
k
,
v
in
alter_dic
.
items
():
if
v
==
[
None
,
u''
]:
alter_dic
.
pop
(
k
)
return
alter_dic
def
db_asset_alert
(
asset
,
username
,
alert_dic
):
"""
asset alert info to db
"""
alert_list
=
[]
asset_tuple_dic
=
{
'status'
:
ASSET_STATUS
,
'env'
:
ASSET_ENV
,
'asset_type'
:
ASSET_TYPE
}
for
field
,
value
in
alert_dic
.
iteritems
():
print
field
field_name
=
Asset
.
_meta
.
get_field_by_name
(
field
)[
0
]
.
verbose_name
if
field
==
'idc'
:
old
=
IDC
.
objects
.
filter
(
id
=
value
[
0
])
new
=
IDC
.
objects
.
filter
(
id
=
value
[
1
])
old_name
=
old
[
0
]
.
name
if
old
else
u''
new_name
=
new
[
0
]
.
name
if
new
else
u''
alert_info
=
[
field_name
,
old_name
,
new_name
]
elif
field
in
[
'status'
,
'env'
,
'asset_type'
]:
alert_info
=
get_tuple_diff
(
asset_tuple_dic
.
get
(
field
),
field_name
,
value
)
elif
field
==
'group'
:
old
,
new
=
[],
[]
for
group_id
in
value
[
0
]:
group_name
=
AssetGroup
.
objects
.
get
(
id
=
int
(
group_id
))
.
name
old
.
append
(
group_name
)
for
group_id
in
value
[
1
]:
group_name
=
AssetGroup
.
objects
.
get
(
id
=
int
(
group_id
))
.
name
new
.
append
(
group_name
)
alert_info
=
[
field_name
,
','
.
join
(
old
),
','
.
join
(
new
)]
elif
field
==
'use_default_auth'
:
pass
elif
field
==
'is_active'
:
pass
else
:
alert_info
=
[
field_name
,
unicode
(
value
[
0
]),
unicode
(
value
[
1
])]
if
'alert_info'
in
dir
():
alert_list
.
append
(
alert_info
)
if
alert_list
:
AssetRecord
.
objects
.
create
(
asset
=
asset
,
username
=
username
,
content
=
alert_list
)
def
write_excel
(
hosts
):
def
write_excel
(
asset_all
):
data
=
[]
data
=
[]
now
=
datetime
.
datetime
.
now
()
.
strftime
(
'
%
Y_
%
m_
%
d_
%
H_
%
M'
)
file_name
=
'cmdb_excel_'
+
now
+
'.xlsx'
workbook
=
xlsxwriter
.
Workbook
(
'static/files/excels/
%
s'
%
file_name
)
worksheet
=
workbook
.
add_worksheet
(
u'CMDB数据'
)
worksheet
.
set_first_sheet
()
worksheet
.
set_column
(
'A:Z'
,
14
)
title
=
[
u'主机名'
,
u'IP'
,
u'IDC'
,
u'MAC'
,
u'远控IP'
,
u'CPU'
,
u'内存'
,
u'硬盘'
,
u'操作系统'
,
u'机柜位置'
,
title
=
[
u'主机名'
,
u'IP'
,
u'IDC'
,
u'MAC'
,
u'远控IP'
,
u'CPU'
,
u'内存'
,
u'硬盘'
,
u'操作系统'
,
u'机柜位置'
,
u'资产编号'
,
u'所属业务'
,
u'机器状态'
,
u'SN'
,
u'运行服务'
,
u'备注'
]
u'所属主机组'
,
u'机器状态'
,
u'备注'
]
for
host
in
hosts
:
for
asset
in
asset_all
:
projects_list
,
services_list
=
[],
[]
group_list
=
[]
for
p
in
host
.
project
.
all
():
for
p
in
asset
.
group
.
all
():
projects_list
.
append
(
p
.
name
)
group_list
.
append
(
p
.
name
)
for
s
in
host
.
service
.
all
():
print
s
.
name
,
s
.
port
group_all
=
'/'
.
join
(
group_list
)
services_list
.
append
(
s
.
name
+
'-'
+
str
(
s
.
port
))
status
=
asset
.
get_status_display
()
projects
=
'/'
.
join
(
projects_list
)
alter_dic
=
[
asset
.
hostname
,
asset
.
ip
,
asset
.
idc
.
name
,
asset
.
mac
,
asset
.
remote_ip
,
asset
.
cpu
,
asset
.
memory
,
services
=
'/'
.
join
(
services_list
)
asset
.
disk
,
asset
.
system_type
,
asset
.
cabinet
,
group_all
,
status
,
asset
.
comment
]
status
=
SERVER_STATUS
.
get
(
int
(
host
.
status
))
data
.
append
(
alter_dic
)
info
=
[
host
.
hostname
,
host
.
eth1
,
host
.
idc
.
name
,
host
.
mac
,
host
.
remote_ip
,
host
.
cpu
,
host
.
memory
,
host
.
disk
,
host
.
system_type
,
host
.
cabinet
,
host
.
number
,
projects
,
status
,
host
.
sn
,
services
,
host
.
comment
]
data
.
append
(
info
)
print
data
format
=
workbook
.
add_format
()
format
=
workbook
.
add_format
()
format
.
set_border
(
1
)
format
.
set_border
(
1
)
format
.
set_align
(
'center'
)
format
.
set_align
(
'center'
)
...
@@ -218,17 +303,11 @@ def write_excel(hosts):
...
@@ -218,17 +303,11 @@ def write_excel(hosts):
worksheet
.
write_row
(
'A1'
,
title
,
format_title
)
worksheet
.
write_row
(
'A1'
,
title
,
format_title
)
i
=
2
i
=
2
for
info
in
data
:
for
alter_dic
in
data
:
location
=
'A'
+
str
(
i
)
location
=
'A'
+
str
(
i
)
worksheet
.
write_row
(
location
,
info
,
format
)
worksheet
.
write_row
(
location
,
alter_dic
,
format
)
i
+=
1
i
+=
1
workbook
.
close
()
workbook
.
close
()
ret
=
(
True
,
file_name
)
ret
=
(
True
,
file_name
)
return
ret
return
ret
def
sort_ip_list
(
ip_list
):
""" ip地址排序 """
ip_list
.
sort
(
key
=
lambda
s
:
map
(
int
,
s
.
split
(
'.'
)))
return
ip_list
\ No newline at end of file
jasset/forms.py
View file @
e77ec102
...
@@ -5,19 +5,12 @@ from jasset.models import IDC, Asset, AssetGroup
...
@@ -5,19 +5,12 @@ from jasset.models import IDC, Asset, AssetGroup
class
AssetForm
(
forms
.
ModelForm
):
class
AssetForm
(
forms
.
ModelForm
):
active_choice
=
(
(
1
,
"激活"
),
(
0
,
"禁用"
)
)
is_active
=
forms
.
ChoiceField
(
label
=
u"是否激活"
,
required
=
True
,
initial
=
1
,
widget
=
forms
.
RadioSelect
,
choices
=
active_choice
)
class
Meta
:
class
Meta
:
model
=
Asset
model
=
Asset
fields
=
[
fields
=
[
"ip"
,
"
second
_ip"
,
"hostname"
,
"port"
,
"group"
,
"username"
,
"password"
,
"use_default_auth"
,
"ip"
,
"
other
_ip"
,
"hostname"
,
"port"
,
"group"
,
"username"
,
"password"
,
"use_default_auth"
,
"idc"
,
"mac"
,
"remote_ip"
,
"brand"
,
"cpu"
,
"memory"
,
"disk"
,
"system_type"
,
"system_version"
,
"idc"
,
"mac"
,
"remote_ip"
,
"brand"
,
"cpu"
,
"memory"
,
"disk"
,
"system_type"
,
"system_version"
,
"cabinet"
,
"position"
,
"number"
,
"status"
,
"asset_type"
,
"env"
,
"sn"
,
"is_active"
,
"comment"
"cabinet"
,
"position"
,
"number"
,
"status"
,
"asset_type"
,
"env"
,
"sn"
,
"is_active"
,
"comment"
]
]
...
...
jasset/models.py
View file @
e77ec102
...
@@ -4,19 +4,19 @@ import datetime
...
@@ -4,19 +4,19 @@ import datetime
from
django.db
import
models
from
django.db
import
models
from
juser.models
import
User
,
UserGroup
from
juser.models
import
User
,
UserGroup
ENVIRONMENT
=
(
ASSET_ENV
=
(
(
0
,
U'生产环境'
),
(
1
,
U'生产环境'
),
(
1
,
U'测试环境'
)
(
2
,
U'测试环境'
)
)
)
ASSET_STATUS
=
(
ASSET_STATUS
=
(
(
0
,
u"已使用"
),
(
1
,
u"已使用"
),
(
1
,
u"未使用"
),
(
2
,
u"未使用"
),
(
2
,
u"报废"
)
(
3
,
u"报废"
)
)
)
ASSET_TYPE
=
(
ASSET_TYPE
=
(
(
0
,
u"服务器"
),
(
1
,
u"服务器"
),
(
2
,
u"网络设备"
),
(
2
,
u"网络设备"
),
(
3
,
u"其他"
)
(
3
,
u"其他"
)
)
)
...
@@ -33,49 +33,6 @@ class AssetGroup(models.Model):
...
@@ -33,49 +33,6 @@ class AssetGroup(models.Model):
def
__unicode__
(
self
):
def
__unicode__
(
self
):
return
self
.
name
return
self
.
name
def
get_asset
(
self
):
return
self
.
asset_set
.
all
()
def
get_asset_info
(
self
,
printable
=
False
):
assets
=
self
.
get_asset
()
ip_comment
=
{}
for
asset
in
assets
:
ip_comment
[
asset
.
ip
]
=
asset
.
comment
for
ip
in
sorted
(
ip_comment
):
if
ip_comment
[
ip
]:
print
'
%-15
s --
%
s'
%
(
ip
,
ip_comment
[
ip
])
else
:
print
'
%-15
s'
%
ip
print
''
def
get_asset_num
(
self
):
return
len
(
self
.
get_asset
())
def
get_user_group
(
self
):
perm_list
=
self
.
perm_set
.
all
()
user_group_list
=
[]
for
perm
in
perm_list
:
user_group_list
.
append
(
perm
.
user_group
)
return
user_group_list
def
get_user
(
self
):
user_list
=
[]
user_group_list
=
self
.
get_user_group
()
for
user_group
in
user_group_list
:
user_list
.
extend
(
user_group
.
user_set
.
all
())
return
user_list
def
is_permed
(
self
,
user
=
None
,
user_group
=
None
):
if
user
:
if
user
in
self
.
get_user
():
return
True
if
user_group
:
if
user_group
in
self
.
get_user_group
():
return
True
return
False
class
IDC
(
models
.
Model
):
class
IDC
(
models
.
Model
):
name
=
models
.
CharField
(
max_length
=
32
,
verbose_name
=
u'机房名称'
)
name
=
models
.
CharField
(
max_length
=
32
,
verbose_name
=
u'机房名称'
)
...
@@ -101,7 +58,7 @@ class Asset(models.Model):
...
@@ -101,7 +58,7 @@ class Asset(models.Model):
asset modle
asset modle
"""
"""
ip
=
models
.
IPAddressField
(
unique
=
True
,
verbose_name
=
u"主机IP"
)
ip
=
models
.
IPAddressField
(
unique
=
True
,
verbose_name
=
u"主机IP"
)
second
_ip
=
models
.
CharField
(
max_length
=
255
,
blank
=
True
,
null
=
True
,
verbose_name
=
u"其他IP"
)
other
_ip
=
models
.
CharField
(
max_length
=
255
,
blank
=
True
,
null
=
True
,
verbose_name
=
u"其他IP"
)
hostname
=
models
.
CharField
(
max_length
=
64
,
blank
=
True
,
null
=
True
,
verbose_name
=
u"主机名"
)
hostname
=
models
.
CharField
(
max_length
=
64
,
blank
=
True
,
null
=
True
,
verbose_name
=
u"主机名"
)
port
=
models
.
IntegerField
(
max_length
=
6
,
verbose_name
=
u"端口号"
)
port
=
models
.
IntegerField
(
max_length
=
6
,
verbose_name
=
u"端口号"
)
group
=
models
.
ManyToManyField
(
AssetGroup
,
blank
=
True
,
null
=
True
,
verbose_name
=
u"所属主机组"
)
group
=
models
.
ManyToManyField
(
AssetGroup
,
blank
=
True
,
null
=
True
,
verbose_name
=
u"所属主机组"
)
...
@@ -122,7 +79,7 @@ class Asset(models.Model):
...
@@ -122,7 +79,7 @@ class Asset(models.Model):
number
=
models
.
CharField
(
max_length
=
32
,
blank
=
True
,
null
=
True
,
verbose_name
=
u'资产编号'
)
number
=
models
.
CharField
(
max_length
=
32
,
blank
=
True
,
null
=
True
,
verbose_name
=
u'资产编号'
)
status
=
models
.
IntegerField
(
max_length
=
2
,
choices
=
ASSET_STATUS
,
blank
=
True
,
null
=
True
,
default
=
1
,
verbose_name
=
u"机器状态"
)
status
=
models
.
IntegerField
(
max_length
=
2
,
choices
=
ASSET_STATUS
,
blank
=
True
,
null
=
True
,
default
=
1
,
verbose_name
=
u"机器状态"
)
asset_type
=
models
.
IntegerField
(
max_length
=
2
,
choices
=
ASSET_TYPE
,
blank
=
True
,
null
=
True
,
verbose_name
=
u"主机类型"
)
asset_type
=
models
.
IntegerField
(
max_length
=
2
,
choices
=
ASSET_TYPE
,
blank
=
True
,
null
=
True
,
verbose_name
=
u"主机类型"
)
env
=
models
.
IntegerField
(
max_length
=
2
,
choices
=
ENVIRONMENT
,
blank
=
True
,
null
=
True
,
verbose_name
=
u"运行环境"
)
env
=
models
.
IntegerField
(
max_length
=
2
,
choices
=
ASSET_ENV
,
blank
=
True
,
null
=
True
,
verbose_name
=
u"运行环境"
)
sn
=
models
.
CharField
(
max_length
=
32
,
blank
=
True
,
null
=
True
,
verbose_name
=
u"SN编号"
)
sn
=
models
.
CharField
(
max_length
=
32
,
blank
=
True
,
null
=
True
,
verbose_name
=
u"SN编号"
)
date_added
=
models
.
DateTimeField
(
auto_now
=
True
,
default
=
datetime
.
datetime
.
now
(),
null
=
True
)
date_added
=
models
.
DateTimeField
(
auto_now
=
True
,
default
=
datetime
.
datetime
.
now
(),
null
=
True
)
is_active
=
models
.
BooleanField
(
default
=
True
,
verbose_name
=
u"是否激活"
)
is_active
=
models
.
BooleanField
(
default
=
True
,
verbose_name
=
u"是否激活"
)
...
@@ -132,6 +89,14 @@ class Asset(models.Model):
...
@@ -132,6 +89,14 @@ class Asset(models.Model):
return
self
.
ip
return
self
.
ip
class
AssetRecord
(
models
.
Model
):
asset
=
models
.
ForeignKey
(
Asset
)
username
=
models
.
CharField
(
max_length
=
30
,
null
=
True
)
alert_time
=
models
.
DateTimeField
(
auto_now_add
=
True
)
content
=
models
.
TextField
(
null
=
True
,
blank
=
True
)
comment
=
models
.
TextField
(
null
=
True
,
blank
=
True
)
class
AssetAlias
(
models
.
Model
):
class
AssetAlias
(
models
.
Model
):
user
=
models
.
ForeignKey
(
User
)
user
=
models
.
ForeignKey
(
User
)
asset
=
models
.
ForeignKey
(
Asset
)
asset
=
models
.
ForeignKey
(
Asset
)
...
...
jasset/urls.py
View file @
e77ec102
...
@@ -12,7 +12,6 @@ urlpatterns = patterns('',
...
@@ -12,7 +12,6 @@ urlpatterns = patterns('',
url
(
r'^asset_del/$'
,
asset_del
),
url
(
r'^asset_del/$'
,
asset_del
),
url
(
r"^asset_detail/$"
,
asset_detail
),
url
(
r"^asset_detail/$"
,
asset_detail
),
url
(
r'^asset_edit/$'
,
asset_edit
),
url
(
r'^asset_edit/$'
,
asset_edit
),
url
(
r'^asset_search/$'
,
asset_search
),
# url(r'^search/$', host_search),
# url(r'^search/$', host_search),
# url(r"^host_detail/$", host_detail),
# url(r"^host_detail/$", host_detail),
# url(r"^dept_host_ajax/$", dept_host_ajax),
# url(r"^dept_host_ajax/$", dept_host_ajax),
...
@@ -22,6 +21,6 @@ urlpatterns = patterns('',
...
@@ -22,6 +21,6 @@ urlpatterns = patterns('',
url
(
r'^group_detail/$'
,
group_detail
),
url
(
r'^group_detail/$'
,
group_detail
),
# url(r'^group_del_host/$', group_del_host),
# url(r'^group_del_host/$', group_del_host),
# url(r'^host_edit/batch/$', hos
t_edit_batch),
url
(
r'^asset_edit_batch/$'
,
asse
t_edit_batch
),
# url(r'^host_edit_common/batch/$', host_edit_common_batch),
# url(r'^host_edit_common/batch/$', host_edit_common_batch),
)
)
\ No newline at end of file
jasset/views.py
View file @
e77ec102
...
@@ -146,8 +146,10 @@ def asset_add(request):
...
@@ -146,8 +146,10 @@ def asset_add(request):
af
=
AssetForm
()
af
=
AssetForm
()
if
request
.
method
==
'POST'
:
if
request
.
method
==
'POST'
:
af_post
=
AssetForm
(
request
.
POST
)
af_post
=
AssetForm
(
request
.
POST
)
ip
=
request
.
POST
.
get
(
'ip'
)
print
af_post
ip
=
request
.
POST
.
get
(
'ip'
,
''
)
is_active
=
True
if
request
.
POST
.
get
(
'is_active'
)
==
'1'
else
False
use_default_auth
=
request
.
POST
.
get
(
'use_default_auth'
,
''
)
try
:
try
:
if
Asset
.
objects
.
filter
(
ip
=
str
(
ip
)):
if
Asset
.
objects
.
filter
(
ip
=
str
(
ip
)):
error
=
u'该IP
%
s 已存在!'
%
ip
error
=
u'该IP
%
s 已存在!'
%
ip
...
@@ -159,8 +161,14 @@ def asset_add(request):
...
@@ -159,8 +161,14 @@ def asset_add(request):
else
:
else
:
if
af_post
.
is_valid
():
if
af_post
.
is_valid
():
asset_save
=
af_post
.
save
(
commit
=
False
)
asset_save
=
af_post
.
save
(
commit
=
False
)
if
not
use_default_auth
:
password
=
request
.
POST
.
get
(
'password'
,
''
)
password_encode
=
CRYPTOR
.
encrypt
(
password
)
asset_save
.
password
=
password_encode
asset_save
.
is_active
=
True
if
is_active
else
False
asset_save
.
save
()
asset_save
.
save
()
af_post
.
save_m2m
()
af_post
.
save_m2m
()
msg
=
u'主机
%
s 添加成功'
%
ip
msg
=
u'主机
%
s 添加成功'
%
ip
else
:
else
:
esg
=
u'主机
%
s 添加失败'
%
ip
esg
=
u'主机
%
s 添加失败'
%
ip
...
@@ -168,30 +176,6 @@ def asset_add(request):
...
@@ -168,30 +176,6 @@ def asset_add(request):
return
my_render
(
'jasset/asset_add.html'
,
locals
(),
request
)
return
my_render
(
'jasset/asset_add.html'
,
locals
(),
request
)
@require_role
(
role
=
'user'
)
def
asset_list
(
request
):
"""
list assets
列出资产表
"""
header_title
,
path1
,
path2
=
u'查看主机'
,
u'资产管理'
,
u'查看主机'
idc_all
=
IDC
.
objects
.
filter
()
asset_group_all
=
AssetGroup
.
objects
.
all
()
asset_type
=
ASSET_TYPE
asset_status
=
ASSET_STATUS
keyword
=
request
.
GET
.
get
(
'keyword'
,
''
)
gid
=
request
.
GET
.
get
(
'gid'
,
''
)
# asset group id
sid
=
request
.
GET
.
get
(
'sid'
,
''
)
assets_list
=
Asset
.
objects
.
all
()
.
order_by
(
'ip'
)
if
keyword
:
assets_list
=
assets_list
.
filter
(
Q
(
ip__contains
=
keyword
)
|
Q
(
comment__contains
=
keyword
))
.
distinct
()
.
order_by
(
'ip'
)
assets_list
,
p
,
assets
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
assets_list
,
request
)
return
my_render
(
'jasset/asset_list.html'
,
locals
(),
request
)
@require_role
(
'admin'
)
@require_role
(
'admin'
)
def
asset_del
(
request
):
def
asset_del
(
request
):
"""
"""
...
@@ -223,8 +207,9 @@ def asset_edit(request):
...
@@ -223,8 +207,9 @@ def asset_edit(request):
header_title
,
path1
,
path2
=
u'修改资产'
,
u'资产管理'
,
u'修改资产'
header_title
,
path1
,
path2
=
u'修改资产'
,
u'资产管理'
,
u'修改资产'
asset_id
=
request
.
GET
.
get
(
'id'
,
''
)
asset_id
=
request
.
GET
.
get
(
'id'
,
''
)
if
not
asset_id
:
username
=
request
.
session
.
get
(
'username'
,
'admin'
)
return
HttpResponse
(
'没有该主机'
)
# if not asset_id:
# return HttpResponse('没有该主机')
asset
=
get_object
(
Asset
,
id
=
asset_id
)
asset
=
get_object
(
Asset
,
id
=
asset_id
)
af
=
AssetForm
(
instance
=
asset
)
af
=
AssetForm
(
instance
=
asset
)
if
request
.
method
==
'POST'
:
if
request
.
method
==
'POST'
:
...
@@ -239,8 +224,8 @@ def asset_edit(request):
...
@@ -239,8 +224,8 @@ def asset_edit(request):
# comment = request.POST.get('comment')
# comment = request.POST.get('comment')
# if not use_default_auth:
# if not use_default_auth:
#
username = request.POST.get('username')
# username = request.POST.get('username')
#
password = request.POST.get('password')
# password = request.POST.get('password')
# if password == asset.password:
# if password == asset.password:
# password_encode = password
# password_encode = password
# else:
# else:
...
@@ -251,7 +236,7 @@ def asset_edit(request):
...
@@ -251,7 +236,7 @@ def asset_edit(request):
try
:
try
:
asset_test
=
get_object
(
Asset
,
ip
=
ip
)
asset_test
=
get_object
(
Asset
,
ip
=
ip
)
if
asset_test
and
asset_id
!=
str
(
asset_test
.
id
):
if
asset_test
and
asset_id
!=
unicode
(
asset_test
.
id
):
error
=
u'该IP
%
s 已存在!'
%
ip
error
=
u'该IP
%
s 已存在!'
%
ip
raise
ServerError
(
error
)
raise
ServerError
(
error
)
except
ServerError
:
except
ServerError
:
...
@@ -261,6 +246,10 @@ def asset_edit(request):
...
@@ -261,6 +246,10 @@ def asset_edit(request):
af_save
=
af_post
.
save
(
commit
=
False
)
af_save
=
af_post
.
save
(
commit
=
False
)
af_save
.
save
()
af_save
.
save
()
af_post
.
save_m2m
()
af_post
.
save_m2m
()
info
=
asset_diff
(
af_post
.
__dict__
.
get
(
'initial'
),
request
.
POST
)
print
info
db_asset_alert
(
asset
,
username
,
info
)
msg
=
u'主机
%
s 修改成功'
%
ip
msg
=
u'主机
%
s 修改成功'
%
ip
else
:
else
:
emg
=
u'主机
%
s 修改失败'
%
ip
emg
=
u'主机
%
s 修改失败'
%
ip
...
@@ -269,26 +258,14 @@ def asset_edit(request):
...
@@ -269,26 +258,14 @@ def asset_edit(request):
return
my_render
(
'jasset/asset_edit.html'
,
locals
(),
request
)
return
my_render
(
'jasset/asset_edit.html'
,
locals
(),
request
)
@require_role
(
'admin'
)
def
asset_detail
(
request
):
"""
主机详情
"""
header_title
,
path1
,
path2
=
u'主机详细信息'
,
u'资产管理'
,
u'主机详情'
asset_id
=
request
.
GET
.
get
(
'id'
,
''
)
asset
=
get_object
(
Asset
,
id
=
asset_id
)
return
my_render
(
'jasset/asset_detail.html'
,
locals
(),
request
)
@require_role
(
'user'
)
@require_role
(
'user'
)
def
asset_
search
(
request
):
def
asset_
list
(
request
):
"""
"""
主机搜索
asset list view
"""
"""
idc_all
=
IDC
.
objects
.
filter
()
idc_all
=
IDC
.
objects
.
filter
()
asset_group_all
=
AssetGroup
.
objects
.
all
()
asset_group_all
=
AssetGroup
.
objects
.
all
()
asset_type
=
ASSET_TYPE
asset_type
s
=
ASSET_TYPE
asset_status
=
ASSET_STATUS
asset_status
=
ASSET_STATUS
idc_name
=
request
.
GET
.
get
(
'idc'
,
''
)
idc_name
=
request
.
GET
.
get
(
'idc'
,
''
)
...
@@ -296,30 +273,25 @@ def asset_search(request):
...
@@ -296,30 +273,25 @@ def asset_search(request):
asset_type
=
request
.
GET
.
get
(
'asset_type'
,
''
)
asset_type
=
request
.
GET
.
get
(
'asset_type'
,
''
)
status
=
request
.
GET
.
get
(
'status'
,
''
)
status
=
request
.
GET
.
get
(
'status'
,
''
)
keyword
=
request
.
GET
.
get
(
'keyword'
,
''
)
keyword
=
request
.
GET
.
get
(
'keyword'
,
''
)
export
=
request
.
GET
.
get
(
"export"
,
False
)
if
not
idc_name
and
not
asset_type
and
not
status
and
group_name
==
'all'
:
asset_find
=
Asset
.
objects
.
all
()
select_number
=
0
if
idc_name
:
else
:
asset_find
=
asset_find
.
filter
(
idc__name__contains
=
idc_name
)
select_number
=
1
if
group_name
:
if
group_name
==
'all'
:
asset_find
=
asset_find
.
filter
(
group__name__contains
=
group_name
)
asset_find
=
Asset
.
objects
.
filter
(
idc__name__contains
=
idc_name
,
if
asset_type
:
asset_type__contains
=
asset_type
,
asset_find
=
asset_find
.
filter
(
asset_type__contains
=
asset_type
)
status__contains
=
status
)
if
status
:
asset_find
=
asset_find
.
filter
(
status__contains
=
status
)
else
:
asset_find
=
Asset
.
objects
.
filter
(
if
keyword
:
idc__name__contains
=
idc_name
,
group__name__contains
=
group_name
,
asset_type__contains
=
asset_type
,
status__contains
=
status
)
if
keyword
and
select_number
==
1
:
asset_find
=
asset_find
.
filter
(
asset_find
=
asset_find
.
filter
(
Q
(
hostname__contains
=
keyword
)
|
Q
(
hostname__contains
=
keyword
)
|
Q
(
idc__name
__contains
=
keyword
)
|
Q
(
other_ip
__contains
=
keyword
)
|
Q
(
ip__contains
=
keyword
)
|
Q
(
ip__contains
=
keyword
)
|
Q
(
remote_ip__contains
=
keyword
)
|
Q
(
remote_ip__contains
=
keyword
)
|
Q
(
comment__contains
=
keyword
)
|
Q
(
comment__contains
=
keyword
)
|
...
@@ -328,35 +300,31 @@ def asset_search(request):
...
@@ -328,35 +300,31 @@ def asset_search(request):
Q
(
memory__contains
=
keyword
)
|
Q
(
memory__contains
=
keyword
)
|
Q
(
disk__contains
=
keyword
))
Q
(
disk__contains
=
keyword
))
elif
keyword
:
if
export
:
asset_find
=
Asset
.
objects
.
filter
(
s
=
write_excel
(
asset_find
)
Q
(
hostname__contains
=
keyword
)
|
if
s
[
0
]:
Q
(
idc__name__contains
=
keyword
)
|
file_name
=
s
[
1
]
Q
(
ip__contains
=
keyword
)
|
smg
=
'excel文件已生成,请点击下载!'
Q
(
remote_ip__contains
=
keyword
)
|
return
my_render
(
'jasset/asset_excel_download.html'
,
locals
(),
request
)
Q
(
comment__contains
=
keyword
)
|
assets_list
,
p
,
assets
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
asset_find
,
request
)
Q
(
group__name__contains
=
keyword
)
|
return
my_render
(
'jasset/asset_list.html'
,
locals
(),
request
)
Q
(
cpu__contains
=
keyword
)
|
Q
(
memory__contains
=
keyword
)
|
Q
(
disk__contains
=
keyword
))
# asset_find = list(set(asset_find))
@require_role
(
'admin'
)
# asset_find_dic = {}
def
asset_edit_batch
(
request
):
# asset_find_lis = []
af
=
AssetForm
()
# for server in asset_find:
asset_group_all
=
AssetGroup
.
objects
.
all
()
# if server.ip:
return
my_render
(
'jasset/asset_edit_batch.html'
,
locals
(),
request
)
# asset_find_dic[server.ip] = server
# asset_find_lis.append(server.ip)
# sort_ip_list(asset_find_lis)
@require_role
(
'admin'
)
# asset_find = []
def
asset_detail
(
request
):
# for ip in asset_find_lis:
"""
# asset_find.append(asset_find_dic[ip])
主机详情
# search_status = request.GET.get("_search", False)
"""
# if search_status:
header_title
,
path1
,
path2
=
u'主机详细信息'
,
u'资产管理'
,
u'主机详情'
# s = write_excel(asset_find)
asset_id
=
request
.
GET
.
get
(
'id'
,
''
)
# if s[0]:
asset
=
get_object
(
Asset
,
id
=
asset_id
)
# file_name = s[1]
asset_record
=
AssetRecord
.
objects
.
filter
(
asset
=
asset
)
.
order_by
(
'-alert_time'
)
# smg = 'excel文件已生成,请点击下载!'
# return my_render('cmdb/excel_download.html', locals(), request)
return
my_render
(
'jasset/asset_detail.html'
,
locals
(),
request
)
contact_list
,
p
,
contacts
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
asset_find
,
request
)
return
my_render
(
'jasset/asset_list.html'
,
locals
(),
request
)
\ No newline at end of file
jumpserver/templatetags/mytags.py
View file @
e77ec102
...
@@ -408,3 +408,19 @@ def to_avatar(role_id='0'):
...
@@ -408,3 +408,19 @@ def to_avatar(role_id='0'):
# @register.filter(name='cmd_group_split')
# @register.filter(name='cmd_group_split')
# def cmd_group_split(cmd_group):
# def cmd_group_split(cmd_group):
# return cmd_group.cmd.split(',')
# return cmd_group.cmd.split(',')
@register.filter
(
name
=
'str_to_list'
)
def
str_to_list
(
info
):
"""
str to list
"""
return
ast
.
literal_eval
(
info
)
@register.filter
(
name
=
'str_to_code'
)
def
str_to_code
(
char_str
):
if
char_str
:
return
char_str
else
:
return
u'空'
static/css/style.css
View file @
e77ec102
...
@@ -4562,3 +4562,8 @@ body.skin-3 {
...
@@ -4562,3 +4562,8 @@ body.skin-3 {
.red-fonts
{
.red-fonts
{
color
:
#ed5565
;
color
:
#ed5565
;
}
}
.form-group.required
.control-label
:after
{
content
:
" *"
;
color
:
red
;
}
\ No newline at end of file
static/files/excels/cmdb_excel_2015_11_07_15_58.xlsx
0 → 100644
View file @
e77ec102
File added
static/files/excels/cmdb_excel_2015_11_07_15_59.xlsx
0 → 100644
View file @
e77ec102
File added
static/files/excels/cmdb_excel_2015_11_07_20_55.xlsx
0 → 100644
View file @
e77ec102
File added
static/files/excels/cmdb_excel_2015_11_07_20_56.xlsx
0 → 100644
View file @
e77ec102
File added
static/files/excels/cmdb_excel_2015_11_07_20_57.xlsx
0 → 100644
View file @
e77ec102
File added
static/files/excels/cmdb_excel_2015_11_07_20_58.xlsx
0 → 100644
View file @
e77ec102
File added
static/files/excels/cmdb_excel_2015_11_07_21_00.xlsx
0 → 100644
View file @
e77ec102
File added
static/files/excels/cmdb_excel_2015_11_08_14_28.xlsx
0 → 100644
View file @
e77ec102
File added
static/files/excels/cmdb_excel_2015_11_08_14_29.xlsx
0 → 100644
View file @
e77ec102
File added
templates/jasset/asset_add.html
View file @
e77ec102
...
@@ -50,11 +50,9 @@
...
@@ -50,11 +50,9 @@
<div
class=
"hr-line-dashed"
></div>
<div
class=
"hr-line-dashed"
></div>
{{ af.idc|bootstrap_horizontal }}
{{ af.idc|bootstrap_horizontal }}
{# {{ af.use_default_auth|bootstrap_horizontal }}#}
<div
class=
"hr-line-dashed"
></div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<div
class=
"form-group"
>
<label
for=
"j_group"
class=
"col-sm-2 control-label"
>
管理账号
</label>
<label
for=
"j_group"
class=
"col-sm-2 control-label"
>
管理账号
<
span
class=
"red-fonts"
>
*
</span><
/label>
<div
class=
"col-sm-2"
>
<div
class=
"col-sm-2"
>
<div
class=
"radio i-checks"
>
<div
class=
"radio i-checks"
>
<label>
<label>
...
@@ -79,21 +77,17 @@
...
@@ -79,21 +77,17 @@
<div
class=
"hr-line-dashed"
></div>
<div
class=
"hr-line-dashed"
></div>
{{ af.group|bootstrap_horizontal }}
{{ af.group|bootstrap_horizontal }}
<div
class=
"hr-line-dashed"
></div>
{# {{ af.is_active|bootstrap_horizontal }}#}
{{ af.is_active|bootstrap_horizontal }}
{#
<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=
""
name=
"is_active"
>
激活
</label>
#}
{#
<label>
<input
type=
"radio"
name=
"is_active"
>
禁用
</label>
#}
{#
</div>
#}
{#
</div>
#}
{#
</div>
#}
<div
class=
"hr-line-dashed"
></div>
<div
class=
"hr-line-dashed"
></div>
{{ af.comment|bootstrap_horizontal }}
<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=
"is_active"
>
激活
</label>
<label>
<input
type=
"radio"
value=
"0"
name=
"is_active"
>
禁用
</label>
</div>
</div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<div
class=
"form-group"
>
...
@@ -116,43 +110,47 @@
...
@@ -116,43 +110,47 @@
{% block self_footer_js %}
{% block self_footer_js %}
<script>
<script>
$
(
'document'
).
ready
(
function
(){
$
(
'document'
).
ready
(
function
(){
$
(
'#id_use_default_auth'
).
click
(
function
(){
$
(
'#id_use_default_auth'
).
click
(
function
(){
if
(
$
(
this
).
is
(
':checked'
)){
if
(
$
(
this
).
is
(
':checked'
)){
$
(
'#admin_account'
).
css
(
'display'
,
'none'
)
$
(
'#admin_account'
).
css
(
'display'
,
'none'
)
}
}
else
{
else
{
$
(
'#admin_account'
).
css
(
'display'
,
'block'
)
$
(
'#admin_account'
).
css
(
'display'
,
'block'
)
}
}
})
})
});
});
var
required_fields
=
[
"id_hostname"
,
"id_ip"
,
"id_port"
];
$
(
'#assetForm'
).
validator
({
required_fields
.
forEach
(
function
(
field
)
{
timely
:
2
,
$
(
'label[for="'
+
field
+
'"]'
).
parent
().
addClass
(
"required"
);
theme
:
"yellow_right_effect"
,
});
rules
:
{
check_ip
:
[
/^
(\d{1,2}
|1
\d\d
|2
[
0-4
]\d
|25
[
0-5
])(\.(\d{1,2}
|1
\d\d
|2
[
0-4
]\d
|25
[
0-5
])){3}
$/
,
'ip地址不正确'
],
$
(
'#assetForm'
).
validator
({
check_port
:
[
/^
\d{1,5}
$/
,
'端口号不正确'
],
timely
:
2
,
},
theme
:
"yellow_right_effect"
,
fields
:
{
rules
:
{
"ip"
:
{
check_ip
:
[
/^
(\d{1,2}
|1
\d\d
|2
[
0-4
]\d
|25
[
0-5
])(\.(\d{1,2}
|1
\d\d
|2
[
0-4
]\d
|25
[
0-5
])){3}
$/
,
'ip地址不正确'
],
rule
:
"required;check_ip"
,
check_port
:
[
/^
\d{1,5}
$/
,
'端口号不正确'
],
tip
:
"输入IP"
,
},
ok
:
""
,
fields
:
{
msg
:
{
required
:
"必须填写!"
}
"ip"
:
{
rule
:
"required;check_ip"
,
tip
:
"输入IP"
,
ok
:
""
,
msg
:
{
required
:
"必须填写!"
}
},
"port"
:
{
rule
:
"required;check_port"
,
tip
:
"输入端口号"
,
ok
:
""
,
msg
:
{
required
:
"必须填写!"
}
}
},
},
"port"
:
{
valid
:
function
(
form
)
{
rule
:
"required;check_port"
,
form
.
submit
();
tip
:
"输入端口号"
,
ok
:
""
,
msg
:
{
required
:
"必须填写!"
}
}
}
},
});
valid
:
function
(
form
)
{
form
.
submit
();
}
});
</script>
</script>
...
...
templates/jasset/asset_detail.html
View file @
e77ec102
{% extends 'base.html' %}
{% extends 'base.html' %}
{% load mytags %}
{% load mytags %}
{% load humanize %}
{% block content %}
{% block content %}
{% include 'nav_cat_bar.html' %}
{% include 'nav_cat_bar.html' %}
...
@@ -60,7 +60,8 @@
...
@@ -60,7 +60,8 @@
</tr>
</tr>
<tr>
<tr>
<td
class=
"text-navy"
>
使用默认管理账号
</td>
<td
class=
"text-navy"
>
使用默认管理账号
</td>
<td>
{{ asset.use_default_auth|bool2str }}
</td>
{#
<td>
{{ asset.use_default_auth|bool2str }}
</td>
#}
<td>
{{ asset.use_default_auth|bool2str }} {% if not asset.use_default_auth %}
<span
class=
"text-info"
>
{{ asset.username }}
</span>
{% endif %}
</td>
</tr>
</tr>
<tr>
<tr>
<td
class=
"text-navy"
>
机房
</td>
<td
class=
"text-navy"
>
机房
</td>
...
@@ -152,8 +153,8 @@
...
@@ -152,8 +153,8 @@
</div>
</div>
<div
class=
"ibox-content"
>
<div
class=
"ibox-content"
>
<div>
<div>
<div
class=
"text-left"
>
{#
<div
class=
"text-left"
>
#}
<table
class=
"table"
>
{#
<table
class=
"table"
>
#}
{# {% if user_permed_list %}#}
{# {% if user_permed_list %}#}
{# {% for user in user_permed_list %}#}
{# {% for user in user_permed_list %}#}
{#
<tr>
#}
{#
<tr>
#}
...
@@ -165,8 +166,48 @@
...
@@ -165,8 +166,48 @@
{# {% else %}#}
{# {% else %}#}
{#
<p
class=
"text-center"
>
(暂无)
</p>
#}
{#
<p
class=
"text-center"
>
(暂无)
</p>
#}
{# {% endif %}#}
{# {% endif %}#}
</table>
{#
</table>
#}
</div>
{#
</div>
#}
</div>
</div>
<div
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"
>
</ul>
<a
class=
"close-link"
>
<i
class=
"fa fa-times"
></i>
</a>
</div>
</div>
<div
class=
"ibox-content ibox-heading"
>
<h3>
主机修改记录
</h3>
<small><i
class=
"fa fa-map-marker"
></i>
包含了此主机所有历史修改记录.
</small>
</div>
<div
class=
"ibox-content"
>
<div
class=
"feed-activity-list"
>
{% if asset_record %}
{% for r in asset_record %}
<div
class=
"feed-element"
>
<div>
<small
class=
"pull-right"
>
{{ r.alert_time|naturaltime }}
</small>
<strong
class=
"text-navy"
>
{{ r.username }}
</strong>
{% for i in r.content|str_to_list %}
<div>
{{ i.0 }} 由
<span
class=
"text-success"
>
{{ i.1|str_to_code }}
</span>
改为
<span
class=
"text-warning"
>
{{ i.2|str_to_code }}
</span></div>
{% endfor %}
<small
class=
"text-success"
>
{{ r.alert_time }}
</small>
</div>
</div>
{% endfor %}
{% else %}
<p
class=
"text-center"
>
(暂无)
</p>
{% endif %}
</div>
</div>
</div>
</div>
</div>
</div>
...
...
templates/jasset/asset_edit.html
View file @
e77ec102
...
@@ -39,6 +39,9 @@
...
@@ -39,6 +39,9 @@
<div
class=
"hr-line-dashed"
></div>
<div
class=
"hr-line-dashed"
></div>
{{ af.hostname|bootstrap_horizontal }}
{{ af.hostname|bootstrap_horizontal }}
<div
class=
"hr-line-dashed"
></div>
{{ af.other_ip|bootstrap_horizontal }}
<div
class=
"hr-line-dashed"
></div>
<div
class=
"hr-line-dashed"
></div>
{{ af.remote_ip|bootstrap_horizontal }}
{{ af.remote_ip|bootstrap_horizontal }}
...
@@ -47,25 +50,25 @@
...
@@ -47,25 +50,25 @@
<div
class=
"hr-line-dashed"
></div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<div
class=
"form-group"
>
<label
for=
"j_group"
class=
"col-sm-2 control-label"
>
管理账号
</label>
<label
for=
"j_group"
class=
"col-sm-2 control-label"
>
管理账号
<span
class=
"red-fonts"
>
*
</span>
</label>
<div
class=
"col-sm-2"
>
<div
class=
"col-sm-2"
>
<div
class=
"radio i-checks"
>
<div
class=
"radio i-checks"
>
<label>
<label>
<input
type=
"checkbox"
checked=
""
id=
"id_use_default_auth"
name=
"use_default_auth"
><span>
使用默认
</span>
<input
type=
"checkbox"
{%
if
asset
.
use_default_auth
%}
checked=
""
{%
endif
%}
id=
"id_use_default_auth"
name=
"use_default_auth"
><span>
使用默认
</span>
</label>
</label>
</div>
</div>
</div>
</div>
</div>
</div>
<div
class=
"form-group"
id=
"admin_account"
style=
"display: none"
>
<div
class=
"form-group"
id=
"admin_account"
{%
if
asset
.
use_default_auth
%}
style=
"display: none"
{%
endif
%}
>
<label
class=
"col-sm-2 control-label"
>
管理用户名
<span
class=
"red-fonts"
>
*
</span>
</label>
<label
class=
"col-sm-2 control-label"
>
管理用户名
<span
class=
"red-fonts"
>
*
</span>
</label>
<div
class=
"col-sm-3"
>
<div
class=
"col-sm-3"
>
<input
type=
"text"
placeholder=
"Username
"
name=
"username"
class=
"form-control"
>
<input
type=
"text"
value=
"{{ asset.username }}
"
name=
"username"
class=
"form-control"
>
</div>
</div>
<label
class=
"col-sm-1 control-label"
>
密码
<span
class=
"red-fonts"
>
*
</span>
</label>
<label
class=
"col-sm-1 control-label"
>
密码
<span
class=
"red-fonts"
>
*
</span>
</label>
<div
class=
"col-sm-4"
>
<div
class=
"col-sm-4"
>
<input
type=
"password"
placeholder=
"Password
"
name=
"password"
class=
"form-control"
>
<input
type=
"password"
value=
"{{ asset.password }}
"
name=
"password"
class=
"form-control"
>
</div>
</div>
</div>
</div>
...
@@ -109,23 +112,23 @@
...
@@ -109,23 +112,23 @@
<div
class=
"hr-line-dashed"
></div>
<div
class=
"hr-line-dashed"
></div>
{{ af.status|bootstrap_horizontal }}
{{ af.status|bootstrap_horizontal }}
<div
class=
"hr-line-dashed"
></div>
{{ af.is_active|bootstrap_horizontal }}
{#
<div
class=
"hr-line-dashed"
></div>
#}
{#
<div
class=
"hr-line-dashed"
></div>
#}
{#
<div
class=
"form-group"
><label
class=
"col-sm-2 control-label"
>
是否激活
<span
class=
"red-fonts"
>
*
</span>
</label>
#}
{# {{ af.is_active|bootstrap_horizontal }}#}
{#
<div
class=
"col-sm-8"
>
#}
{#
<div
class=
"radio i-checks"
>
#}
<div
class=
"hr-line-dashed"
></div>
{# {% ifequal asset.is_active 1 %}#}
<div
class=
"form-group"
><label
class=
"col-sm-2 control-label"
>
是否激活
<span
class=
"red-fonts"
>
*
</span>
</label>
{#
<label>
<input
type=
"radio"
checked=
""
value=
"1"
name=
"is_active"
>
激活
</label>
#}
<div
class=
"col-sm-8"
>
{#
<label>
<input
type=
"radio"
value=
"0"
name=
"is_active"
>
禁用
</label>
#}
<div
class=
"radio i-checks"
>
{# {% else %}#}
{% ifequal asset.is_active 1 %}
{#
<label>
<input
type=
"radio"
value=
"1"
name=
"is_active"
>
激活
</label>
#}
<label>
<input
type=
"radio"
checked=
""
value=
"1"
name=
"is_active"
>
激活
</label>
{#
<label>
<input
type=
"radio"
checked=
""
value=
"0"
name=
"is_active"
>
禁用
</label>
#}
<label>
<input
type=
"radio"
value=
"0"
name=
"is_active"
>
禁用
</label>
{# {% endifequal %}#}
{% else %}
{#
</div>
#}
<label>
<input
type=
"radio"
value=
"1"
name=
"is_active"
>
激活
</label>
{#
</div>
#}
<label>
<input
type=
"radio"
checked=
""
value=
"0"
name=
"is_active"
>
禁用
</label>
{#
</div>
#}
{% endifequal %}
</div>
</div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"hr-line-dashed"
></div>
{{ af.comment|bootstrap_horizontal }}
{{ af.comment|bootstrap_horizontal }}
...
@@ -151,43 +154,47 @@
...
@@ -151,43 +154,47 @@
{% block self_footer_js %}
{% block self_footer_js %}
<script>
<script>
$
(
'document'
).
ready
(
function
(){
$
(
'document'
).
ready
(
function
(){
$
(
'#id_use_default_auth'
).
click
(
function
(){
$
(
'#id_use_default_auth'
).
click
(
function
(){
if
(
$
(
this
).
is
(
':checked'
)){
if
(
$
(
this
).
is
(
':checked'
)){
$
(
'#admin_account'
).
css
(
'display'
,
'none'
)
$
(
'#admin_account'
).
css
(
'display'
,
'none'
)
}
}
else
{
else
{
$
(
'#admin_account'
).
css
(
'display'
,
'block'
)
$
(
'#admin_account'
).
css
(
'display'
,
'block'
)
}
}
})
})
});
});
var
required_fields
=
[
"id_ip"
,
"id_port"
];
$
(
'#assetForm'
).
validator
({
required_fields
.
forEach
(
function
(
field
)
{
timely
:
2
,
$
(
'label[for="'
+
field
+
'"]'
).
parent
().
addClass
(
"required"
);
theme
:
"yellow_right_effect"
,
});
rules
:
{
check_ip
:
[
/^
(\d{1,2}
|1
\d\d
|2
[
0-4
]\d
|25
[
0-5
])(\.(\d{1,2}
|1
\d\d
|2
[
0-4
]\d
|25
[
0-5
])){3}
$/
,
'ip地址不正确'
],
$
(
'#assetForm'
).
validator
({
check_port
:
[
/^
\d{1,5}
$/
,
'端口号不正确'
],
timely
:
2
,
},
theme
:
"yellow_right_effect"
,
fields
:
{
rules
:
{
"ip"
:
{
check_ip
:
[
/^
(\d{1,2}
|1
\d\d
|2
[
0-4
]\d
|25
[
0-5
])(\.(\d{1,2}
|1
\d\d
|2
[
0-4
]\d
|25
[
0-5
])){3}
$/
,
'ip地址不正确'
],
rule
:
"required;check_ip"
,
check_port
:
[
/^
\d{1,5}
$/
,
'端口号不正确'
],
tip
:
"输入IP"
,
},
ok
:
""
,
fields
:
{
msg
:
{
required
:
"必须填写!"
}
"ip"
:
{
rule
:
"required;check_ip"
,
tip
:
"输入IP"
,
ok
:
""
,
msg
:
{
required
:
"必须填写!"
}
},
"port"
:
{
rule
:
"required;check_port"
,
tip
:
"输入端口号"
,
ok
:
""
,
msg
:
{
required
:
"必须填写!"
}
}
},
},
"port"
:
{
valid
:
function
(
form
)
{
rule
:
"required;check_port"
,
form
.
submit
();
tip
:
"输入端口号"
,
ok
:
""
,
msg
:
{
required
:
"必须填写!"
}
}
}
},
});
valid
:
function
(
form
)
{
form
.
submit
();
}
});
</script>
</script>
...
...
templates/jasset/asset_edit_batch.html
0 → 100644
View file @
e77ec102
<html>
<head>
<link
href=
"/static/css/bootstrap.min.css"
rel=
"stylesheet"
>
<link
href=
"/static/font-awesome/css/font-awesome.css"
rel=
"stylesheet"
>
<link
href=
"/static/css/plugins/iCheck/custom.css"
rel=
"stylesheet"
>
<link
href=
"/static/css/animate.css"
rel=
"stylesheet"
>
<link
href=
"/static/css/style.css"
rel=
"stylesheet"
>
<script
src=
"/static/js/jquery-2.1.1.js"
></script>
{#
<style>
#}
{
#
body
{
background
:
#ffffff
;}
#}
{
#
</style>
#}
</head>
{% load bootstrap %}
{% block content %}
<body>
<div
class=
"wrapper wrapper-content animated fadeInRight"
>
<div
class=
"row"
>
<div
class=
"col-lg-10"
>
<div
class=
"ibox float-e-margins"
>
<div
class=
"ibox-title"
>
<h5
class=
"text-center"
>
填写修改主机信息.
</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"
></ul>
<a
class=
"close-link"
>
<i
class=
"fa fa-times"
></i>
</a>
</div>
</div>
<div
class=
"ibox-content"
>
<form
class=
"form-horizontal"
action=
""
id=
"signupForm"
method=
"post"
name=
"horizontal"
role=
"form"
autocomplete=
"off"
>
{% csrf_token %}
<input
id=
"ids"
style=
"display: none"
>
{{ af.env|bootstrap_horizontal }}
<div
class=
"hr-line-dashed"
></div>
{{ af.idc|bootstrap_horizontal }}
<div
class=
"hr-line-dashed"
></div>
{{ af.port|bootstrap_horizontal }}
<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-2"
>
<div
class=
"radio i-checks"
>
<label>
<input
type=
"radio"
checked=
""
value=
"no_action"
name=
"use_default_auth"
><span>
不修改
</span>
</label>
</div>
<div
class=
"radio i-checks"
>
<label>
<input
type=
"radio"
name=
"use_default_auth"
><span>
使用默认
</span>
</label>
</div>
<div
class=
"radio i-checks"
>
<label>
<input
type=
"radio"
id=
"id_use_default_auth"
name=
"use_default_auth"
><span>
用户名密码
</span>
</label>
</div>
</div>
</div>
<div
class=
"form-group"
id=
"admin_account"
style=
"display: none"
>
<label
class=
"col-sm-2 control-label"
>
管理用户名
<span
class=
"red-fonts"
>
*
</span></label>
<div
class=
"col-sm-3"
>
<input
type=
"text"
placeholder=
"Username"
name=
"username"
class=
"form-control"
>
</div>
<label
class=
"col-sm-1 control-label"
>
密码
<span
class=
"red-fonts"
>
*
</span>
</label>
<div
class=
"col-sm-4"
>
<input
type=
"password"
placeholder=
"Password"
name=
"password"
class=
"form-control"
>
</div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<label
for=
"groups"
class=
"col-sm-2 control-label"
>
所属主机组
</label>
<div
class=
"col-sm-3"
>
<select
id=
"groups"
size=
"10"
class=
"form-control m-b"
multiple
>
{% for asset_group in asset_group_all %}
<option
value=
"{{ asset_group.id }}"
>
{{ asset_group.name }}
</option>
{% endfor %}
</select>
</div>
<div
class=
"col-sm-1"
>
<div
class=
"btn-group"
style=
"margin-top: 50px;"
>
<button
type=
"button"
class=
"btn btn-white"
onclick=
"move_right('groups', 'groups_selected')"
><i
class=
"fa fa-chevron-right"
></i></button>
<button
type=
"button"
class=
"btn btn-white"
onclick=
"move_left('groups_selected', 'groups')"
><i
class=
"fa fa-chevron-left"
></i>
</button>
</div>
</div>
<div
class=
"col-sm-3"
>
<div>
<select
id=
"groups_selected"
name=
"project"
class=
"form-control m-b"
size=
"10"
multiple
>
</select>
</div>
</div>
</div>
<div
class=
"hr-line-dashed"
></div>
{{ af.cabinet|bootstrap_horizontal }}
<div
class=
"hr-line-dashed"
></div>
{{ af.comment|bootstrap_horizontal }}
<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"
id=
"host_edit"
>
提交
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<script>
$
(
document
).
ready
(
function
()
{
$
(
'#host_edit'
).
click
(
function
()
{
var
args
=
{};
var
match
=
null
;
var
uuid
=
decodeURIComponent
(
location
.
search
.
substring
(
1
));
var
reg
=
/
(?:([^
&
]
+
)
=
([^
&
]
+
))
/g
;
while
((
match
=
reg
.
exec
(
uuid
))
!==
null
){
args
[
match
[
1
]]
=
match
[
2
];
}
var
ids
=
args
[
'uuid'
];
$
(
'#uuid'
).
val
(
ids
)
});
$
(
'#id_use_default_auth'
).
click
(
function
(){
if
(
$
(
this
).
is
(
':checked'
)){
$
(
'#admin_account'
).
css
(
'display'
,
'block'
)
}
else
{
$
(
'#admin_account'
).
css
(
'display'
,
'none'
)
}
})
});
function
move_left
(
from
,
to
)
{
$
(
"#"
+
from
+
" option"
).
each
(
function
(){
if
(
$
(
this
).
prop
(
"selected"
)
==
true
)
{
$
(
"#"
+
to
).
append
(
this
);
$
(
this
).
attr
(
"selected"
,
'false'
);
}
$
(
this
).
attr
(
"selected"
,
'true'
);
});
}
function
move_right
(
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>
{% endblock content %}
</body>
</html>
templates/jasset/asset_excel_download.html
0 → 100644
View file @
e77ec102
<div
class=
"col-md-12 column"
>
<div
class=
"alert alert-success alert-dismissable"
>
<button
type=
"button"
class=
"close"
data-dismiss=
"alert"
aria-hidden=
"true"
>
×
</button>
<h4>
</h4>
<strong>
Nice!
</strong>
excel文件已生成请点击
<a
href=
"/static/files/excels/{{ file_name }}"
target=
"_blank"
class=
"alert-link"
>
下载
</a>
</div>
</div>
\ No newline at end of file
templates/jasset/asset_list.html
View file @
e77ec102
...
@@ -41,7 +41,7 @@
...
@@ -41,7 +41,7 @@
<div
class=
"col-sm-2"
>
<div
class=
"col-sm-2"
>
<label>
<label>
<select
name=
"group"
class=
"form-control m-b"
onchange=
"change_info()"
>
<select
name=
"group"
class=
"form-control m-b"
onchange=
"change_info()"
>
<option
value=
"
all
"
>
主机组
</option>
<option
value=
""
>
主机组
</option>
{% for asset_group in asset_group_all %}
{% for asset_group in asset_group_all %}
{% ifequal asset_group.name group_name %}
{% ifequal asset_group.name group_name %}
<option
value=
"{{ asset_group.name }}"
selected
>
{{ asset_group.name }}
</option>
<option
value=
"{{ asset_group.name }}"
selected
>
{{ asset_group.name }}
</option>
...
@@ -55,9 +55,9 @@
...
@@ -55,9 +55,9 @@
<div
class=
"col-sm-2"
>
<div
class=
"col-sm-2"
>
<label>
<label>
<select
name=
"
server
_type"
class=
"form-control m-b"
onchange=
"change_info()"
>
<select
name=
"
asset
_type"
class=
"form-control m-b"
onchange=
"change_info()"
>
<option
value=
""
>
所有类型
</option>
<option
value=
""
>
所有类型
</option>
{% for type in asset_type %}
{% for type in asset_type
s
%}
{% ifequal type.0|int2str asset_type %}
{% ifequal type.0|int2str asset_type %}
<option
value=
"{{ type.0 }}"
selected
>
{{ type.1 }}
</option>
<option
value=
"{{ type.0 }}"
selected
>
{{ type.1 }}
</option>
{% else %}
{% else %}
...
@@ -71,35 +71,37 @@
...
@@ -71,35 +71,37 @@
<label>
<label>
<select
name=
"status"
class=
"form-control m-b"
onchange=
"change_info()"
>
<select
name=
"status"
class=
"form-control m-b"
onchange=
"change_info()"
>
<option
value=
""
>
状态
</option>
<option
value=
""
>
状态
</option>
{% for s
tatus
in asset_status %}
{% for s in asset_status %}
{% ifequal s
tatus
.0|int2str status %}
{% ifequal s.0|int2str status %}
<option
value=
"{{ s
tatus.0 }}"
selected
>
{{ statu
s.1 }}
</option>
<option
value=
"{{ s
.0 }}"
selected
>
{{
s.1 }}
</option>
{% else %}
{% else %}
<option
value=
"{{ s
tatus.0 }}"
>
{{ statu
s.1 }}
</option>
<option
value=
"{{ s
.0 }}"
>
{{
s.1 }}
</option>
{% endifequal %}
{% endifequal %}
{% endfor %}
{% endfor %}
</select>
</select>
</label>
</label>
</div>
</div>
<div>
<div
class=
"col-sm-4"
>
<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 m-b"
id=
"search_input"
name=
"keyword"
value=
"{{ keyword }}"
placeholder=
"Search"
>
<input
type=
"text"
class=
"form-control input-sm"
id=
"search_input"
name=
"keyword"
placeholder=
"Search"
>
<input
type=
"text"
style=
"display: none"
>
<input
type=
"text"
style=
"display: none"
>
<div
class=
"input-group-btn"
>
<div
class=
"input-group-btn"
>
<button
id=
'search_btn'
href=
"/jasset/asset_list/?search=true"
type=
"button"
class=
"btn btn-xm btn-primary search-btn"
onclick=
"change_info()"
>
<button
type=
"submit"
class=
"btn btn-sm btn-primary"
>
- 搜索 -
- 搜索 -
</button>
</button>
<button
type=
"button"
href=
"/jasset/asset_list/?export=true"
name=
"export"
class=
"btn btn-xm btn-success search-btn-excel"
onclick=
"return false"
>
</div>
- 导出 -
</button>
</div>
</div>
</
form
>
</
div
>
</div>
</div>
<div
id=
"export"
></div>
<table
class=
"table table-striped table-bordered table-hover "
id=
"editable"
name=
"editable"
>
<table
class=
"table table-striped table-bordered table-hover "
id=
"editable"
name=
"editable"
>
<thead>
<thead>
<tr>
<tr>
<th
class=
"text-center"
>
<th
class=
"text-center"
>
<input
id=
"checkall"
type=
"checkbox"
class=
"i-checks"
name=
"checkall"
value=
"checkall"
data-editable=
'false'
onclick=
"check_all('
contents
_form')"
>
<input
id=
"checkall"
type=
"checkbox"
class=
"i-checks"
name=
"checkall"
value=
"checkall"
data-editable=
'false'
onclick=
"check_all('
asset
_form')"
>
</th>
</th>
<th
class=
"text-center"
name=
"ip"
>
IP地址
</th>
<th
class=
"text-center"
name=
"ip"
>
IP地址
</th>
<th
class=
"text-center"
>
主机名
</th>
<th
class=
"text-center"
>
主机名
</th>
...
@@ -119,7 +121,7 @@
...
@@ -119,7 +121,7 @@
<td
class=
"text-center"
>
{{ asset.ip }}
</td>
<td
class=
"text-center"
>
{{ asset.ip }}
</td>
<td
class=
"text-center"
>
{{ asset.hostname }}
</td>
<td
class=
"text-center"
>
{{ asset.hostname }}
</td>
<td
class=
"text-center"
>
{{ asset.idc.name }}
</td>
<td
class=
"text-center"
>
{{ asset.idc.name }}
</td>
<td
class=
"text-center"
>
{{ asset.
port
}}
</td>
<td
class=
"text-center"
>
{{ asset.
group.all|group_str2
}}
</td>
<td
class=
"text-center"
>
{{ asset.cpu }}|{{ asset.memory }}|{{ asset.disk }}
</td>
<td
class=
"text-center"
>
{{ asset.cpu }}|{{ asset.memory }}|{{ asset.disk }}
</td>
<td
class=
"text-center"
>
{{ asset.use_default_auth|bool2str }}
</td>
<td
class=
"text-center"
>
{{ asset.use_default_auth|bool2str }}
</td>
<td
class=
"text-center"
data-editable=
'false'
>
<td
class=
"text-center"
data-editable=
'false'
>
...
@@ -136,12 +138,12 @@
...
@@ -136,12 +138,12 @@
<div
class=
"row"
>
<div
class=
"row"
>
<div
class=
"col-sm-6"
>
<div
class=
"col-sm-6"
>
<input
type=
"button"
id=
"asset_del"
class=
"btn btn-danger btn-sm"
name=
"del_button"
value=
"删除"
/>
<input
type=
"button"
id=
"asset_del"
class=
"btn btn-danger btn-sm"
name=
"del_button"
value=
"删除"
/>
<
input
type=
"button"
id=
"alter_button"
class=
"btn btn-warning btn-sm"
name=
"alter_button"
value=
"修改"
onclick=
"alter('contents_form')"
/
>
<
a
value=
"/jasset/asset_edit_batch/"
type=
"button"
class=
"btn btn-sm btn-warning iframe"
>
修改
</a
>
</div>
</div>
{% include 'paginator.html' %}
{% include 'paginator.html' %}
</div>
</div>
</
div
>
</
form
>
</
form
>
</
div
>
</div>
</div>
</div>
</div>
</div>
</div>
...
@@ -178,23 +180,41 @@
...
@@ -178,23 +180,41 @@
})
})
});
});
$
(
".iframe"
).
on
(
'click'
,
function
(){
function
alter
(
form
)
{
var
ids
=
getIDall
();
selectData
=
GetTableDataBox
();
if
(
ids
==
''
){
console
.
log
(
selectData
[
0
])
alert
(
"请至少选择一行!"
);
if
(
selectData
[
1
]
!=
0
)
{
return
false
;
$
.
ajax
({
}
type
:
"post"
,
var
url
=
$
(
this
).
attr
(
"value"
)
+
'?id='
+
ids
;
url
:
"/jasset/host_edit/batch/"
,
index
=
$
.
layer
({
data
:
{
"editable"
:
selectData
[
0
],
"len_table"
:
selectData
[
1
]},
type
:
2
,
success
:
function
(
data
)
{
title
:
'JumpServer - 批量修改主机'
,
alert
(
"修改成功"
);
maxmin
:
true
,
window
.
open
(
"/jasset/host_list/"
,
"_self"
);
shift
:
'top'
,
error
:
window
.
open
(
"/jasset/host_list/"
,
"_self"
);
border
:
[
2
,
0.3
,
'#1AB394'
],
shade
:
[
0.5
,
'#000000'
],
shadeClose
:
true
,
area
:
[
'800px'
,
'600px'
],
iframe
:
{
src
:
url
},
close
:
function
(){
location
.
replace
(
location
.
href
);
}
}
});
});
}
});
}
$
(
'.search-btn-excel'
).
unbind
(
'click'
).
bind
(
'click'
,
function
(){
var
url
=
$
(
this
).
attr
(
"href"
);
console
.
log
(
url
);
$
.
ajax
({
type
:
"GET"
,
url
:
url
,
data
:
$
(
"#asset_form"
).
serialize
(),
success
:
function
(
data
)
{
$
(
"#export"
).
html
(
data
);
}
});
});
$
(
'#asset_del'
).
click
(
function
()
{
$
(
'#asset_del'
).
click
(
function
()
{
var
asset_id_all
=
getIDall
();
var
asset_id_all
=
getIDall
();
...
@@ -218,13 +238,12 @@
...
@@ -218,13 +238,12 @@
function
change_info
(){
function
change_info
(){
var
args
=
$
(
"#asset_form"
).
serialize
();
var
args
=
$
(
"#asset_form"
).
serialize
();
window
.
location
=
"/jasset/asset_
search
/?"
+
args
window
.
location
=
"/jasset/asset_
list
/?"
+
args
}
}
$
(
"#search_input"
).
keydown
(
function
(
e
){
$
(
"#search_input"
).
keydown
(
function
(
e
){
if
(
e
.
keyCode
==
13
){
if
(
e
.
keyCode
==
13
){
host_search
()
change_info
()
}
}
});
});
...
@@ -234,7 +253,6 @@
...
@@ -234,7 +253,6 @@
$
.
ajax
({
$
.
ajax
({
type
:
"GET"
,
type
:
"GET"
,
url
:
url
,
url
:
url
,
// data: $("#search_form").serialize(),
success
:
function
(
data
)
{
success
:
function
(
data
)
{
$
(
"#j_group_"
+
id
).
html
(
data
);
$
(
"#j_group_"
+
id
).
html
(
data
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment