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
40d2934d
Commit
40d2934d
authored
Mar 07, 2018
by
ibuler
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[Bugfix] 修复首页无法显示数据的bug
parent
cd9000e7
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
46 additions
and
27 deletions
+46
-27
system_user_detail.html
apps/assets/templates/assets/system_user_detail.html
+19
-19
api.py
apps/common/api.py
+3
-0
views.py
apps/jumpserver/views.py
+22
-6
asset_permission_list.html
apps/perms/templates/perms/asset_permission_list.html
+1
-1
models.py
apps/terminal/models.py
+1
-1
No files found.
apps/assets/templates/assets/system_user_detail.html
View file @
40d2934d
...
@@ -178,7 +178,7 @@
...
@@ -178,7 +178,7 @@
</tr>
</tr>
<tr>
<tr>
<td
colspan=
"2"
class=
"no-borders"
>
<td
colspan=
"2"
class=
"no-borders"
>
<button
type=
"button"
class=
"btn btn-info btn-sm"
id=
"btn-add-to-
cluster
"
>
{% trans 'Confirm' %}
</button>
<button
type=
"button"
class=
"btn btn-info btn-sm"
id=
"btn-add-to-
node
"
>
{% trans 'Confirm' %}
</button>
</td>
</td>
</tr>
</tr>
</form>
</form>
...
@@ -187,7 +187,7 @@
...
@@ -187,7 +187,7 @@
<tr>
<tr>
<td
><b
class=
"bdg_node"
data-gid=
{{
node
.
id
}}
>
{{ node.name }}
</b></td>
<td
><b
class=
"bdg_node"
data-gid=
{{
node
.
id
}}
>
{{ node.name }}
</b></td>
<td>
<td>
<button
class=
"btn btn-danger pull-right btn-xs btn-remove-from-
cluster
"
type=
"button"
><i
class=
"fa fa-minus"
></i></button>
<button
class=
"btn btn-danger pull-right btn-xs btn-remove-from-
node
"
type=
"button"
><i
class=
"fa fa-minus"
></i></button>
</td>
</td>
</tr>
</tr>
{% endfor %}
{% endfor %}
...
@@ -204,27 +204,27 @@
...
@@ -204,27 +204,27 @@
{% endblock %}
{% endblock %}
{% block custom_foot_js %}
{% block custom_foot_js %}
<script>
<script>
function
updateSystemUserCluster
(
cluster
s
)
{
function
updateSystemUserCluster
(
node
s
)
{
var
the_url
=
"{% url 'api-assets:system-user-detail' pk=system_user.id %}"
;
var
the_url
=
"{% url 'api-assets:system-user-detail' pk=system_user.id %}"
;
var
body
=
{
var
body
=
{
cluster
:
Object
.
assign
([],
cluster
s
)
nodes
:
Object
.
assign
([],
node
s
)
};
};
var
success
=
function
(
data
)
{
var
success
=
function
(
data
)
{
// remove all the selected groups from select > option and rendered ul element;
// remove all the selected groups from select > option and rendered ul element;
$
(
'.select2-selection__rendered'
).
empty
();
$
(
'.select2-selection__rendered'
).
empty
();
$
(
'#cluster_selected'
).
val
(
''
);
$
(
'#cluster_selected'
).
val
(
''
);
$
.
map
(
jumpserver
.
cluster
_selected
,
function
(
cluster_name
,
index
)
{
$
.
map
(
jumpserver
.
nodes
_selected
,
function
(
cluster_name
,
index
)
{
$
(
'#opt_'
+
index
).
remove
();
$
(
'#opt_'
+
index
).
remove
();
// change tr html of user groups.
// change tr html of user groups.
$
(
'.cluster_edit tbody'
).
append
(
$
(
'.cluster_edit tbody'
).
append
(
'<tr>'
+
'<tr>'
+
'<td><b class="bdg_node" data-gid="'
+
index
+
'">'
+
cluster_name
+
'</b></td>'
+
'<td><b class="bdg_node" data-gid="'
+
index
+
'">'
+
cluster_name
+
'</b></td>'
+
'<td><button class="btn btn-danger btn-xs pull-right btn-remove-from-
cluster
" type="button"><i class="fa fa-minus"></i></button></td>'
+
'<td><button class="btn btn-danger btn-xs pull-right btn-remove-from-
node
" type="button"><i class="fa fa-minus"></i></button></td>'
+
'</tr>'
'</tr>'
)
)
});
});
// clear jumpserver.groups_selected
// clear jumpserver.groups_selected
jumpserver
.
cluster
_selected
=
{};
jumpserver
.
nodes
_selected
=
{};
};
};
APIUpdateAttr
({
APIUpdateAttr
({
url
:
the_url
,
url
:
the_url
,
...
@@ -232,16 +232,16 @@ function updateSystemUserCluster(clusters) {
...
@@ -232,16 +232,16 @@ function updateSystemUserCluster(clusters) {
success
:
success
success
:
success
});
});
}
}
jumpserver
.
cluster
_selected
=
{};
jumpserver
.
nodes
_selected
=
{};
$
(
document
).
ready
(
function
()
{
$
(
document
).
ready
(
function
()
{
$
(
'.select2'
).
select2
()
$
(
'.select2'
).
select2
()
.
on
(
'select2:select'
,
function
(
evt
)
{
.
on
(
'select2:select'
,
function
(
evt
)
{
var
data
=
evt
.
params
.
data
;
var
data
=
evt
.
params
.
data
;
jumpserver
.
cluster
_selected
[
data
.
id
]
=
data
.
text
;
jumpserver
.
nodes
_selected
[
data
.
id
]
=
data
.
text
;
})
})
.
on
(
'select2:unselect'
,
function
(
evt
)
{
.
on
(
'select2:unselect'
,
function
(
evt
)
{
var
data
=
evt
.
params
.
data
;
var
data
=
evt
.
params
.
data
;
delete
jumpserver
.
cluster
_selected
[
data
.
id
];
delete
jumpserver
.
nodes
_selected
[
data
.
id
];
});
});
})
})
.
on
(
'click'
,
'#btn-auto-push'
,
function
()
{
.
on
(
'click'
,
'#btn-auto-push'
,
function
()
{
...
@@ -255,26 +255,26 @@ $(document).ready(function () {
...
@@ -255,26 +255,26 @@ $(document).ready(function () {
body
:
JSON
.
stringify
(
body
)
body
:
JSON
.
stringify
(
body
)
});
});
})
})
.
on
(
'click'
,
'#btn-add-to-
cluster
'
,
function
()
{
.
on
(
'click'
,
'#btn-add-to-
node
'
,
function
()
{
if
(
Object
.
keys
(
jumpserver
.
cluster
_selected
).
length
===
0
)
{
if
(
Object
.
keys
(
jumpserver
.
nodes
_selected
).
length
===
0
)
{
return
false
;
return
false
;
}
}
var
cluster
s
=
$
(
'.bdg_node'
).
map
(
function
()
{
var
node
s
=
$
(
'.bdg_node'
).
map
(
function
()
{
return
$
(
this
).
data
(
'gid'
);
return
$
(
this
).
data
(
'gid'
);
}).
get
();
}).
get
();
$
.
map
(
jumpserver
.
cluster
_selected
,
function
(
value
,
index
)
{
$
.
map
(
jumpserver
.
nodes
_selected
,
function
(
value
,
index
)
{
cluster
s
.
push
(
index
);
node
s
.
push
(
index
);
});
});
updateSystemUserCluster
(
cluster
s
);
updateSystemUserCluster
(
node
s
);
})
})
.
on
(
'click'
,
'.btn-remove-from-
cluster
'
,
function
()
{
.
on
(
'click'
,
'.btn-remove-from-
node
'
,
function
()
{
var
$this
=
$
(
this
);
var
$this
=
$
(
this
);
var
$tr
=
$this
.
closest
(
'tr'
);
var
$tr
=
$this
.
closest
(
'tr'
);
var
$badge
=
$tr
.
find
(
'.bdg_node'
);
var
$badge
=
$tr
.
find
(
'.bdg_node'
);
var
gid
=
$badge
.
data
(
'gid'
);
var
gid
=
$badge
.
data
(
'gid'
);
var
cluster
_name
=
$badge
.
html
()
||
$badge
.
text
();
var
node
_name
=
$badge
.
html
()
||
$badge
.
text
();
$
(
'#groups_selected'
).
append
(
$
(
'#groups_selected'
).
append
(
'<option value="'
+
gid
+
'" id="opt_'
+
gid
+
'">'
+
cluster
_name
+
'</option>'
'<option value="'
+
gid
+
'" id="opt_'
+
gid
+
'">'
+
node
_name
+
'</option>'
);
);
$tr
.
remove
();
$tr
.
remove
();
var
clusters
=
$
(
'.bdg_node'
).
map
(
function
()
{
var
clusters
=
$
(
'.bdg_node'
).
map
(
function
()
{
...
...
apps/common/api.py
View file @
40d2934d
...
@@ -97,6 +97,9 @@ class LDAPTestingAPI(APIView):
...
@@ -97,6 +97,9 @@ class LDAPTestingAPI(APIView):
class
DjangoSettingsAPI
(
APIView
):
class
DjangoSettingsAPI
(
APIView
):
def
get
(
self
,
request
):
def
get
(
self
,
request
):
if
not
settings
.
DEBUG
:
return
Response
(
'Only debug mode support'
)
configs
=
{}
configs
=
{}
for
i
in
dir
(
settings
):
for
i
in
dir
(
settings
):
if
i
.
isupper
():
if
i
.
isupper
():
...
...
apps/jumpserver/views.py
View file @
40d2934d
import
datetime
from
django.http
import
HttpResponse
from
django.http
import
HttpResponse
from
django.views.generic
import
TemplateView
,
View
from
django.views.generic
import
TemplateView
,
View
from
django.utils
import
timezone
from
django.utils
import
timezone
...
@@ -54,8 +56,14 @@ class IndexView(LoginRequiredMixin, TemplateView):
...
@@ -54,8 +56,14 @@ class IndexView(LoginRequiredMixin, TemplateView):
return
month_str
return
month_str
def
get_month_login_metrics
(
self
):
def
get_month_login_metrics
(
self
):
return
[
self
.
session_month
.
filter
(
date_start__date
=
d
)
.
count
()
data
=
[]
for
d
in
self
.
session_month_dates
]
time_min
=
datetime
.
datetime
.
min
.
time
()
time_max
=
datetime
.
datetime
.
max
.
time
()
for
d
in
self
.
session_month_dates
:
ds
=
datetime
.
datetime
.
combine
(
d
,
time_min
)
.
replace
(
tzinfo
=
timezone
.
get_current_timezone
())
de
=
datetime
.
datetime
.
combine
(
d
,
time_max
)
.
replace
(
tzinfo
=
timezone
.
get_current_timezone
())
data
.
append
(
self
.
session_month
.
filter
(
date_start__range
=
(
ds
,
de
))
.
count
())
return
data
def
get_month_active_user_metrics
(
self
):
def
get_month_active_user_metrics
(
self
):
if
self
.
session_month_dates_archive
:
if
self
.
session_month_dates_archive
:
...
@@ -121,10 +129,18 @@ class IndexView(LoginRequiredMixin, TemplateView):
...
@@ -121,10 +129,18 @@ class IndexView(LoginRequiredMixin, TemplateView):
self
.
session_week
=
Session
.
objects
.
filter
(
date_start__gt
=
week_ago
)
self
.
session_week
=
Session
.
objects
.
filter
(
date_start__gt
=
week_ago
)
self
.
session_month
=
Session
.
objects
.
filter
(
date_start__gt
=
month_ago
)
self
.
session_month
=
Session
.
objects
.
filter
(
date_start__gt
=
month_ago
)
self
.
session_month_dates
=
self
.
session_month
.
dates
(
'date_start'
,
'day'
)
self
.
session_month_dates
=
self
.
session_month
.
dates
(
'date_start'
,
'day'
)
self
.
session_month_dates_archive
=
[
self
.
session_month
.
filter
(
date_start__date
=
d
)
self
.
session_month_dates_archive
=
[]
for
d
in
self
.
session_month_dates
time_min
=
datetime
.
datetime
.
min
.
time
()
]
time_max
=
datetime
.
datetime
.
max
.
time
()
for
d
in
self
.
session_month_dates
:
ds
=
datetime
.
datetime
.
combine
(
d
,
time_min
)
.
replace
(
tzinfo
=
timezone
.
get_current_timezone
())
de
=
datetime
.
datetime
.
combine
(
d
,
time_max
)
.
replace
(
tzinfo
=
timezone
.
get_current_timezone
())
self
.
session_month_dates_archive
.
append
(
self
.
session_month
.
filter
(
date_start__range
=
(
ds
,
de
)))
context
=
{
context
=
{
'assets_count'
:
self
.
get_asset_count
(),
'assets_count'
:
self
.
get_asset_count
(),
...
...
apps/perms/templates/perms/asset_permission_list.html
View file @
40d2934d
...
@@ -186,7 +186,7 @@ function initTree() {
...
@@ -186,7 +186,7 @@ function initTree() {
{
#
if
(
value
[
"key"
]
===
"0"
)
{
#
}
{
#
if
(
value
[
"key"
]
===
"0"
)
{
#
}
value
[
"open"
]
=
true
;
value
[
"open"
]
=
true
;
{
#
}
#
}
{
#
}
#
}
value
[
"name"
]
=
value
[
"value"
]
+
' ('
+
value
[
'assets_amount'
]
+
')'
value
[
"name"
]
=
value
[
"value"
]
});
});
zNodes
=
data
;
zNodes
=
data
;
$
.
fn
.
zTree
.
init
(
$
(
"#assetTree"
),
setting
,
zNodes
);
$
.
fn
.
zTree
.
init
(
$
(
"#assetTree"
),
setting
,
zNodes
);
...
...
apps/terminal/models.py
View file @
40d2934d
...
@@ -129,7 +129,7 @@ class Session(models.Model):
...
@@ -129,7 +129,7 @@ class Session(models.Model):
has_command
=
models
.
BooleanField
(
default
=
False
,
verbose_name
=
_
(
"Command"
))
has_command
=
models
.
BooleanField
(
default
=
False
,
verbose_name
=
_
(
"Command"
))
terminal
=
models
.
ForeignKey
(
Terminal
,
null
=
True
,
on_delete
=
models
.
CASCADE
)
terminal
=
models
.
ForeignKey
(
Terminal
,
null
=
True
,
on_delete
=
models
.
CASCADE
)
date_last_active
=
models
.
DateTimeField
(
verbose_name
=
_
(
"Date last active"
),
default
=
timezone
.
now
)
date_last_active
=
models
.
DateTimeField
(
verbose_name
=
_
(
"Date last active"
),
default
=
timezone
.
now
)
date_start
=
models
.
DateTimeField
(
verbose_name
=
_
(
"Date start"
))
date_start
=
models
.
DateTimeField
(
verbose_name
=
_
(
"Date start"
)
,
db_index
=
True
)
date_end
=
models
.
DateTimeField
(
verbose_name
=
_
(
"Date end"
),
null
=
True
)
date_end
=
models
.
DateTimeField
(
verbose_name
=
_
(
"Date end"
),
null
=
True
)
class
Meta
:
class
Meta
:
...
...
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