/ src / main.py
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')