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
159398b3
Commit
159398b3
authored
Nov 03, 2015
by
root
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix bugs
parent
0c0f05b6
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
138 additions
and
71 deletions
+138
-71
asset_api.py
jasset/asset_api.py
+62
-0
models.py
jasset/models.py
+18
-32
urls.py
jasset/urls.py
+1
-0
views.py
jasset/views.py
+0
-0
base.js
static/js/base.js
+9
-0
asset_list.html
templates/jasset/asset_list.html
+48
-39
No files found.
jasset/asset_api.py
View file @
159398b3
# coding: utf-8
# coding: utf-8
import
xlsxwriter
from
jumpserver.api
import
*
from
jumpserver.api
import
*
...
@@ -171,3 +173,62 @@ def db_asset_update(**kwargs):
...
@@ -171,3 +173,62 @@ def db_asset_update(**kwargs):
# else:
# else:
# return httperror(request, '删除失败, 没有这个IDC!')
# return httperror(request, '删除失败, 没有这个IDC!')
SERVER_STATUS
=
{
1
:
u"已安装系统"
,
2
:
u"未安装系统"
,
3
:
u"正在安装系统"
,
4
:
u"报废"
}
now
=
datetime
.
datetime
.
now
()
.
strftime
(
'
%
Y_
%
m_
%
d_
%
H_
%
M'
)
file_name
=
'cmdb_excel_'
+
now
+
'.xlsx'
workbook
=
xlsxwriter
.
Workbook
(
'static/excels/
%
s'
%
file_name
)
worksheet
=
workbook
.
add_worksheet
(
'CMDB数据'
)
worksheet
.
set_first_sheet
()
worksheet
.
set_column
(
'A:Z'
,
15
)
def
write_excel
(
hosts
):
data
=
[]
title
=
[
u'主机名'
,
u'IP'
,
u'IDC'
,
u'MAC'
,
u'远控IP'
,
u'CPU'
,
u'内存'
,
u'硬盘'
,
u'操作系统'
,
u'机柜位置'
,
u'资产编号'
,
u'所属业务'
,
u'机器状态'
,
u'SN'
,
u'运行服务'
,
u'备注'
]
for
host
in
hosts
:
projects_list
,
services_list
=
[],
[]
for
p
in
host
.
project
.
all
():
projects_list
.
append
(
p
.
name
)
for
s
in
host
.
service
.
all
():
print
s
.
name
,
s
.
port
services_list
.
append
(
s
.
name
+
'-'
+
str
(
s
.
port
))
projects
=
'/'
.
join
(
projects_list
)
services
=
'/'
.
join
(
services_list
)
status
=
SERVER_STATUS
.
get
(
int
(
host
.
status
))
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
.
set_border
(
1
)
format
.
set_align
(
'center'
)
format_title
=
workbook
.
add_format
()
format_title
.
set_border
(
1
)
format_title
.
set_bg_color
(
'#cccccc'
)
format_title
.
set_align
(
'center'
)
format_title
.
set_bold
()
format_ave
=
workbook
.
add_format
()
format_ave
.
set_border
(
1
)
format_ave
.
set_num_format
(
'0.00'
)
worksheet
.
write_row
(
'A1'
,
title
,
format_title
)
i
=
2
for
info
in
data
:
location
=
'A'
+
str
(
i
)
worksheet
.
write_row
(
location
,
info
,
format
)
i
+=
1
workbook
.
close
()
ret
=
(
True
,
file_name
)
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/models.py
View file @
159398b3
...
@@ -4,6 +4,23 @@ import datetime
...
@@ -4,6 +4,23 @@ 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
=
(
(
0
,
U'生产环境'
),
(
1
,
U'测试环境'
)
)
ASSET_STATUS
=
(
(
0
,
u"已使用"
),
(
1
,
u"未使用"
),
(
2
,
u"报废"
)
)
ASSET_TYPE
=
(
(
0
,
u"服务器"
),
(
2
,
u"网络设备"
),
(
3
,
u"其他"
)
)
class
AssetGroup
(
models
.
Model
):
class
AssetGroup
(
models
.
Model
):
GROUP_TYPE
=
(
GROUP_TYPE
=
(
...
@@ -83,21 +100,6 @@ class Asset(models.Model):
...
@@ -83,21 +100,6 @@ class Asset(models.Model):
"""
"""
asset modle
asset modle
"""
"""
ENVIRONMENT
=
(
(
0
,
U'生产环境'
),
(
1
,
U'测试环境'
)
)
SERVER_STATUS
=
(
(
0
,
u"已使用"
),
(
1
,
u"未使用"
),
(
2
,
u"报废"
)
)
ASSET_TYPE
=
(
(
0
,
u"服务器"
),
(
2
,
u"网络设备"
),
(
3
,
u"其他"
)
)
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"
)
second_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"主机名"
)
...
@@ -118,7 +120,7 @@ class Asset(models.Model):
...
@@ -118,7 +120,7 @@ class Asset(models.Model):
cabinet
=
models
.
CharField
(
max_length
=
32
,
blank
=
True
,
null
=
True
,
verbose_name
=
u'机柜号'
)
cabinet
=
models
.
CharField
(
max_length
=
32
,
blank
=
True
,
null
=
True
,
verbose_name
=
u'机柜号'
)
position
=
models
.
IntegerField
(
max_length
=
2
,
blank
=
True
,
null
=
True
,
verbose_name
=
u'机器位置'
)
position
=
models
.
IntegerField
(
max_length
=
2
,
blank
=
True
,
null
=
True
,
verbose_name
=
u'机器位置'
)
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
=
SERVER
_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
=
ENVIRONMENT
,
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编号"
)
...
@@ -129,22 +131,6 @@ class Asset(models.Model):
...
@@ -129,22 +131,6 @@ class Asset(models.Model):
def
__unicode__
(
self
):
def
__unicode__
(
self
):
return
self
.
ip
return
self
.
ip
def
get_user
(
self
):
perm_list
=
[]
asset_group_all
=
self
.
bis_group
.
all
()
for
asset_group
in
asset_group_all
:
perm_list
.
extend
(
asset_group
.
perm_set
.
all
())
user_group_list
=
[]
for
perm
in
perm_list
:
user_group_list
.
append
(
perm
.
user_group
)
user_permed_list
=
[]
for
user_group
in
user_group_list
:
user_permed_list
.
extend
(
user_group
.
user_set
.
all
())
user_permed_list
=
list
(
set
(
user_permed_list
))
return
user_permed_list
class
AssetAlias
(
models
.
Model
):
class
AssetAlias
(
models
.
Model
):
user
=
models
.
ForeignKey
(
User
)
user
=
models
.
ForeignKey
(
User
)
...
...
jasset/urls.py
View file @
159398b3
...
@@ -12,6 +12,7 @@ urlpatterns = patterns('',
...
@@ -12,6 +12,7 @@ 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),
...
...
jasset/views.py
View file @
159398b3
This diff is collapsed.
Click to expand it.
static/js/base.js
View file @
159398b3
...
@@ -119,3 +119,11 @@ function selectAll(){
...
@@ -119,3 +119,11 @@ function selectAll(){
// })
// })
//}
//}
function
getIDall
()
{
var
check_array
=
[];
$
(
".gradeX input:checked"
).
each
(
function
()
{
var
id
=
$
(
this
).
attr
(
"value"
);
check_array
.
push
(
id
);
});
return
check_array
.
join
(
","
);
}
\ No newline at end of file
templates/jasset/asset_list.html
View file @
159398b3
...
@@ -23,22 +23,31 @@
...
@@ -23,22 +23,31 @@
</div>
</div>
<div
class=
"ibox-content"
>
<div
class=
"ibox-content"
>
<form
id=
"asset_form"
>
<div
class=
"col-sm-2"
style=
"padding-left: 0px"
>
<div
class=
"col-sm-2"
style=
"padding-left: 0px"
>
<label>
<label>
<select
name=
"change_
idc"
class=
"form-control m-b"
onchange=
"change_info()"
>
<select
name=
"
idc"
class=
"form-control m-b"
onchange=
"change_info()"
>
<option
value=
""
>
IDC机房
</option>
<option
value=
""
>
IDC机房
</option>
{% for i in idcs %}
{% for idc in idc_all %}
<option
value=
"{{i.name}}"
>
{{ i }}
</option>
{% ifequal idc.name idc_name %}
<option
value=
"{{idc.name}}"
selected
>
{{ idc.name }}
</option>
{% else %}
<option
value=
"{{idc.name}}"
>
{{ idc.name }}
</option>
{% endifequal %}
{% endfor %}
{% endfor %}
</select>
</select>
</label>
</label>
</div>
</div>
<div
class=
"col-sm-2"
>
<div
class=
"col-sm-2"
>
<label>
<label>
<select
name=
"change_project
"
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=
"all"
>
主机组
</option>
{% for i in projects %}
{% for asset_group in asset_group_all %}
<option
value=
"{{ i.name }}"
>
{{ i.name }}
</option>
{% ifequal asset_group.name group_name %}
<option
value=
"{{ asset_group.name }}"
selected
>
{{ asset_group.name }}
</option>
{% else %}
<option
value=
"{{ asset_group.name }}"
>
{{ asset_group.name }}
</option>
{% endifequal %}
{% endfor %}
{% endfor %}
</select>
</select>
</label>
</label>
...
@@ -46,20 +55,28 @@
...
@@ -46,20 +55,28 @@
<div
class=
"col-sm-2"
>
<div
class=
"col-sm-2"
>
<label>
<label>
<select
name=
"change
_type"
class=
"form-control m-b"
onchange=
"change_info()"
>
<select
name=
"server
_type"
class=
"form-control m-b"
onchange=
"change_info()"
>
<option
value=
""
>
所有类型
</option>
<option
value=
""
>
所有类型
</option>
{% for i in server_type %}
{% for type in asset_type %}
<option
value=
"{{ i.0 }}"
>
{{ i.1 }}
</option>
{% ifequal type.0|int2str asset_type %}
<option
value=
"{{ type.0 }}"
selected
>
{{ type.1 }}
</option>
{% else %}
<option
value=
"{{ type.0 }}"
>
{{ type.1 }}
</option>
{% endifequal %}
{% endfor %}
{% endfor %}
</select>
</select>
</label>
</label>
</div>
</div>
<div
class=
"col-sm-2"
>
<div
class=
"col-sm-2"
>
<label>
<label>
<select
name=
"change_type
"
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 i in server_type %}
{% for status in asset_status %}
<option
value=
"{{ i.0 }}"
>
{{ i.1 }}
</option>
{% ifequal status.0|int2str status %}
<option
value=
"{{ status.0 }}"
selected
>
{{ status.1 }}
</option>
{% else %}
<option
value=
"{{ status.0 }}"
>
{{ status.1 }}
</option>
{% endifequal %}
{% endfor %}
{% endfor %}
</select>
</select>
</label>
</label>
...
@@ -78,7 +95,6 @@
...
@@ -78,7 +95,6 @@
</form>
</form>
</div>
</div>
<form
id=
"contents_form"
name=
"contents_form"
>
<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>
...
@@ -119,13 +135,13 @@
...
@@ -119,13 +135,13 @@
</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')"
/>
<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')"
/>
<input
type=
"button"
id=
"alter_button"
class=
"btn btn-warning btn-sm"
name=
"alter_button"
value=
"修改"
onclick=
"alter('contents_form')"
/>
</div>
</div>
{% include 'paginator.html' %}
{% include 'paginator.html' %}
</div>
</div>
</form>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
...
@@ -180,38 +196,31 @@
...
@@ -180,38 +196,31 @@
}
}
}
}
function
del
(
form
)
{
$
(
'#asset_del'
).
click
(
function
()
{
var
checkboxes
=
document
.
getElementById
(
form
);
var
asset_id_all
=
getIDall
();
var
id_list
=
{};
console
.
log
(
asset_id_all
);
var
j
=
0
;
if
(
asset_id_all
==
''
){
for
(
var
i
=
0
;
i
<
checkboxes
.
elements
.
length
;
i
++
)
{
alert
(
"请至少选择一行!"
);
if
(
checkboxes
.
elements
[
i
].
type
==
"checkbox"
&&
checkboxes
.
elements
[
i
].
checked
==
true
&&
checkboxes
.
elements
[
i
].
value
!=
"checkall"
)
{
return
false
;
id_list
[
j
]
=
checkboxes
.
elements
[
i
].
value
;
j
++
;
}
}
}
if
(
confirm
(
"确定删除"
))
{
if
(
confirm
(
"确定删除"
))
{
$
.
ajax
({
$
.
ajax
({
type
:
"
POST
"
,
type
:
"
post
"
,
url
:
"/jasset/host_del/multi/"
,
data
:
{
asset_id_all
:
asset_id_all
}
,
data
:
{
"id_list"
:
id_list
,
"len_list"
:
j
}
,
url
:
"/jasset/asset_del/?arg=batch"
,
success
:
function
(
data
)
{
success
:
function
()
{
window
.
open
(
"/jasset/
hos
t_list/"
,
"_self"
);
window
.
open
(
"/jasset/
asse
t_list/"
,
"_self"
);
}
}
});
});
}
}
});
function
change_info
(){
var
args
=
$
(
"#asset_form"
).
serialize
();
window
.
location
=
"/jasset/asset_search/?"
+
args
}
}
{
#
function
host_search
(){
#
}
{
#
$
.
ajax
({
#
}
{
#
type
:
"GET"
,
#
}
{
#
url
:
"/jasset/search/"
,
#
}
{
#
data
:
$
(
"#search_form"
).
serialize
(),
#
}
{
#
success
:
function
(
data
)
{
#
}
{
#
$
(
"#contents_form"
).
html
(
data
);
#
}
{
#
}
#
}
{
#
});
#
}
{
#
}
#
}
$
(
"#search_input"
).
keydown
(
function
(
e
){
$
(
"#search_input"
).
keydown
(
function
(
e
){
if
(
e
.
keyCode
==
13
){
if
(
e
.
keyCode
==
13
){
...
...
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