1 from requests
import get
, put
, delete
2 from tabulate
import tabulate
6 from emuvim
.cli
import prometheus
8 pp
= pprint
.PrettyPrinter(indent
=4)
10 class RestApiClient():
15 def execute_command(self
, args
):
16 if getattr(self
, args
["command"]) is not None:
17 # call the local method with the same name as the command arg
18 getattr(self
, args
["command"])(args
)
20 print("Command not implemented.")
22 def setup_metric(self
, args
):
23 vnf_name
= self
._parse
_vnf
_name
(args
.get("vnf_name"))
24 vnf_interface
= self
._parse
_vnf
_interface
(args
.get("vnf_name"))
26 response
= put("%s/restapi/monitor/%s/%s/%s" %
27 (args
.get("endpoint"),
31 pp
.pprint(response
.json())
33 def stop_metric(self
, args
):
34 vnf_name
= self
._parse
_vnf
_name
(args
.get("vnf_name"))
35 vnf_interface
= self
._parse
_vnf
_interface
(args
.get("vnf_name"))
37 response
= delete("%s/restapi/monitor/%s/%s/%s" %
38 (args
.get("endpoint"),
42 pp
.pprint(response
.json())
44 def setup_flow(self
, args
):
45 vnf_name
= self
._parse
_vnf
_name
(args
.get("vnf_name"))
46 vnf_interface
= self
._parse
_vnf
_interface
(args
.get("vnf_name"))
48 response
= put("%s/restapi/monitor/%s/%s/%s/%s" %
49 (args
.get("endpoint"),
55 pp
.pprint(response
.json())
57 def stop_flow(self
, args
):
58 vnf_name
= self
._parse
_vnf
_name
(args
.get("vnf_name"))
59 vnf_interface
= self
._parse
_vnf
_interface
(args
.get("vnf_name"))
61 response
= delete("%s/restapi/monitor/%s/%s/%s/%s" %
62 (args
.get("endpoint"),
68 pp
.pprint(response
.json())
70 def _parse_vnf_name(self
, vnf_name_str
):
71 vnf_name
= vnf_name_str
.split(':')[0]
74 def _parse_vnf_interface(self
, vnf_name_str
):
76 vnf_interface
= vnf_name_str
.split(':')[1]
82 parser
= argparse
.ArgumentParser(description
='son-emu monitor')
85 choices
=['setup_metric', 'stop_metric', 'setup_flow', 'stop_flow','prometheus'],
86 help="setup/stop a metric/flow to be monitored or query Prometheus")
88 "--vnf_name", "-vnf", dest
="vnf_name",
89 help="vnf name:interface to be monitored")
91 "--metric", "-m", dest
="metric",
92 help="tx_bytes, rx_bytes, tx_packets, rx_packets")
94 "--cookie", "-c", dest
="cookie",
95 help="flow cookie to monitor")
97 "--query", "-q", dest
="query",
98 help="prometheus query")
100 "--datacenter", "-d", dest
="datacenter",
101 help="Data center where the vnf is deployed")
103 "--endpoint", "-e", dest
="endpoint",
104 default
="http://127.0.0.1:5001",
105 help="UUID of the plugin to be manipulated.")
108 args
= vars(parser
.parse_args(argv
))
110 c
.execute_command(args
)