def test_generate_empty_graph(self): """Should generate an empty graph when no nodes are given""" data = chef.filter_nodes(self.nodes, "badenv") graphs.generate_node_map(data, self.roles) self.assertTrue(os.path.exists(self.filepath)) size = os.path.getsize(self.filepath) max_size = 650 self.assertTrue(size < max_size, "Size greater than {0}: {1}".format(max_size, size))
def test_generate_small_graph(self): """Should generate a graph when some nodes are given""" data = chef.filter_nodes(self.nodes, 'staging', virt_roles='guest') graphs.generate_node_map(data, self.roles) self.assertTrue(os.path.exists(self.filepath)) size = os.path.getsize(self.filepath) #min_size = 3000 # png #max_size = 4000 # png min_size = 1000 # svg max_size = 1500 # svg self.assertTrue(size > min_size and size < max_size, "Size not between {0} and {1}: {2}".format( min_size, max_size, size))
def test_generate_connected_graph(self): """Should generate a connected graph when connected nodes are given""" data = chef.filter_nodes(self.nodes, 'production', virt_roles='guest') graphs.generate_node_map(data, self.roles) self.assertTrue(os.path.exists(self.filepath)) size = os.path.getsize(self.filepath) # Graph size with connections #min_size = 20000 # png #max_size = 23000 # png min_size = 5000 # svg max_size = 7000 # svg self.assertTrue(size > min_size and size < max_size, "Size not between {0} and {1}: {2}".format( min_size, max_size, size))
def graph(request): """Graph view where users can visualize graphs of their nodes generated using Graphviz open source graph visualization library """ _show_repo_sync_date(request) data = {} options = _set_options(request.GET.get('options')) env_filter = request.GET.get('env', REPO['DEFAULT_ENV']) try: data = _get_data(request, env_filter, request.GET.get('roles', ''), 'guest') except RepoError as e: add_message(request, ERROR, str(e)) else: if env_filter: success, msg = graphs.generate_node_map( data['nodes_extended'], data.get('roles', []), 'show_hostnames' in options) data['draw_graph'] = success if not success: add_message(request, ERROR, msg) else: add_message(request, WARNING, "Please select an environment") data['show_hostnames'] = 'show_hostnames' in options data['query_string'] = request.META['QUERY_STRING'] return render_to_response('graph.html', data, context_instance=RequestContext(request))
def test_graph_timeout(self): """Should display an error message when GraphViz excesses the timeout """ error_msg = "Unable to draw graph, timeout exceeded" data = chef.filter_nodes(self.nodes, "production") with patch("kitchen.dashboard.graphs.GraphThread.isAlive", return_value=True): with patch("kitchen.dashboard.graphs.GraphThread.kill", return_value=True): success, msg = graphs.generate_node_map(data, self.roles) self.assertFalse(success) self.assertTrue(error_msg in msg)
def graph(request): """Graph view where users can visualize graphs of their nodes generated using Graphviz open source graph visualization library """ _show_repo_sync_date(request) data = {} options = _set_options(request.GET.get('options')) env_filter = request.GET.get('env', REPO['DEFAULT_ENV']) roles_filter = [role for role in request.GET.get('roles', '').split(',') if role] env_nodes = [] try: data = _get_data(request, env_filter, '', 'guest') except RepoError as e: add_message(request, ERROR, str(e)) else: if env_filter: env_nodes = data['nodes_extended'] if roles_filter: # Filter the env nodes by role data['nodes_extended'] = filter_nodes(data['nodes_extended'], roles=roles_filter) data['filter_roles'] = roles_filter success, msg = graphs.generate_node_map( data['nodes_extended'], data.get('roles', []), 'show_hostnames' in options) data['draw_graph'] = success if not success: add_message(request, ERROR, msg) else: data['related_roles'] = graphs.get_role_relations(env_filter, roles_filter, env_nodes) else: add_message(request, WARNING, "Please select an environment") data['show_hostnames'] = 'show_hostnames' in options data['view'] = 'graph' return render_to_response('graph.html', data, context_instance=RequestContext(request))