mirror of https://github.com/jumpserver/jumpserver
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.9 KiB
63 lines
1.9 KiB
#!/usr/bin/python |
|
|
|
import os |
|
import datetime |
|
import shutil |
|
import sys |
|
import django |
|
|
|
GUACAMOLE_REPLAYS_DIR = '/tmp/guacamole/record' |
|
UPLOAD_TO = 'local' |
|
|
|
BASE_DIR = os.path.abspath(os.path.dirname(__file__)) |
|
PROJECT_DIR = os.path.dirname(BASE_DIR) |
|
LOCAL_REPLAY_DIR = os.path.join(PROJECT_DIR, 'data', 'media', 'replay') |
|
APPS_DIR = os.path.join(PROJECT_DIR, "apps") |
|
|
|
|
|
if os.path.exists(APPS_DIR): |
|
sys.path.insert(0, APPS_DIR) |
|
|
|
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "jumpserver.settings") |
|
django.setup() |
|
|
|
from terminal.models import Session |
|
|
|
|
|
def find_replays(): |
|
replays = [] |
|
|
|
for root, dirs, files in os.walk(GUACAMOLE_REPLAYS_DIR, topdown=True): |
|
for name in files: |
|
if name.startswith('20') and name.endswith('.gz'): |
|
session_id = '-'.join(name.split('-')[3:]).replace(".gz", "") |
|
file_path = os.path.join(root, name) |
|
create_ts = os.stat(file_path).st_ctime |
|
create_date = datetime.datetime.utcfromtimestamp(create_ts) |
|
replays.append({ |
|
"id": session_id, |
|
"path": file_path, |
|
"date": create_date, |
|
}) |
|
return replays |
|
|
|
|
|
def upload_to_local(session): |
|
source_path = session["path"] |
|
session_id = session["id"] |
|
target_filename = session_id + ".replay.gz" |
|
date_created = session["date"].strftime("%Y-%m-%d") |
|
target_dir = os.path.join(LOCAL_REPLAY_DIR, date_created ) |
|
target_path = os.path.join(target_dir, target_filename) |
|
if not os.path.isdir(target_dir): |
|
os.makedirs(target_dir) |
|
print("Move {} => {}".format(source_path, target_path)) |
|
shutil.copy(source_path, target_path) |
|
shutil.copystat(source_path, target_path) |
|
os.unlink(source_path) |
|
Session.objects.filter(id=session_id).update(is_finished=True) |
|
|
|
|
|
if __name__ == '__main__': |
|
for s in find_replays(): |
|
upload_to_local(s)
|
|
|