2 # vim: tabstop=4 shiftwidth=4 softtabstop=4
3 # -*- coding: utf-8 -*-
5 # ti2.py : List informations of the TAP devices for running VMs
12 from optparse import OptionParser, OptionGroup
13 from linkpair.collect.collector import Collector
14 from linkpair.formatter.grapheasy import GraphEasyFormatter
15 from linkpair.formatter.springy import SpringyFormatter
16 from linkpair.formatter.springy_raphael import SpringyRaphaelFormatter
17 from linkpair.formatter.graphviz_tb import GraphvizTBFormatter
18 from linkpair.utils.common import CommonUtils
19 from linkpair.exporter.JSON import JsonExporter
20 from linkpair.importer.JSON import JsonImporter
21 from linkpair.timer.collect_task import CollectTask
25 def print_linkpair_records(linkpairs):
26 util.debug_out("start print_linkpair_records()")
27 formatter.set_linkpairs(linkpairs)
28 for linkpair in formatter.format_linkpairs():
29 util.message_out(linkpair)
30 util.debug_out("end print_linkpair_records()")
33 def collect_linkpairs(opts, util, formatter):
35 col = Collector(opts, util, formatter)
36 if opts.remote_sshkey is not None:
37 col.set_remote_sshkey(opts.remote_sshkey)
39 if opts.remote_password is not None:
40 col.set_remote_password(opts.remote_password)
43 return col.get_linkpairs()
46 if __name__ == "__main__":
47 # init program options
48 p = OptionParser(version="ver:%s" % __version__)
49 g1 = OptionGroup(p, "Remote connection",
50 "connect to a remote system via SSH")
51 g1.add_option('-r', '--remote', dest='remote_desc',
52 help="specify user's name and hostname, port number (ex. -r user@hostname:22)", metavar="REMOTE_DESC")
53 g1.add_option('-p', '--password', dest='remote_password',
54 help="specify user's SSH password", metavar="PASSWORD")
55 g1.add_option('-k', '--sshkey', dest='remote_sshkey',
56 help="specify user's SSH private-key file", metavar="FILE")
57 p.add_option_group(g1)
58 p.add_option('-f', '--format', dest='format',
59 choices=['g', 'graph-easy', 's', 'springy',
60 'r', 'springy-raphael', 't', 'graphviz-tb'],
61 default="graphviz-tb",
62 help="specify output format [FORMAT: g/graph-easy, s/springy, r/springy-raphael, t/graphviz-tb]",
64 p.add_option('-d', '--debug', dest='debug', action="store_true", default=False,
65 help="enable debug output")
66 p.add_option('-e', '--export_file', dest='export_file',
67 help="export linkpairs to json file", metavar="FILE")
68 p.add_option('-x', '--export_stdout', dest='export_stdout', action="store_true", default=False,
69 help="export linkpairs to stdout")
70 p.add_option('-i', '--import_file', dest='import_file',
71 help="import json file as linkpairs", metavar="FILE")
72 p.add_option('-a', '--api_server', dest='api_server', action="store_true", default=False,
73 help="enable Web API server")
74 p.add_option('-I', '--collect_interval', dest='collect_interval', type='int', default=30,
75 help="interval to run the collect task (Web API server, default: 30 sec)")
76 p.add_option('-L', '--listen_address', dest='listen_address', default='localhost:23456',
77 help="specify the listen address that accepts (Web API server, default: localhost:23456)")
78 p.add_option('-D', '--debug_api_server', dest='debug_api_server', action="store_true", default=False,
79 help="enable debug mode of Web API server")
80 g2 = OptionGroup(p, "Collector Agent flags",
81 "disable Collector Agents")
83 '--disable_ovs_agent', dest='disable_ovs_agent', action="store_true", default=False,
84 help="disable Open vSwitch collector agent")
86 '--disable_linux_agent', dest='disable_linux_agent', action="store_true", default=False,
87 help="disable linux OS collector agent")
89 '--disable_linuxnet_agent', dest='disable_linuxnet_agent', action="store_true", default=False,
90 help="disable linux Network collector agent")
92 '--disable_linuxbridge_agent', dest='disable_linuxbridge_agent', action="store_true", default=False,
93 help="disable linux bridge collector agent")
95 '--disable_linuxvlan_agent', dest='disable_linuxvlan_agent', action="store_true", default=False,
96 help="disable linux vlan collector agent")
98 '--disable_libvirt_agent', dest='disable_libvirt_agent', action="store_true", default=False,
99 help="disable libvirt collector agent")
101 '--disable_namespace_agent', dest='disable_namespace_agent', action="store_true", default=False,
102 help="disable network namespace collector agent")
104 '--disable_sspvxlan_agent', dest='disable_sspvxlan_agent', action="store_true", default=False,
105 help="disable SSP VXLAN collector agent")
107 '--disable_veth_agent', dest='disable_veth_agent', action="store_true", default=False,
108 help="disable veth collector agent")
109 p.add_option_group(g2)
111 '-v', '--verbose', dest='verbose', action="store_true", default=False,
112 help="verbose output.")
113 (opts, args) = p.parse_args()
116 util.debug_out("init program options")
118 if opts.format == "g" or opts.format == "graph-easy":
119 formatter = GraphEasyFormatter(util)
120 elif opts.format == "s" or opts.format == "springy":
121 formatter = SpringyFormatter(util)
122 elif opts.format == "r" or opts.format == "springy-raphael":
123 formatter = SpringyRaphaelFormatter(util)
124 elif opts.format == "t" or opts.format == "graphviz-tb":
125 formatter = GraphvizTBFormatter(util)
127 formatter = GraphvizTBFormatter()
128 util.debug_out("formatter: " + str(formatter))
130 if opts.import_file is not None:
131 importer = JsonImporter(util, opts.import_file, formatter)
133 linkpairs = importer.get_linkpairs()
135 collect_func = collect_linkpairs(opts, util, formatter)
136 linkpairs = collect_func()
138 if opts.export_stdout:
139 exporter = JsonExporter(util, linkpairs)
140 util.message_out(exporter.run())
142 elif opts.api_server:
143 if opts.collect_interval < 3:
144 util.error_out("Inerval to run the collect task(-I option), please at least 3 seconds")
146 collect_task = CollectTask(collect_func, opts.collect_interval)
148 api_server.util = util
149 api_server.collect_func = collect_func
150 api_server.start_app(opts.listen_address, opts.debug_api_server)
152 print_linkpair_records(linkpairs)