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
01a101a7
Unverified
Commit
01a101a7
authored
Jan 21, 2019
by
老广
Committed by
GitHub
Jan 21, 2019
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[Update] 修改一些terminal storage (#2357)
parent
eee6dd14
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
40 additions
and
60 deletions
+40
-60
asset.py
apps/assets/models/asset.py
+1
-1
api.py
apps/common/api.py
+3
-3
terminal.py
apps/terminal/api/v1/terminal.py
+5
-2
models.py
apps/terminal/models.py
+26
-5
v1.py
apps/terminal/serializers/v1.py
+4
-23
signals_handler.py
apps/terminal/signals_handler.py
+0
-25
session_list.html
apps/terminal/templates/terminal/session_list.html
+1
-1
No files found.
apps/assets/models/asset.py
View file @
01a101a7
...
@@ -185,7 +185,7 @@ class Asset(OrgModelMixin):
...
@@ -185,7 +185,7 @@ class Asset(OrgModelMixin):
@property
@property
def
connectivity
(
self
):
def
connectivity
(
self
):
if
not
self
.
is_unixlike
():
if
not
self
.
is_unixlike
():
return
self
.
UNKNOWN
return
self
.
REACHABLE
key
=
self
.
CONNECTIVITY_CACHE_KEY
.
format
(
str
(
self
.
id
))
key
=
self
.
CONNECTIVITY_CACHE_KEY
.
format
(
str
(
self
.
id
))
cached
=
cache
.
get
(
key
,
None
)
cached
=
cache
.
get
(
key
,
None
)
return
cached
if
cached
is
not
None
else
self
.
UNKNOWN
return
cached
if
cached
is
not
None
else
self
.
UNKNOWN
...
...
apps/common/api.py
View file @
01a101a7
...
@@ -215,10 +215,10 @@ class LogTailApi(generics.RetrieveAPIView):
...
@@ -215,10 +215,10 @@ class LogTailApi(generics.RetrieveAPIView):
return
Response
({
return
Response
({
"data"
:
'Not found the log'
,
"data"
:
'Not found the log'
,
'end'
:
True
,
'end'
:
True
,
'mark'
:
mark
}
'mark'
:
mark
)
}
)
else
:
else
:
return
Response
({
"data"
:
_
(
"Waiting ...
\n
"
)
},
status
=
200
)
return
Response
({
"data"
:
"Waiting...
\r\n
"
},
status
=
200
)
with
open
(
log_path
,
'r'
)
as
f
:
with
open
(
log_path
,
'r'
)
as
f
:
offset
=
cache
.
get
(
mark
,
0
)
offset
=
cache
.
get
(
mark
,
0
)
...
...
apps/terminal/api/v1/terminal.py
View file @
01a101a7
...
@@ -100,15 +100,18 @@ class StatusViewSet(viewsets.ModelViewSet):
...
@@ -100,15 +100,18 @@ class StatusViewSet(viewsets.ModelViewSet):
task_serializer_class
=
serializers
.
TaskSerializer
task_serializer_class
=
serializers
.
TaskSerializer
def
create
(
self
,
request
,
*
args
,
**
kwargs
):
def
create
(
self
,
request
,
*
args
,
**
kwargs
):
s
uper
()
.
create
(
request
,
*
args
,
**
kwargs
)
s
elf
.
handle_status
(
request
)
self
.
handle_sessions
()
self
.
handle_sessions
()
tasks
=
self
.
request
.
user
.
terminal
.
task_set
.
filter
(
is_finished
=
False
)
tasks
=
self
.
request
.
user
.
terminal
.
task_set
.
filter
(
is_finished
=
False
)
serializer
=
self
.
task_serializer_class
(
tasks
,
many
=
True
)
serializer
=
self
.
task_serializer_class
(
tasks
,
many
=
True
)
return
Response
(
serializer
.
data
,
status
=
201
)
return
Response
(
serializer
.
data
,
status
=
201
)
def
handle_status
(
self
,
request
):
request
.
user
.
terminal
.
is_alive
=
True
def
handle_sessions
(
self
):
def
handle_sessions
(
self
):
sessions_id
=
self
.
request
.
data
.
get
(
'sessions'
,
[])
sessions_id
=
self
.
request
.
data
.
get
(
'sessions'
,
[])
Session
.
set_
active_sessions
(
sessions_id
)
Session
.
set_
sessions_active
(
sessions_id
)
def
get_queryset
(
self
):
def
get_queryset
(
self
):
terminal_id
=
self
.
kwargs
.
get
(
"terminal"
,
None
)
terminal_id
=
self
.
kwargs
.
get
(
"terminal"
,
None
)
...
...
apps/terminal/models.py
View file @
01a101a7
...
@@ -13,6 +13,7 @@ from django.core.cache import cache
...
@@ -13,6 +13,7 @@ from django.core.cache import cache
from
users.models
import
User
from
users.models
import
User
from
orgs.mixins
import
OrgModelMixin
from
orgs.mixins
import
OrgModelMixin
from
common.utils
import
get_command_storage_setting
,
get_replay_storage_setting
from
common.utils
import
get_command_storage_setting
,
get_replay_storage_setting
from
.backends
import
get_multi_command_storage
from
.backends.command.models
import
AbstractSessionCommand
from
.backends.command.models
import
AbstractSessionCommand
...
@@ -29,6 +30,17 @@ class Terminal(models.Model):
...
@@ -29,6 +30,17 @@ class Terminal(models.Model):
is_deleted
=
models
.
BooleanField
(
default
=
False
)
is_deleted
=
models
.
BooleanField
(
default
=
False
)
date_created
=
models
.
DateTimeField
(
auto_now_add
=
True
)
date_created
=
models
.
DateTimeField
(
auto_now_add
=
True
)
comment
=
models
.
TextField
(
blank
=
True
,
verbose_name
=
_
(
'Comment'
))
comment
=
models
.
TextField
(
blank
=
True
,
verbose_name
=
_
(
'Comment'
))
STATUS_KEY_PREFIX
=
'terminal_status_'
@property
def
is_alive
(
self
):
key
=
self
.
STATUS_KEY_PREFIX
+
str
(
self
.
id
)
return
bool
(
cache
.
get
(
key
))
@is_alive.setter
def
is_alive
(
self
,
value
):
key
=
self
.
STATUS_KEY_PREFIX
+
str
(
self
.
id
)
cache
.
set
(
key
,
value
,
60
)
@property
@property
def
is_active
(
self
):
def
is_active
(
self
):
...
@@ -42,7 +54,7 @@ class Terminal(models.Model):
...
@@ -42,7 +54,7 @@ class Terminal(models.Model):
self
.
user
.
is_active
=
active
self
.
user
.
is_active
=
active
self
.
user
.
save
()
self
.
user
.
save
()
def
get_comm
on_storage
(
self
):
def
get_comm
and_storage_setting
(
self
):
storage_all
=
get_command_storage_setting
()
storage_all
=
get_command_storage_setting
()
if
self
.
command_storage
in
storage_all
:
if
self
.
command_storage
in
storage_all
:
storage
=
storage_all
.
get
(
self
.
command_storage
)
storage
=
storage_all
.
get
(
self
.
command_storage
)
...
@@ -50,7 +62,7 @@ class Terminal(models.Model):
...
@@ -50,7 +62,7 @@ class Terminal(models.Model):
storage
=
storage_all
.
get
(
'default'
)
storage
=
storage_all
.
get
(
'default'
)
return
{
"TERMINAL_COMMAND_STORAGE"
:
storage
}
return
{
"TERMINAL_COMMAND_STORAGE"
:
storage
}
def
get_replay_storage
(
self
):
def
get_replay_storage
_setting
(
self
):
storage_all
=
get_replay_storage_setting
()
storage_all
=
get_replay_storage_setting
()
if
self
.
replay_storage
in
storage_all
:
if
self
.
replay_storage
in
storage_all
:
storage
=
storage_all
.
get
(
self
.
replay_storage
)
storage
=
storage_all
.
get
(
self
.
replay_storage
)
...
@@ -65,8 +77,8 @@ class Terminal(models.Model):
...
@@ -65,8 +77,8 @@ class Terminal(models.Model):
if
not
k
.
startswith
(
'TERMINAL'
):
if
not
k
.
startswith
(
'TERMINAL'
):
continue
continue
configs
[
k
]
=
getattr
(
settings
,
k
)
configs
[
k
]
=
getattr
(
settings
,
k
)
configs
.
update
(
self
.
get_comm
on_storage
())
configs
.
update
(
self
.
get_comm
and_storage_setting
())
configs
.
update
(
self
.
get_replay_storage
())
configs
.
update
(
self
.
get_replay_storage
_setting
())
configs
.
update
({
configs
.
update
({
'SECURITY_MAX_IDLE_TIME'
:
settings
.
SECURITY_MAX_IDLE_TIME
'SECURITY_MAX_IDLE_TIME'
:
settings
.
SECURITY_MAX_IDLE_TIME
})
})
...
@@ -185,16 +197,25 @@ class Session(OrgModelMixin):
...
@@ -185,16 +197,25 @@ class Session(OrgModelMixin):
return
None
,
e
return
None
,
e
@classmethod
@classmethod
def
set_
active_sessions
(
cls
,
sessions_id
):
def
set_
sessions_active
(
cls
,
sessions_id
):
data
=
{
cls
.
ACTIVE_CACHE_KEY_PREFIX
.
format
(
i
):
i
for
i
in
sessions_id
}
data
=
{
cls
.
ACTIVE_CACHE_KEY_PREFIX
.
format
(
i
):
i
for
i
in
sessions_id
}
cache
.
set_many
(
data
,
timeout
=
5
*
60
)
cache
.
set_many
(
data
,
timeout
=
5
*
60
)
@classmethod
def
get_active_sessions
(
cls
):
return
cls
.
objects
.
filter
(
is_finished
=
False
)
def
is_active
(
self
):
def
is_active
(
self
):
if
self
.
protocol
in
[
'ssh'
,
'telnet'
]:
if
self
.
protocol
in
[
'ssh'
,
'telnet'
]:
key
=
self
.
ACTIVE_CACHE_KEY_PREFIX
.
format
(
self
.
id
)
key
=
self
.
ACTIVE_CACHE_KEY_PREFIX
.
format
(
self
.
id
)
return
bool
(
cache
.
get
(
key
))
return
bool
(
cache
.
get
(
key
))
return
True
return
True
@property
def
command_amount
(
self
):
command_store
=
get_multi_command_storage
()
return
command_store
.
count
(
session
=
str
(
self
.
id
))
class
Meta
:
class
Meta
:
db_table
=
"terminal_session"
db_table
=
"terminal_session"
ordering
=
[
"-date_start"
]
ordering
=
[
"-date_start"
]
...
...
apps/terminal/serializers/v1.py
View file @
01a101a7
# -*- coding: utf-8 -*-
# -*- coding: utf-8 -*-
#
#
from
django.core.cache
import
cache
from
rest_framework
import
serializers
from
rest_framework
import
serializers
from
rest_framework_bulk.serializers
import
BulkListSerializer
from
rest_framework_bulk.serializers
import
BulkListSerializer
from
common.mixins
import
BulkSerializerMixin
from
common.mixins
import
BulkSerializerMixin
from
..models
import
Terminal
,
Status
,
Session
,
Task
from
..models
import
Terminal
,
Status
,
Session
,
Task
from
..backends
import
get_multi_command_storage
class
TerminalSerializer
(
serializers
.
ModelSerializer
):
class
TerminalSerializer
(
serializers
.
ModelSerializer
):
session_online
=
serializers
.
SerializerMethodField
()
session_online
=
serializers
.
SerializerMethodField
()
is_alive
=
serializers
.
SerializerMethod
Field
()
is_alive
=
serializers
.
Boolean
Field
()
class
Meta
:
class
Meta
:
model
=
Terminal
model
=
Terminal
...
@@ -23,40 +21,23 @@ class TerminalSerializer(serializers.ModelSerializer):
...
@@ -23,40 +21,23 @@ class TerminalSerializer(serializers.ModelSerializer):
@staticmethod
@staticmethod
def
get_session_online
(
obj
):
def
get_session_online
(
obj
):
return
Session
.
objects
.
filter
(
terminal
=
obj
.
id
,
is_finished
=
False
)
.
count
()
return
Session
.
objects
.
filter
(
terminal
=
obj
,
is_finished
=
False
)
.
count
()
@staticmethod
def
get_is_alive
(
obj
):
key
=
StatusSerializer
.
CACHE_KEY_PREFIX
+
str
(
obj
.
id
)
return
cache
.
get
(
key
)
class
SessionSerializer
(
BulkSerializerMixin
,
serializers
.
ModelSerializer
):
class
SessionSerializer
(
BulkSerializerMixin
,
serializers
.
ModelSerializer
):
command_amount
=
serializers
.
SerializerMethodField
()
command_amount
=
serializers
.
IntegerField
()
command_store
=
get_multi_command_storage
()
class
Meta
:
class
Meta
:
model
=
Session
model
=
Session
list_serializer_class
=
BulkListSerializer
list_serializer_class
=
BulkListSerializer
fields
=
'__all__'
fields
=
'__all__'
def
get_command_amount
(
self
,
obj
):
return
self
.
command_store
.
count
(
session
=
str
(
obj
.
id
))
class
StatusSerializer
(
serializers
.
ModelSerializer
):
class
StatusSerializer
(
serializers
.
ModelSerializer
):
CACHE_KEY_PREFIX
=
'terminal_status_'
class
Meta
:
class
Meta
:
fields
=
'__all__'
fields
=
[
'id'
,
'terminal'
]
model
=
Status
model
=
Status
def
create
(
self
,
validated_data
):
terminal_id
=
str
(
validated_data
[
'terminal'
]
.
id
)
key
=
self
.
CACHE_KEY_PREFIX
+
terminal_id
cache
.
set
(
key
,
1
,
60
)
return
validated_data
class
TaskSerializer
(
BulkSerializerMixin
,
serializers
.
ModelSerializer
):
class
TaskSerializer
(
BulkSerializerMixin
,
serializers
.
ModelSerializer
):
...
...
apps/terminal/signals_handler.py
View file @
01a101a7
# -*- coding: utf-8 -*-
# -*- coding: utf-8 -*-
#
#
from
celery
import
shared_task
from
django.core.cache
import
cache
from
django.db.utils
import
ProgrammingError
,
OperationalError
from
common.utils
import
get_logger
from
.const
import
ASSETS_CACHE_KEY
,
USERS_CACHE_KEY
,
SYSTEM_USER_CACHE_KEY
RUNNING
=
False
logger
=
get_logger
(
__file__
)
def
set_session_info_cache
():
logger
.
debug
(
""
)
from
.utils
import
get_session_asset_list
,
get_session_user_list
,
\
get_session_system_user_list
try
:
assets
=
get_session_asset_list
()
users
=
get_session_user_list
()
system_users
=
get_session_system_user_list
()
cache
.
set
(
ASSETS_CACHE_KEY
,
assets
)
cache
.
set
(
USERS_CACHE_KEY
,
users
)
cache
.
set
(
SYSTEM_USER_CACHE_KEY
,
system_users
)
except
(
ProgrammingError
,
OperationalError
):
pass
apps/terminal/templates/terminal/session_list.html
View file @
01a101a7
...
@@ -94,7 +94,7 @@
...
@@ -94,7 +94,7 @@
<td
class=
"text-center"
>
{{ session.remote_addr|default:"" }}
</td>
<td
class=
"text-center"
>
{{ session.remote_addr|default:"" }}
</td>
<td
class=
"text-center"
>
{{ session.protocol }}
</td>
<td
class=
"text-center"
>
{{ session.protocol }}
</td>
<td
class=
"text-center"
>
{{ session.get_login_from_display }}
</td>
<td
class=
"text-center"
>
{{ session.get_login_from_display }}
</td>
<td
class=
"text-center"
>
{{ session.
id | get_session_
command_amount }}
</td>
<td
class=
"text-center"
>
{{ session.command_amount }}
</td>
<td
class=
"text-center"
>
{{ session.date_start }}
</td>
<td
class=
"text-center"
>
{{ session.date_start }}
</td>
{#
<td
class=
"text-center"
>
{{ session.date_last_active }}
</td>
#}
{#
<td
class=
"text-center"
>
{{ session.date_last_active }}
</td>
#}
...
...
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