OSDN Git Service

add Web API Server options (-I, -L, -D)
[ti2/ti2.git] / ti2.py
1 #!/usr/bin/env python
2 # vim: tabstop=4 shiftwidth=4 softtabstop=4
3 # -*- coding: utf-8 -*-
4 #
5 #   ti2.py : List informations of the TAP devices for running VMs
6 #
7 #
8
9 __version__ = '1.2'
10
11 import sys
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
22 import api_server
23
24
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()")
31
32
33 def collect_linkpairs(opts, util, formatter):
34     def collect_func():
35         col = Collector(opts, util, formatter)
36         if opts.remote_sshkey is not None:
37             col.set_remote_sshkey(opts.remote_sshkey)
38             col.connect_ssh()
39         if opts.remote_password is not None:
40             col.set_remote_password(opts.remote_password)
41             col.connect_ssh()
42         col.run()
43         return col.get_linkpairs()
44     return collect_func
45
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]",
63                  metavar="FORMAT")
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")
82     g2.add_option(
83         '--disable_ovs_agent', dest='disable_ovs_agent', action="store_true", default=False,
84         help="disable Open vSwitch collector agent")
85     g2.add_option(
86         '--disable_linux_agent', dest='disable_linux_agent', action="store_true", default=False,
87         help="disable linux OS collector agent")
88     g2.add_option(
89         '--disable_linuxnet_agent', dest='disable_linuxnet_agent', action="store_true", default=False,
90         help="disable linux Network collector agent")
91     g2.add_option(
92         '--disable_linuxbridge_agent', dest='disable_linuxbridge_agent', action="store_true", default=False,
93         help="disable linux bridge collector agent")
94     g2.add_option(
95         '--disable_linuxvlan_agent', dest='disable_linuxvlan_agent', action="store_true", default=False,
96         help="disable linux vlan collector agent")
97     g2.add_option(
98         '--disable_libvirt_agent', dest='disable_libvirt_agent', action="store_true", default=False,
99         help="disable libvirt collector agent")
100     g2.add_option(
101         '--disable_namespace_agent', dest='disable_namespace_agent', action="store_true", default=False,
102         help="disable network namespace collector agent")
103     g2.add_option(
104         '--disable_sspvxlan_agent', dest='disable_sspvxlan_agent', action="store_true", default=False,
105         help="disable SSP VXLAN collector agent")
106     g2.add_option(
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)
110     p.add_option(
111         '-v', '--verbose', dest='verbose', action="store_true", default=False,
112         help="verbose output.")
113     (opts, args) = p.parse_args()
114     util = CommonUtils()
115     util.set_opts(opts)
116     util.debug_out("init program options")
117
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)
126     else:
127         formatter = GraphvizTBFormatter()
128     util.debug_out("formatter: " + str(formatter))
129
130     if opts.import_file is not None:
131         importer = JsonImporter(util, opts.import_file, formatter)
132         importer.run()
133         linkpairs = importer.get_linkpairs()
134     else:
135         collect_func = collect_linkpairs(opts, util, formatter)
136         linkpairs = collect_func()
137
138     if opts.export_stdout:
139         exporter = JsonExporter(util, linkpairs)
140         util.message_out(exporter.run())
141         sys.exit(0)
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")
145             sys.exit(1)
146         collect_task = CollectTask(collect_func, opts.collect_interval)
147         collect_task.start()
148         api_server.util = util
149         api_server.collect_func = collect_func
150         api_server.start_app(opts.listen_address, opts.debug_api_server)
151     else:
152         print_linkpair_records(linkpairs)