|  |  | @ -62,47 +62,6 @@ def get_tombstones(): | 
			
		
	
		
		
			
				
					
					|  |  |  |   return files |  |  |  |   return files | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | def report_tombstone_android(fn): |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   f_size = os.path.getsize(fn) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   if f_size > MAX_SIZE: |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     cloudlog.error(f"Tombstone {fn} too big, {f_size}. Skipping...") |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     return |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   with open(fn, encoding='ISO-8859-1') as f: |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     contents = f.read() |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   message = " ".join(contents.split('\n')[5:7]) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   # Cut off pid/tid, since that varies per run |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   name_idx = message.find('name') |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   if name_idx >= 0: |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     message = message[name_idx:] |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   executable = "" |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   start_exe_idx = message.find('>>> ') |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   end_exe_idx = message.find(' <<<') |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   if start_exe_idx >= 0 and end_exe_idx >= 0: |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     executable = message[start_exe_idx + 4:end_exe_idx] |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   # Cut off fault addr |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   fault_idx = message.find(', fault addr') |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   if fault_idx >= 0: |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     message = message[:fault_idx] |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   sentry.report_tombstone(fn, message, contents) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   # Copy crashlog to upload folder |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   clean_path = executable.replace('./', '').replace('/', '_') |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   date = datetime.datetime.now().strftime("%Y-%m-%d--%H-%M-%S") |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   new_fn = f"{date}_{get_commit(default='nocommit')[:8]}_{safe_fn(clean_path)}"[:MAX_TOMBSTONE_FN_LEN] |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   crashlog_dir = os.path.join(ROOT, "crash") |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   mkdirs_exists_ok(crashlog_dir) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   shutil.copy(fn, os.path.join(crashlog_dir, new_fn)) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | def report_tombstone_apport(fn): |  |  |  | def report_tombstone_apport(fn): | 
			
		
	
		
		
			
				
					
					|  |  |  |   f_size = os.path.getsize(fn) |  |  |  |   f_size = os.path.getsize(fn) | 
			
		
	
		
		
			
				
					
					|  |  |  |   if f_size > MAX_SIZE: |  |  |  |   if f_size > MAX_SIZE: | 
			
		
	
	
		
		
			
				
					|  |  | @ -199,7 +158,7 @@ def main() -> NoReturn: | 
			
		
	
		
		
			
				
					
					|  |  |  |         if fn.endswith(".crash"): |  |  |  |         if fn.endswith(".crash"): | 
			
		
	
		
		
			
				
					
					|  |  |  |           report_tombstone_apport(fn) |  |  |  |           report_tombstone_apport(fn) | 
			
		
	
		
		
			
				
					
					|  |  |  |         else: |  |  |  |         else: | 
			
		
	
		
		
			
				
					
					|  |  |  |           report_tombstone_android(fn) |  |  |  |           cloudlog.error(f"unknown crash type: {fn}") | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |       except Exception: |  |  |  |       except Exception: | 
			
		
	
		
		
			
				
					
					|  |  |  |         cloudlog.exception(f"Error reporting tombstone {fn}") |  |  |  |         cloudlog.exception(f"Error reporting tombstone {fn}") | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | 
 |