7 __author__ = "Jan Medved"
8 __copyright__ = "Copyright(c) 2014, Cisco Systems, Inc."
9 __license__ = "New-style BSD"
10 __email__ = "jmedved@cisco.com"
13 class Counter(object):
14 def __init__(self, start=0):
15 self.lock = threading.Lock()
18 def increment(self, value=1):
21 self.value = self.value + value
27 def __init__(self, verbose=False):
28 self.verbose = verbose
31 self.start = time.time()
34 def __exit__(self, *args):
35 self.end = time.time()
36 self.secs = self.end - self.start
37 self.msecs = self.secs * 1000 # millisecs
39 print("elapsed time: %f ms" % self.msecs)
42 # Initialize the totals over all threads
43 total_requests = Counter(0)
44 total_req_rate = Counter(0.0)
46 total_mbytes = Counter(0.0)
47 total_mb_rate = Counter(0.0)
49 putheaders = {"content-type": "application/json"}
50 getheaders = {"Accept": "application/json"}
53 "http://localhost:8080/restconf/operational/opendaylight-inventory:nodes"
55 N1T0_URL = "http://localhost:8080/restconf/operational/opendaylight-inventory:nodes/node/openflow:1/table/0"
59 print_lock = threading.Lock()
62 def get_inventory(tnum, url, hdrs, rnum, cond):
76 print("Thread %d: Getting %s" % (tnum, url))
78 s = requests.Session()
81 r = s.get(url, headers=hdrs, stream=False)
82 total_len += len(r.content)
85 results[r.status_code] += 1
87 results[r.status_code] = 1
89 total = sum(results.values())
91 total_requests.increment(total)
92 total_req_rate.increment(rate)
94 mbytes = total_len / (1024 * 1024)
95 mrate = mbytes / t.secs
96 total_mbytes.increment(mbytes)
97 total_mb_rate.increment(mrate)
100 print("\nThread %d: " % tnum)
101 print(" Elapsed time: %.2f," % t.secs)
102 print(" Requests: %d, Requests/sec: %.2f" % (total, rate))
103 print(" Volume: %.2f MB, Rate: %.2f MByte/s" % (mbytes, mrate))
111 if __name__ == "__main__":
113 parser = argparse.ArgumentParser(description="Restconf test program")
117 help="host where " "odl controller is running (default is 127.0.0.1)",
122 help="port on " "which odl's RESTCONF is listening (default is 8080)",
125 "--requests", type=int, default=10, help="number of " "requests to send"
129 default="restconf/operational/opendaylight-inventory:nodes",
136 help="Number of request worker threads, default=1",
138 in_args = parser.parse_args()
140 url = "http://" + in_args.odlhost + ":" + in_args.odlport + "/" + in_args.url
143 nthreads = int(in_args.nthreads)
144 cond = threading.Condition()
146 for i in range(nthreads):
147 t = threading.Thread(
148 target=get_inventory, args=(i, url, getheaders, int(in_args.requests), cond)
154 while finished < nthreads:
157 finished = finished + 1
160 "\nAggregate requests: %d, Aggregate requests/sec: %.2f"
161 % (total_requests.value, total_req_rate.value)
164 "Aggregate Volume: %.2f MB, Aggregate Rate: %.2f MByte/s"
165 % (total_mbytes.value, total_mb_rate.value)
168 # get_inventory(url, getheaders, int(in_args.requests))
170 # get_inventory(N1T0_URL, getheaders, 100)