def get_clusternodes(request): if ( request.user.is_superuser or request.user.has_perm('ganeti.view_instances') ): nodes = cache.get('allclusternodes') bad_clusters = cache.get('badclusters') bad_nodes = cache.get('badnodes') if nodes is None: nodes, bad_clusters, bad_nodes = prepare_clusternodes() cache.set('allclusternodes', nodes, 90) if bad_clusters: messages.add_message( request, msgs.WARNING, "Some nodes may be missing because the" + " following clusters are unreachable: " + ", ".join([c.description or c.hostname for c in bad_clusters]) ) cache.set('badclusters', bad_clusters, 90) if bad_nodes: messages.add_message( request, msgs.ERROR, "Some nodes appear to be offline: " + ", ".join(bad_nodes) ) cache.set('badnodes', bad_nodes, 90) if settings.SERVER_MONITORING_URL: servermon_url = settings.SERVER_MONITORING_URL status_dict = {} status_dict['offline'] = 0 status_dict['regular'] = 0 status_dict['drained'] = 0 status_dict['master'] = 0 status_dict['candidate'] = 0 for n in nodes: if n['role'] == 'O': status_dict['offline'] += 1 if n['role'] == 'D': status_dict['drained'] += 1 if n['role'] == 'R': status_dict['regular'] += 1 if n['role'] == 'C': status_dict['candidate'] += 1 if n['role'] == 'M': status_dict['master'] += 1 clusters = list(set([n['cluster'] for n in nodes])) return render( request, 'clusters/cluster_nodes.html', { 'nodes': nodes, 'clusters': clusters, 'statuses': status_dict, 'servermon': servermon_url } ) else: return HttpResponseRedirect(reverse('user-instances'))
def clusternodes_json(request, cluster=None): if ( request.user.is_superuser or request.user.has_perm('ganeti.view_instances') ): nodedetails = [] jresp = {} nodes = [] bad_clusters = [] bad_nodes = [] if cluster: cluster = get_object_or_404(Cluster, pk=cluster) cache.get('allclusternodes') if not nodes: nodes, bad_clusters, bad_nodes = prepare_clusternodes(cluster) cache.set('allclusternodes', nodes, 90) if bad_clusters: messages.add_message( request, msgs.ERROR, "Some clusters appear to be offline: " + ", ".join([c.slug for c in bad_clusters]) ) if bad_nodes: messages.add_message( request, msgs.ERROR, "Some nodes appear to be offline: " + ", ".join(bad_nodes) ) for node in nodes: if (not cluster or (cluster and node['cluster'] == cluster.hostname)): node_dict = {} node_dict['name'] = node['name'] # node_dict['node_group'] = node['node_group'] node_dict['mem_used'] = node['mem_used'] node_dict['mfree'] = node['mfree'] node_dict['mtotal'] = node['mtotal'] node_dict['shared_storage'] = node['shared_storage'] node_dict['disk_used'] = node['disk_used'] node_dict['dfree'] = node['dfree'] node_dict['dtotal'] = node['dtotal'] node_dict['ctotal'] = node['ctotal'] node_dict['pinst_cnt'] = node['pinst_cnt'] node_dict['pinst_list'] = node['pinst_list'] node_dict['role'] = node['role'] if cluster: node_dict['cluster'] = cluster.hostname else: node_dict['cluster'] = node['cluster'] nodedetails.append(node_dict) jresp['aaData'] = nodedetails res = jresp return HttpResponse(json.dumps(res), content_type='application/json') else: raise PermissionDenied
def get_clusternodes_pjax(request): if (request.user.is_superuser or request.user.has_perm('ganeti.view_instances')): nodes = cache.get('allclusternodes') bad_clusters = cache.get('badclusters') bad_nodes = cache.get('badnodes') if nodes is None: nodes, bad_clusters, bad_nodes = prepare_clusternodes() cache.set('allclusternodes', nodes, 180) if bad_clusters: for c in bad_clusters: messages.add_message( request, msgs.WARNING, "Some nodes may be missing because the" + " following clusters are unreachable: " + ", ".join([c.description or c.hostname])) cache.set('badclusters', bad_clusters, 180) if bad_nodes: messages.add_message( request, msgs.ERROR, "Some nodes appear to be offline: " + ", ".join(bad_nodes)) cache.set('badnodes', bad_nodes, 180) if settings.SERVER_MONITORING_URL: servermon_url = settings.SERVER_MONITORING_URL status_dict = {} status_dict['offline'] = 0 status_dict['regular'] = 0 status_dict['drained'] = 0 status_dict['master'] = 0 status_dict['candidate'] = 0 for n in nodes: if n['role'] == 'O': status_dict['offline'] += 1 if n['role'] == 'D': status_dict['drained'] += 1 if n['role'] == 'R': status_dict['regular'] += 1 if n['role'] == 'C': status_dict['candidate'] += 1 if n['role'] == 'M': status_dict['master'] += 1 clusters = list(set([n['cluster'] for n in nodes])) return render( request, 'clusters/cluster_nodes_pjax.html', { 'nodes': nodes, 'clusters': clusters, 'statuses': status_dict, 'servermon': servermon_url }) else: raise PermissionDenied
def clusternodes_json(request, cluster=None): if ( request.user.is_superuser or request.user.has_perm('ganeti.view_instances') ): nodedetails = [] jresp = {} nodes = None nodes = cache.get('allclusternodes') bad_clusters = cache.get('badclusters') bad_nodes = cache.get('badnodes') if nodes is None: nodes, bad_clusters, bad_nodes = prepare_clusternodes() cache.set('allclusternodes', nodes, 90) if bad_clusters: messages.add_message( request, msgs.WARNING, "Some nodes may be missing because the" + " following clusters are unreachable: " + ", ".join([c.description or c.hostname for c in bad_clusters]) ) cache.set('badclusters', bad_clusters, 90) if bad_nodes: messages.add_message( request, msgs.ERROR, "Some nodes appear to be offline: " + ", ".join(bad_nodes) ) cache.set('badnodes', bad_nodes, 90) if cluster: try: cluster = Cluster.objects.get(hostname=cluster) except Cluster.DoesNotExist: cluster = None for node in nodes: if not cluster or (cluster and node['cluster'] == cluster.slug): node_dict = {} node_dict['name'] = node['name'] # node_dict['node_group'] = node['node_group'] node_dict['mem_used'] = node['mem_used'] node_dict['mfree'] = node['mfree'] node_dict['mtotal'] = node['mtotal'] node_dict['shared_storage'] = node['shared_storage'] node_dict['disk_used'] = node['disk_used'] node_dict['dfree'] = node['dfree'] node_dict['dtotal'] = node['dtotal'] node_dict['ctotal'] = node['ctotal'] node_dict['pinst_cnt'] = node['pinst_cnt'] node_dict['pinst_list'] = node['pinst_list'] node_dict['role'] = node['role'] if cluster: node_dict['cluster'] = cluster.hostname else: node_dict['cluster'] = node['cluster'] nodedetails.append(node_dict) jresp['aaData'] = nodedetails res = jresp return HttpResponse(json.dumps(res), mimetype='application/json') else: raise PermissionDenied