import argparse from xlap.parse import evaluate, parse_config import xlap.analyse.jitter as jitter import xlap.analyse.latency as latency import xlap.analyse.diff as difference import xlap.analyse.e2e as e2e tasks = { "jitter": None, "latency": None, "difference": None, "e2e": None, "capture": None } def main(): config = parse_config() data_files = config["data_files"] parser = argparse.ArgumentParser() parser.add_argument("tasks", metavar="T", type=str, nargs="+", help="Analysis tasks to execute") parser.add_argument("-e", "--export", dest="export", action="store_true", default=False, help="Output pdf files.") args = parser.parse_args() for command in args.tasks: if command not in tasks.keys(): print("{} is not a known analysis task.".format(command)) continue if command == "capture": types = ",\n".join([" ts_{}_packet = {}".format(k.lower(),v) for k,v in config["packet_types"].items()]) typedef = "typedef enum XlapTimestampPacketKind {{\n{}\n}} XlapTimestampPacketKind".format(types) timestamp = "#define TIMESTAMP_ID_LIST \\\n" timestamp += ", \\\n".join([" " * 8 + x for x in config["stamps"].keys()]) output = "#ifndef {0}\n#define {0}\n\n{1}\n\n{2}\n\n#endif // {0}".format("XLAP_CAPTURE_H", typedef, timestamp) if args.export: with open("xlap_capture.h", "w") as f: f.write(output) f.write("\n") else: print(output) elif command == "e2e": khz1 = 2000000 khz2 = 3000000 path="../publications/rtn-18/eval/20180419_energy/" df_data1 = evaluate(path+"sender-"+str(khz1)+".csv", path+"receiver-"+str(khz1)+".csv", config=config, kind=0) df_data2 = evaluate(path+"sender-"+str(khz2)+".csv", path+"receiver-"+str(khz2)+".csv", config=config, kind=0) e2e.analyse(df_data1, df_data2, config) elif command == "latency": df_data = evaluate(data_files["sender"], data_files["receiver"], config=config, kind=0) a = latency.analyse(df_data, config) print(a.corr.sort_values(ascending=False)) elif command == "difference": path="../publications/rtn-18/eval/20180420_" khz = 3000000 df_data1 = evaluate(path+"base1/sender-"+str(khz)+".csv", path+"base1/receiver-"+str(khz)+".csv", config=config, kind=0) # sanity check: #df_data2 = evaluate("../prrt/out/s.csv", "../prrt/out/r.csv", config=config, kind=0) # same setup, different measurement run: #df_data2 = evaluate("../prrt/out/s+same.csv", "../prrt/out/r+same.csv", config=config, kind=0) # different setup: #df_data2 = evaluate("../prrt/out/s+send.csv", "../prrt/out/r+send.csv", config=config, kind=0) df_data2 = evaluate(path+"base2/sender-"+str(khz)+".csv", path+"base2/receiver-"+str(khz)+".csv", config=config, kind=0) #df_data2 = evaluate(path+"changed/sender-"+str(khz)+".csv", path+"changed/receiver-"+str(khz)+".csv", config=config, kind=0) difference.analyse(df_data1, df_data2, config) else: df_data = evaluate(data_files["sender"], data_files["receiver"], config=config, kind=0) params = {"export": args.export} if command == "jitter": params1 = dict(params) params1.update({"file_name": "TraceJitter.pdf"}) params2 = dict(params) params2.update({"file_name": "JitterCauses.pdf"}) df = jitter.prep(df_data, config) jitter.trace_jitter(df, **params1) jitter.jitter_causes(df, config["durations"], **params2) if __name__ == "__main__": main()