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
b3f83c33
Commit
b3f83c33
authored
9 years ago
by
liuzheng712
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update
parent
17a7470a
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
96 additions
and
37 deletions
+96
-37
views.py
jlog/views.py
+89
-30
run_server.py
run_server.py
+7
-7
No files found.
jlog/views.py
View file @
b3f83c33
...
...
@@ -162,17 +162,25 @@ class TermLogRecorder(object):
self.log is the all output with delta time log.
self.vim_pattern is the regexp for check vi/vim/fg model.
Usage:
recorder = TermLogRecorder(
User
)
recorder = TermLogRecorder(
user=UserObject) # or recorder = TermLogRecorder(uid=UserID
)
recoder.write(messages)
recoder.save() # save all log into database
# The following methods all have `user`,`uid`,args. Same as __init__
list = recoder.list() # will give a object about this user's all log info
recoder.load_full_log(filemane) # will get full log
recoder.load_history(filename) # will only get the command history list
recoder.share_to(filename,user=UserObject) # or recoder.share_to(filename,uid=UserID). will share this commands to someone
recoder.unshare_to(filename,user=UserObject) # or recoder.unshare_to(filename,uid=UserID). will unshare this commands to someone
"""
def
__init__
(
self
,
user
):
def
__init__
(
self
,
user
=
None
,
uid
=
None
):
self
.
log
=
{}
self
.
user
=
user
if
isinstance
(
user
,
User
):
self
.
user
=
user
elif
uid
:
self
.
user
=
User
.
objects
.
get
(
id
=
uid
)
else
:
self
.
user
=
None
self
.
recoderStartTime
=
time
.
time
()
self
.
__init_screen_stream
()
self
.
recoder
=
True
...
...
@@ -227,6 +235,8 @@ class TermLogRecorder(object):
date
=
datetime
.
datetime
.
now
()
.
strftime
(
'
%
Y
%
m
%
d'
)
filename
=
str
(
uuid
.
uuid4
())
filepath
=
os
.
path
.
join
(
path
,
'tty'
,
date
,
filename
+
'.zip'
)
if
not
os
.
path
.
isdir
(
os
.
path
.
join
(
path
,
'tty'
,
date
)):
os
.
makedirs
(
os
.
path
.
join
(
path
,
'tty'
,
date
),
mode
=
0777
)
while
os
.
path
.
isfile
(
filepath
):
filename
=
str
(
uuid
.
uuid4
())
filepath
=
os
.
path
.
join
(
path
,
'tty'
,
date
,
filename
+
'.zip'
)
...
...
@@ -238,41 +248,90 @@ class TermLogRecorder(object):
zf
.
close
()
record
=
TermLog
.
objects
.
create
(
logPath
=
filepath
,
logPWD
=
password
,
filename
=
filename
,
history
=
json
.
dumps
(
self
.
CMD
),
timestamp
=
int
(
self
.
recoderStartTime
))
record
.
user
.
add
(
self
.
user
)
if
self
.
user
:
record
.
user
.
add
(
self
.
user
)
except
:
record
=
TermLog
.
objects
.
create
(
logPath
=
'locale'
,
logPWD
=
password
,
log
=
json
.
dumps
(
self
.
log
),
filename
=
filename
,
history
=
json
.
dumps
(
self
.
CMD
),
timestamp
=
int
(
self
.
recoderStartTime
))
record
.
user
.
add
(
self
.
user
)
if
self
.
user
:
record
.
user
.
add
(
self
.
user
)
def
list
(
self
):
def
list
(
self
,
user
=
None
,
uid
=
None
):
tmp
=
[]
self
.
_lists
=
TermLog
.
objects
.
filter
(
user
=
self
.
user
.
id
)
for
i
in
self
.
_lists
.
all
():
tmp
.
append
(
{
'filename'
:
i
.
filename
,
'locale'
:
i
.
logPath
==
'locale'
,
'nick'
:
i
.
nick
,
'timestamp'
:
i
.
timestamp
,
'date'
:
i
.
datetimestamp
})
if
isinstance
(
user
,
User
):
user
=
user
elif
uid
:
user
=
User
.
objects
.
get
(
id
=
uid
)
else
:
user
=
self
.
user
if
user
:
self
.
_lists
=
TermLog
.
objects
.
filter
(
user
=
user
.
id
)
for
i
in
self
.
_lists
.
all
():
tmp
.
append
(
{
'filename'
:
i
.
filename
,
'locale'
:
i
.
logPath
==
'locale'
,
'nick'
:
i
.
nick
,
'timestamp'
:
i
.
timestamp
,
'date'
:
i
.
datetimestamp
})
return
tmp
def
load_full_log
(
self
,
filename
):
if
self
.
_lists
:
self
.
file
=
self
.
_lists
.
get
(
filename
=
filename
)
def
load_full_log
(
self
,
filename
,
user
=
None
,
uid
=
None
):
if
isinstance
(
user
,
User
):
user
=
user
elif
uid
:
user
=
User
.
objects
.
get
(
id
=
uid
)
else
:
user
=
self
.
user
if
user
:
if
self
.
_lists
:
self
.
file
=
self
.
_lists
.
get
(
filename
=
filename
)
else
:
self
.
file
=
TermLog
.
objects
.
get
(
user
=
user
.
id
,
filename
=
filename
)
if
self
.
file
.
logPath
==
'locale'
:
return
self
.
file
.
log
else
:
try
:
zf
=
zipfile
.
ZipFile
(
self
.
file
.
logPath
,
'r'
,
zipfile
.
ZIP_DEFLATED
)
zf
.
setpassword
(
self
.
file
.
logPWD
)
self
.
_data
=
zf
.
read
(
zf
.
namelist
()[
0
])
return
self
.
_data
except
KeyError
:
return
'ERROR: Did not find
%
s file'
%
filename
return
'ERROR User(None)'
def
load_history
(
self
,
filename
,
user
=
None
,
uid
=
None
):
if
isinstance
(
user
,
User
):
user
=
user
elif
uid
:
user
=
User
.
objects
.
get
(
id
=
uid
)
else
:
self
.
file
=
TermLog
.
objects
.
get
(
user
=
self
.
user
.
id
,
filename
=
filename
)
if
self
.
file
.
logPath
==
'locale'
:
return
self
.
file
.
log
user
=
self
.
user
if
user
:
if
self
.
_lists
:
self
.
file
=
self
.
_lists
.
get
(
filename
=
filename
)
else
:
self
.
file
=
TermLog
.
objects
.
get
(
user
=
user
.
id
,
filename
=
filename
)
return
self
.
file
.
history
return
'ERROR User(None)'
def
share_to
(
self
,
filename
,
user
=
None
,
uid
=
None
):
if
isinstance
(
user
,
User
):
user
=
user
elif
uid
:
user
=
User
.
objects
.
get
(
id
=
uid
)
else
:
try
:
zf
=
zipfile
.
ZipFile
(
self
.
file
.
logPath
,
'r'
,
zipfile
.
ZIP_DEFLATED
)
zf
.
setpassword
(
self
.
file
.
logPWD
)
self
.
_data
=
zf
.
read
(
zf
.
namelist
()[
0
])
return
self
.
_data
except
KeyError
:
return
'ERROR: Did not find
%
s file'
%
filename
def
load_history
(
self
,
filename
):
if
self
.
_lists
:
self
.
file
=
self
.
_lists
.
get
(
filename
=
filename
)
pass
if
user
:
TermLog
.
objects
.
get
(
filename
=
filename
)
.
user
.
add
(
user
)
return
True
return
False
def
unshare_to
(
self
,
filename
,
user
=
None
,
uid
=
None
):
if
isinstance
(
user
,
User
):
user
=
user
elif
uid
:
user
=
User
.
objects
.
get
(
id
=
uid
)
else
:
self
.
file
=
TermLog
.
objects
.
get
(
user
=
self
.
user
.
id
,
filename
=
filename
)
return
self
.
file
.
history
pass
if
user
:
TermLog
.
objects
.
get
(
filename
=
filename
)
.
user
.
remove
(
user
)
return
True
return
False
This diff is collapsed.
Click to expand it.
run_server.py
View file @
b3f83c33
...
...
@@ -22,7 +22,7 @@ import tornado.httpclient
from
tornado.websocket
import
WebSocketClosedError
from
tornado.options
import
define
,
options
from
pyinotify
import
WatchManager
,
ProcessEvent
,
IN_DELETE
,
IN_CREATE
,
IN_MODIFY
,
AsyncNotifier
#
from pyinotify import WatchManager, ProcessEvent, IN_DELETE, IN_CREATE, IN_MODIFY, AsyncNotifier
import
select
from
connect
import
Tty
,
User
,
Asset
,
PermRole
,
logger
,
get_object
,
gen_resource
...
...
@@ -97,12 +97,12 @@ class MyThread(threading.Thread):
pass
class
EventHandler
(
ProcessEvent
):
def
__init__
(
self
,
client
=
None
):
self
.
client
=
client
def
process_IN_MODIFY
(
self
,
event
):
self
.
client
.
write_message
(
f
.
read
())
#
class EventHandler(ProcessEvent):
#
def __init__(self, client=None):
#
self.client = client
#
#
def process_IN_MODIFY(self, event):
#
self.client.write_message(f.read())
def
file_monitor
(
path
=
'.'
,
client
=
None
):
...
...
This diff is collapsed.
Click to expand it.
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