From a2d1314a7580f7527927a25a0a1018b50d696b4d Mon Sep 17 00:00:00 2001 From: Retspen Date: Mon, 23 Mar 2015 14:28:24 +0200 Subject: [PATCH] Fixed graphs when status !=1 --- instances/views.py | 117 +++++++++++++++++++++++------------------ vrtManager/instance.py | 49 ++++++++++------- 2 files changed, 95 insertions(+), 71 deletions(-) diff --git a/instances/views.py b/instances/views.py index af3fd84..a22ee2c 100644 --- a/instances/views.py +++ b/instances/views.py @@ -412,28 +412,15 @@ def instance(request, compute_id, vname): return render(request, 'instance.html', locals()) -def inst_graph(request, compute_id, vname): +def inst_status(request, compute_id, vname): """ - Return instance usage + :param request: + :return: """ + if not request.user.is_authenticated(): return HttpResponseRedirect(reverse('login')) - datasets = {} - datasets_rd = [] - datasets_wr = [] - json_blk = [] - cookie_blk = {} - blk_error = False - datasets_rx = [] - datasets_tx = [] - json_net = [] - cookie_net = {} - net_error = False - networks = None - disks = None - points = 5 - curent_time = time.strftime("%H:%M:%S") compute = Compute.objects.get(id=compute_id) try: @@ -443,18 +430,58 @@ def inst_graph(request, compute_id, vname): compute.type, vname) status = conn.get_status() + conn.close() + except libvirtError: + status = None + + data = json.dumps({'status': status}) + response = HttpResponse() + response['Content-Type'] = "text/javascript" + response.write(data) + return response + + +def inst_graph(request, compute_id, vname): + """ + :param request: + :return: + """ + + if not request.user.is_authenticated(): + return HttpResponseRedirect(reverse('login')) + + datasets = {} + datasets_rd = [] + datasets_wr = [] + json_blk = [] + cookie_blk = {} + datasets_rx = [] + datasets_tx = [] + json_net = [] + cookie_net = {} + points = 5 + curent_time = time.strftime("%H:%M:%S") + compute = Compute.objects.get(id=compute_id) + cookies = request.COOKIES + response = HttpResponse() + response['Content-Type'] = "text/javascript" + + def check_points(dataset): + if len(dataset) > points: + dataset.pop(0) + return dataset + + try: + conn = wvmInstance(compute.hostname, + compute.login, + compute.password, + compute.type, + vname) cpu_usage = conn.cpu_usage() blk_usage = conn.disk_usage() net_usage = conn.net_usage() conn.close() - except libvirtError: - status = None - blk_usage = None - cpu_usage = None - net_usage = None - if status == 1: - cookies = request.COOKIES if cookies.get('cpu') == '{}' or not cookies.get('cpu') or not cpu_usage: datasets['cpu'] = [0] datasets['timer'] = [curent_time] @@ -465,10 +492,8 @@ def inst_graph(request, compute_id, vname): datasets['timer'].append(curent_time) datasets['cpu'].append(int(cpu_usage['cpu'])) - if len(datasets['timer']) > points: - datasets['timer'].pop(0) - if len(datasets['cpu']) > points: - datasets['cpu'].pop(0) + datasets['timer'] = check_points(datasets['timer']) + datasets['cpu'] = check_points(datasets['cpu']) for blk in blk_usage: if cookies.get('blk') == '{}' or not cookies.get('blk') or not blk_usage: @@ -476,20 +501,14 @@ def inst_graph(request, compute_id, vname): datasets_rd.append(0) else: datasets['blk'] = eval(cookies.get('blk')) - try: - datasets_rd = datasets['blk'][blk['dev']][0] - datasets_wr = datasets['blk'][blk['dev']][1] - except: - blk_error = True + datasets_rd = datasets['blk'][blk['dev']][0] + datasets_wr = datasets['blk'][blk['dev']][1] - if not blk_error: datasets_rd.append(int(blk['rd']) / 1048576) datasets_wr.append(int(blk['wr']) / 1048576) - if len(datasets_rd) > points: - datasets_rd.pop(0) - if len(datasets_wr) >= points + 1: - datasets_wr.pop(0) + datasets_rd = check_points(datasets_rd) + datasets_wr = check_points(datasets_wr) json_blk.append({'dev': blk['dev'], 'data': [datasets_rd, datasets_wr]}) cookie_blk[blk['dev']] = [datasets_rd, datasets_wr] @@ -500,32 +519,26 @@ def inst_graph(request, compute_id, vname): datasets_tx.append(0) else: datasets['net'] = eval(cookies.get('net')) - try: - datasets_rx = datasets['net'][net['dev']][0] - datasets_tx = datasets['net'][net['dev']][1] - except: - net_error = True + datasets_rx = datasets['net'][net['dev']][0] + datasets_tx = datasets['net'][net['dev']][1] - if not net_error: datasets_rx.append(int(net['rx']) / 1048576) datasets_tx.append(int(net['tx']) / 1048576) - if len(datasets_rx) > points: - datasets_rx.pop(0) - if len(datasets_tx) > points: - datasets_tx.pop(0) + datasets_rx = check_points(datasets_rx) + datasets_tx = check_points(datasets_tx) json_net.append({'dev': net['dev'], 'data': [datasets_rx, datasets_tx]}) cookie_net[net['dev']] = [datasets_rx, datasets_tx] - data = json.dumps({'status': status, 'cpudata': datasets['cpu'], 'blkdata': json_blk, 'netdata': json_net, 'timeline': datasets['timer']}) + data = json.dumps({'cpudata': datasets['cpu'], 'blkdata': json_blk, 'netdata': json_net, 'timeline': datasets['timer']}) - response = HttpResponse() - response['Content-Type'] = "text/javascript" - if status == 1: response.cookies['cpu'] = datasets['cpu'] response.cookies['timer'] = datasets['timer'] response.cookies['blk'] = cookie_blk response.cookies['net'] = cookie_net + except libvirtError: + data = json.dumps({'error': 'Error 500'}) + response.write(data) return response \ No newline at end of file diff --git a/vrtManager/instance.py b/vrtManager/instance.py index a5447c6..f284f25 100644 --- a/vrtManager/instance.py +++ b/vrtManager/instance.py @@ -336,31 +336,42 @@ class wvmInstance(wvmConnect): dev_file = dev_bus devices.append([dev_file, dev_bus]) for dev in devices: - rd_use_ago = self.instance.blockStats(dev[0])[1] - wr_use_ago = self.instance.blockStats(dev[0])[3] - time.sleep(1) - rd_use_now = self.instance.blockStats(dev[0])[1] - wr_use_now = self.instance.blockStats(dev[0])[3] - rd_diff_usage = rd_use_now - rd_use_ago - wr_diff_usage = wr_use_now - wr_use_ago + if self.get_status() == 1: + rd_use_ago = self.instance.blockStats(dev[0])[1] + wr_use_ago = self.instance.blockStats(dev[0])[3] + time.sleep(1) + rd_use_now = self.instance.blockStats(dev[0])[1] + wr_use_now = self.instance.blockStats(dev[0])[3] + rd_diff_usage = rd_use_now - rd_use_ago + wr_diff_usage = wr_use_now - wr_use_ago + else: + rd_diff_usage = 0 + wr_diff_usage = 0 + dev_usage.append({'dev': dev[1], 'rd': rd_diff_usage, 'wr': wr_diff_usage}) + return dev_usage def net_usage(self): devices = [] dev_usage = [] - tree = ElementTree.fromstring(self._XMLDesc(0)) - for target in tree.findall("devices/interface/target"): - devices.append(target.get("dev")) - for i, dev in enumerate(devices): - rx_use_ago = self.instance.interfaceStats(dev)[0] - tx_use_ago = self.instance.interfaceStats(dev)[4] - time.sleep(1) - rx_use_now = self.instance.interfaceStats(dev)[0] - tx_use_now = self.instance.interfaceStats(dev)[4] - rx_diff_usage = (rx_use_now - rx_use_ago) * 8 - tx_diff_usage = (tx_use_now - tx_use_ago) * 8 - dev_usage.append({'dev': i, 'rx': rx_diff_usage, 'tx': tx_diff_usage}) + if self.get_status() == 1: + tree = ElementTree.fromstring(self._XMLDesc(0)) + for target in tree.findall("devices/interface/target"): + devices.append(target.get("dev")) + for i, dev in enumerate(devices): + rx_use_ago = self.instance.interfaceStats(dev)[0] + tx_use_ago = self.instance.interfaceStats(dev)[4] + time.sleep(1) + rx_use_now = self.instance.interfaceStats(dev)[0] + tx_use_now = self.instance.interfaceStats(dev)[4] + rx_diff_usage = (rx_use_now - rx_use_ago) * 8 + tx_diff_usage = (tx_use_now - tx_use_ago) * 8 + dev_usage.append({'dev': i, 'rx': rx_diff_usage, 'tx': tx_diff_usage}) + else: + for i, dev in enumerate(self.get_net_device()): + dev_usage.append({'dev': i, 'rx': 0, 'tx': 0}) + return dev_usage def get_telnet_port(self):