dumpmanager.py (2689B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\pytelemetry\dumpmanager.py 2 from __future__ import print_function 3 import os 4 import platform 5 import shutil 6 import subprocess 7 import time 8 import threading 9 import zipfile 10 import blue 11 zip_thread = None 12 13 class AsyncZipAndSaveTelemetryFiles(threading.Thread): 14 15 def __init__(self, output_folder): 16 threading.Thread.__init__(self) 17 self.output_folder = output_folder 18 19 def run(self): 20 global zip_thread 21 telemetry_files = get_telemetry_files() 22 if telemetry_files: 23 if not os.path.exists(self.output_folder): 24 os.makedirs(self.output_folder) 25 zip_file = time.strftime('%a-%d-%b-%Y-%H-%M-%S', time.gmtime()) 26 z = zipfile.ZipFile('%s.zip' % zip_file, 'w', compression=zipfile.ZIP_DEFLATED, allowZip64=True) 27 for filepath in telemetry_files: 28 filename = os.path.split(filepath)[1] 29 z.write(filepath, filename) 30 31 z.close() 32 shutil.move(zip_file + '.zip', self.output_folder) 33 discard_newest_capture_files() 34 zip_thread = None 35 36 37 TELEMETRY_DUMP_PATH = os.path.join(blue.paths.ResolvePath(u'root:/server/cache')) 38 TRACY_DUMP_FILENAME = 'tracy.tracy' 39 40 def is_telemetry_file(f): 41 return f == TRACY_DUMP_FILENAME 42 43 44 def save(output_folder): 45 global zip_thread 46 zip_thread = AsyncZipAndSaveTelemetryFiles(output_folder) 47 zip_thread.start() 48 49 50 def check_save_complete(): 51 return zip_thread is None 52 53 54 def discard_newest_capture_files(): 55 map(os.remove, get_telemetry_files()) 56 57 58 def get_telemetry_files(): 59 l = [] 60 if not os.path.exists(TELEMETRY_DUMP_PATH): 61 return l 62 for filename in os.listdir(TELEMETRY_DUMP_PATH): 63 if is_telemetry_file(filename) and os.path.isfile(os.path.join(TELEMETRY_DUMP_PATH, filename)): 64 l.append(os.path.join(TELEMETRY_DUMP_PATH, filename)) 65 66 return l 67 68 69 def get_existing_files(dump_folder): 70 if not os.path.exists(dump_folder): 71 return [] 72 return [ os.path.join(dump_folder, i) for i in os.listdir(dump_folder) ] 73 74 75 def capture_tracy(sample_period = 5, dump_path = TELEMETRY_DUMP_PATH, file_name = TRACY_DUMP_FILENAME): 76 if platform.system() != 'Windows': 77 print('Capturing Tracy data currently only supported on Windows') 78 return 79 path = os.path.normpath(os.path.join(blue.paths.ResolvePath(u'bin:/'), 'tracy-capture.exe')) 80 args = [path, '-o%s' % file_name, '-s %s' % sample_period] 81 print(('Starting tracy capture tool with arguments', args)) 82 process = subprocess.Popen(args, cwd=dump_path, shell=True) 83 print(process.poll())