def main(args): lsof_file = args['<FILE>'] print("Finding most popular PID...") files = None with open(lsof_file, "r") as lsof_output: files = px_file.lsof_to_files(lsof_output.read(), px_ipc_map.FILE_TYPES, None) pid = get_most_common_pid(files) print("Most popular PID: {}".format(pid)) end = time.time() + DURATION_S lap_number = 0 load_times = [] mapping_times = [] total_times = [] while time.time() < end: lap_number += 1 print("Lap {}, {:.0f}s left...".format(lap_number, end - time.time())) load_time, mapping_time = get_timings(lsof_file, pid) load_times.append(load_time) mapping_times.append(mapping_time) total_times.append(load_time + mapping_time) print_statistics("Loading time", load_times) print_statistics("Mapping time", mapping_times) print_statistics(" Total time", total_times)
def test_lsof_to_files(): lsof = "" lsof += '\0'.join(["p123", "\n"]) lsof += '\0'.join(["fcwd", "a ", "tDIR", "n/", "\n"]) lsof += '\0'.join(["f5", "ar", "tREG", "ncontains\nnewline", "\n"]) lsof += '\0'.join(["f6", "aw", "tREG", "d0x42", "n/somefile", "\n"]) lsof += '\0'.join(["p456", "\n"]) lsof += '\0'.join(["f7", "au", "tREG", "n/someotherfile", "\n"]) lsof += '\0'.join(["f7", "a ", "n(revoked)", "\n"]) files = px_file.lsof_to_files(lsof, None, None) assert len(files) == 5 assert files[0].pid == 123 assert files[0].access is None assert files[0].device is None assert files[0].device_number() is None assert files[0].type == "DIR" assert files[0].name == "/" assert str(files[0]) == "[DIR] /" assert files[1].pid == 123 assert files[1].access == "r" assert files[1].device is None assert files[1].device_number() is None assert files[1].type == "REG" assert files[1].name == "contains\nnewline" assert str(files[1]) == "contains\nnewline" assert files[2].pid == 123 assert files[2].access == "w" assert files[2].device == "0x42" assert files[2].device_number() == 0x42 assert files[2].type == "REG" assert files[2].name == "/somefile" assert str(files[2]) == "/somefile" assert files[3].pid == 456 assert files[3].access == "rw" assert files[3].device is None assert files[3].device_number() is None assert files[3].type == "REG" assert files[3].name == "/someotherfile" assert str(files[3]) == "/someotherfile" assert files[4].pid == 456 assert files[4].access is None assert files[4].device is None assert files[4].device_number() is None assert files[4].type == "??" assert files[4].name == "(revoked)" assert str(files[4]) == "[??] (revoked)"
def test_get_ipc_map_2(): """Tyre kick IpcMap with some real world data""" files = None my_dir = os.path.dirname(__file__) with open(os.path.join(my_dir, "lsof-test-output-linux-2.txt"), "r") as lsof_output: files = px_file.lsof_to_files(lsof_output.read(), None, None) ipc_map = testutils.create_ipc_map(777, files) keys = list(ipc_map.keys()) assert len(keys) == 1 peer0 = keys[0] assert len(ipc_map[peer0]) == 4
def get_timings(file, pid): """ Loads file and creates an IPC map for PID. Returns timings in a tuple (load, mapping) in seconds. """ t0 = time.time() files = None with open(file, "r") as lsof_output: files = px_file.lsof_to_files(lsof_output.read(), px_ipc_map.FILE_TYPES, pid) t1 = time.time() dt_load = t1 - t0 t0 = time.time() testutils.create_ipc_map(pid, files) t1 = time.time() dt_mapping = t1 - t0 return (dt_load, dt_mapping)
def lsof_to_file(shard_array): return px_file.lsof_to_files('\0'.join(shard_array + ["\n"]), None, None)[0]