mirror of https://github.com/jumpserver/jumpserver
				
				
				
			
		
			
				
	
	
		
			64 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
| #!/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)
 |