forked from dbarrosop/sir
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsir.py
70 lines (53 loc) · 1.75 KB
/
sir.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
from bgp_controller.bgpc import BGPController
import argparse
import yaml
import sys
import logging
logger = logging.getLogger('sir')
def configure_parser():
parser = argparse.ArgumentParser(
description="",
)
global_parser = argparse.ArgumentParser(add_help=False)
global_parser.add_argument(
'-c',
default='etc/config.yaml',
dest='config',
help='Configuration file. Default is config.yaml'
)
subparsers = parser.add_subparsers()
parser_simulate = subparsers.add_parser(
'simulate',
help='Connects to pmacct folder and runs a simulation',
parents=[global_parser]
)
parser_simulate.set_defaults(action='simulate')
parser_run = subparsers.add_parser(
'run',
help='Runs the controller',
parents=[global_parser]
)
parser_run.set_defaults(action='run')
args = parser.parse_args()
return args
def configure_logging(config):
formatter = logging.Formatter('program=sir severity_label=%(levelname)s severity=%(levelno)s %(message)s')
logger.setLevel(config['logging_level'])
if config['log_to_stderr']:
logging.basicConfig(level=config['logging_level'], stream=sys.stderr)
if config['log_to_syslog']:
handler = logging.handlers.SysLogHandler(('127.0.0.1', config['syslog_server_port']))
handler.setFormatter(formatter)
logger.addHandler(handler)
def cli():
args = configure_parser()
content = open(args.config, 'r')
config = yaml.load(content)
configure_logging(config)
bgp_controller = BGPController(config)
if args.action == 'simulate':
bgp_controller.simulate()
elif args.action == 'run':
bgp_controller.run()
if __name__ == "__main__":
cli()