Source code for emane_docker.main

#!/usr/bin/env python3

import argparse
import os
import sys

from colorama import init
from termcolor import cprint
from pyfiglet import figlet_format
import yaml

from emane_docker.log import LOG
from emane_docker.log import setup as log_setup
from emane_docker.log import add_file_logger
from emane_docker.result_report import Report
from emane_docker.topology import EmaneTopology
from emane_docker.topology_drawer import draw


[docs]def main(): """ The main function sets up the environment by reading the command line and configuration file and runs EMANE-Docker platform. :returns: 0 after a successful execution. """ os.system('stty sane') parser = argparse.ArgumentParser() parser.add_argument('-s', '--start', dest='start', action='store_true', default=False, help='run EMANE-Docker') parser.add_argument('-S', '--stop', dest='stop', action='store_true', default=False, help='stop EMANE-Docker') parser.add_argument('-y', action='store_true', dest='y', default=False, help='answer yes to all prompts') parser.add_argument('-c', '--config-file', dest='config_file', default='emane_docker/config.default.yaml', help='path for configuration file') parser.add_argument('-t', '--topology-file', dest='topology_file', default=None, help='path to the topology file, overrides he path in configuration file') parser.add_argument('-v', '--version', action='version', version='%(prog)s {version}'.format(version='0.0.1')) parser.add_argument('--no-cli', action='store_true', dest='no_cli', default=False, help='do not run EMANE-Docker CLI') parser.add_argument('--no-log', action='store_true', dest='no_log', default=False, help='do not output logs') parser.add_argument('--debug', action='store_true', dest='debug', default=False, help='set log level to debug') parser.add_argument('--draw-topology', action='store_true', dest='draw_topology', default=False, help='draw current topology file') parser.add_argument('--figure-path', action='store', dest='figure_path', default=None, help='output path for figure, if --draw-topology is specified') opts, _ = parser.parse_known_args() if opts.no_log: add_file_logger(os.devnull) else: log_setup(debug=opts.debug) try: init(strip=not sys.stdout.isatty()) print('\n') cprint(figlet_format('EMANE-Dkr', font='speed'), 'blue') # attrs=['bold'] except Exception as exc: LOG.debug('Cannot use cprint, this might affect logging.') LOG.debug(exc.__traceback__) print('EMANE-Docker') # Read configuration config = None with open(opts.config_file, 'r') as f: config = yaml.load(f) if not config: LOG.error('Incorrect config file at %s', opts.config_file) return -1 if opts.topology_file is not None: config['topology_file'] = opts.topology_file if 'no_cli' not in config: config['no_cli'] = opts.no_cli emane_topology = EmaneTopology(config=config) if opts.start: emane_topology.start() elif opts.stop: emane_topology.stop() elif opts.draw_topology: LOG.info('Saving the topology file at %s', opts.figure_path) draw(nodes=emane_topology.nodes, out_file=opts.figure_path) elif opts.draw_results: report = Report(num_nodes=4) report.draw_figures() return 0
if __name__ == '__main__': sys.exit(main())