NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

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())