OSDN Git Service

dbb8da046fbd0db220978e87e97b03616fb9cc78
[ftg/ftg.git] / ftg.py
1 #!/usr/bin/env python
2 # vim: tabstop=4 shiftwidth=4 softtabstop=4
3 # -*- coding: utf-8 -*-
4 #
5 #   ftg.py : It is a tool that ,
6 #            you can capture and anlyze.
7 #
8
9 __version__ = "0.7"
10
11 import sys
12 import os
13 import re
14 from optparse import OptionParser, OptionGroup
15 from ftg.grapher import Grapher
16 from ftg.utils.common import CommonUtils
17 from ftg.formatter.graphviz_tb import GraphvizTBFormatter
18 from ftg.formatter.csv import CSVFormatter
19 from ftg.formatter.tsv import TSVFormatter
20 from ftg.formatter.ovs_add_flow import OVSAddFlowFormatter
21
22
23 if __name__ == "__main__":
24     # init program options
25     p = OptionParser(version="ver: %s" % __version__)
26     p.add_option(
27         '-i', '--ovs_dump_file', dest='ovs_dump_file',
28         help="specify Open vSwitch dump-flows FILE", metavar="FILE")
29     p.add_option(
30         '-c', '--csv_dump_file', dest='csv_dump_file',
31         help="specify CSV dump FILE", metavar="FILE")
32     p.add_option(
33         '-t', '--tsv_dump_file', dest='tsv_dump_file',
34         help="specify TSV dump FILE", metavar="FILE")
35     p.add_option(
36         '-f', '--formatter', dest='formatter',
37         help="specify formatter (graphviz, csv, tsv, ovsflow)", default="graphviz")
38     p.add_option(
39         '-b', '--entries_per_block', dest='entries_per_block', type='int',
40         help="specify number of entries in priority block", default=10)
41     p.add_option(
42         '-l', '--description_list_file', dest='description_list_file',
43         help="specify description list FILE", metavar="FILE")
44     p.add_option(
45         '-T', '--tables', dest='output_target_tables',
46         help="specify the tables to be output.")
47     p.add_option(
48         '-v', '--verbose', dest='verbose', action="store_true", default=False,
49         help="verbose output")
50     p.add_option(
51         '-d', '--debug', dest='debug', action="store_true", default=False,
52         help="debug output")
53     g1 = OptionGroup(p, "Output Flags")
54     g1.add_option(
55         '--enable_output_resubmit_loop', dest='output_resubmit_loop',
56         action="store_true", default=True,
57         help="enable the output of the 'resubmit to start' that re-evaluate at the same table")
58     g1.add_option(
59         '--disable_output_resubmit_loop', dest='output_resubmit_loop',
60         action="store_false", default=True,
61         help="disable the output of the 'resubmit to start' that re-evaluate at the same table")
62     g1.add_option(
63         '--enable_output_summary', dest='output_summary',
64         action="store_true", default=True,
65         help="enable the output of the summary informations")
66     g1.add_option(
67         '--disable_output_summary', dest='output_summary',
68         action="store_false", default=True,
69         help="disable the output of the output summary informations")
70     p.add_option_group(g1)
71     (opts, args) = p.parse_args()
72
73     util = CommonUtils(opts)
74
75     output_target_tables = []
76     if  opts.output_target_tables is not None:
77         output_target_tables = opts.output_target_tables.split(',')
78         
79     if  opts.formatter == "graphviz":
80         formatter = GraphvizTBFormatter(util)
81         formatter.set_output_target_tables(output_target_tables)
82         formatter.set_entries_per_block(opts.entries_per_block)
83         formatter.set_output_summary(opts.output_summary)
84         formatter.set_output_resubmit_loop(opts.output_resubmit_loop)
85     elif  opts.formatter == "csv":
86         formatter = CSVFormatter(util)
87     elif  opts.formatter == "tsv":
88         formatter = TSVFormatter(util)
89     elif  opts.formatter == "ovsflow":
90         formatter = OVSAddFlowFormatter(util)
91     else:
92         util.error_out("specify valid formatter.")
93         sys.exit(1)
94
95     # load description list
96     if opts.description_list_file is not None and opts.description_list_file != "":
97         formatter.set_description_list_file(opts.description_list_file)
98         formatter.load_description_list()
99         
100     if opts.ovs_dump_file is not None and opts.ovs_dump_file != "":
101         grapher = Grapher(util, opts.ovs_dump_file, Grapher.DUMP_FILE_OVS, formatter)
102     elif opts.csv_dump_file is not None and opts.csv_dump_file != "":
103         grapher = Grapher(util, opts.csv_dump_file, Grapher.DUMP_FILE_CSV, formatter)
104     elif opts.tsv_dump_file is not None and opts.tsv_dump_file != "":
105         grapher = Grapher(util, opts.tsv_dump_file, Grapher.DUMP_FILE_TSV, formatter)
106     else:
107         util.error_out("specify flow file with -i or -c or -t option.")
108         sys.exit(1)
109     
110     grapher.run()