main.py
1 # Python Imports 2 3 # Project Imports 4 from src import vars 5 from src import arg_parser 6 from src import topology 7 from src import log_parser 8 from src import analysis 9 from src import analysis_logger 10 from src import cproc 11 from src import cadvisor 12 from src import plotting 13 from src import plotting_configurations 14 from src import prometheus 15 16 if __name__ == "__main__": 17 """ Parse args """ 18 simulation_path, prom_port, infra_type = arg_parser.parse_args() 19 20 """Load Configuration""" 21 simulation_config = topology.load_json(simulation_path + "config/config.json") 22 metrics = simulation_config["plotting"] 23 24 """ Load Topics Structure """ 25 topology_info = topology.load_json(simulation_path + vars.G_TOPOLOGY_FILE_NAME) 26 topology.load_topics_into_topology(topology_info, simulation_path + "config/topology_generated/") 27 28 """ Load Simulation Messages """ 29 injected_msgs_dict = log_parser.load_messages(simulation_path) 30 node_logs, msgs_dict, min_tss, max_tss = analysis.analyze_containers(topology_info, 31 simulation_path) 32 33 """ Compute simulation time window """ 34 simulation_time_ms = round((max_tss - min_tss) / 1000000) 35 analysis_logger.G_LOGGER.info(f'Simulation started at {min_tss}, ended at {max_tss}. ' 36 f'Effective simulation time was {simulation_time_ms} ms.') 37 38 analysis.compute_message_delivery(msgs_dict, injected_msgs_dict) 39 analysis.compute_message_latencies(msgs_dict) 40 msg_propagation_times = analysis.compute_propagation_times(msgs_dict) 41 msg_injection_times = analysis.compute_injection_times(injected_msgs_dict) 42 43 """ Generate stats depending on the type of measurements infrastructure """ 44 if infra_type == 'container-proc': 45 cproc.run(simulation_config, simulation_path, msgs_dict, node_logs, msg_propagation_times, msg_injection_times, min_tss, max_tss) 46 elif infra_type == 'cadvisor': 47 cadvisor.run(simulation_config, metrics, topology_info, msg_propagation_times, msg_injection_times, min_tss, max_tss, prom_port) 48 else: 49 analysis_logger.G_LOGGER.error(f'Unknown infrastructure type: {infra_type}') 50 analysis.inject_metric_in_dict(plotting_configurations.plotting_config, "propagation", 51 "Propagation Time (per message)", "Propagation Time (ms)", 52 "msg_propagation_times", msg_propagation_times) 53 analysis.inject_metric_in_dict(plotting_configurations.plotting_config, "injection", 54 "Injection Time (per message)", "Milliseconds (ms)", 55 "msg_injection_times", msg_injection_times) 56 57 prometheus.get_hardware_metrics(metrics, topology_info, min_tss, max_tss, prom_port) 58 59 """ Generate Figure """ 60 plotting.plot_figure_ex(simulation_config) 61 62 """ We are done """ 63 analysis_logger.G_LOGGER.info('Ended')