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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
#!/usr/bin/env python
# Copyright 2017 Cisco Systems, Inc. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
#
# This is an example of python application controling a nfvbench server
# using the nfvbench client API.
# The nfvbench server must run in background using the --server option.
# Since HTML pages are not required, the path to pass to --server can be any directory on the host.
#
import argparse
import json
import sys
from client import NfvbenchClient
#
# At the CLI, the user can either:
# - pass an nfvbench configuration as a string (-c <config>)
# - pass an nfvbench configuration as a file name containing the
# configuration (-f <config_file_path>)
# - or pass a test config (-e <config>) that will be echoed back by the server as is
#
def main():
parser = argparse.ArgumentParser()
parser.add_argument('-f', '--file', dest='file',
action='store',
help='NFVbench config file to execute (json format)',
metavar='<config_file_path>')
parser.add_argument('-c', '--config', dest='config',
action='store',
help='NFVbench config to execute (json format)',
metavar='<config>')
parser.add_argument('-e', '--echo', dest='echo',
action='store',
help='NFVbench config to echo (json format)',
metavar='<config>')
parser.add_argument('-t', '--timeout', dest='timeout',
default=900,
action='store',
help='time (seconds) to wait for NFVbench result',
metavar='<config>')
parser.add_argument('--use-socketio', dest='use_socketio',
action='store_true',
help='NFVbench config to echo (json format)')
parser.add_argument('url', help='nfvbench server url (e.g. http://10.0.0.1:5000)')
opts = parser.parse_args()
if not opts.file and not opts.config and not opts.echo:
print('at least one of -f or -c or -e required')
sys.exit(-1)
nfvbench = NfvbenchClient(opts.url, opts.use_socketio)
# convert JSON into a dict
try:
timeout = int(opts.timeout)
if opts.file:
with open(opts.file) as fd:
config = json.loads(fd.read())
result = nfvbench.run_config(config, timeout=timeout)
elif opts.config:
config = json.loads(opts.config)
result = nfvbench.run_config(config, timeout=timeout)
elif opts.echo:
config = json.loads(opts.echo)
result = nfvbench.echo_config(config, timeout=timeout)
print('Result:', result)
except ValueError as ex:
print('Input configuration is invalid: ' + str(ex))
print()
if __name__ == "__main__":
main()
|