1*81671fe0STom Stellardimport json 2*81671fe0STom Stellardimport multiprocessing 3*81671fe0STom Stellardimport os 4*81671fe0STom Stellardimport re 5*81671fe0STom Stellardimport subprocess 6*81671fe0STom Stellardimport sys 7*81671fe0STom Stellard 8*81671fe0STom Stellard 9*81671fe0STom Stellarddef run_analyzer(data): 10*81671fe0STom Stellard os.chdir(data["directory"]) 11*81671fe0STom Stellard command = ( 12*81671fe0STom Stellard data["command"] 13*81671fe0STom Stellard + f" --analyze --analyzer-output html -o analyzer-results -Xclang -analyzer-config -Xclang max-nodes=75000" 14*81671fe0STom Stellard ) 15*81671fe0STom Stellard print(command) 16*81671fe0STom Stellard subprocess.run(command, shell=True, check=True) 17*81671fe0STom Stellard 18*81671fe0STom Stellard 19*81671fe0STom Stellarddef pool_error(e): 20*81671fe0STom Stellard print("Error analyzing file:", e) 21*81671fe0STom Stellard 22*81671fe0STom Stellard 23*81671fe0STom Stellarddef main(): 24*81671fe0STom Stellard db_path = sys.argv[1] 25*81671fe0STom Stellard database = json.load(open(db_path)) 26*81671fe0STom Stellard 27*81671fe0STom Stellard with multiprocessing.Pool() as pool: 28*81671fe0STom Stellard pool.map_async(run_analyzer, [k for k in database], error_callback=pool_error) 29*81671fe0STom Stellard pool.close() 30*81671fe0STom Stellard pool.join() 31*81671fe0STom Stellard 32*81671fe0STom Stellard 33*81671fe0STom Stellardif __name__ == "__main__": 34*81671fe0STom Stellard main() 35