Пример #1
0
 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))
Пример #2
0
 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))
Пример #3
0
 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))
Пример #4
0
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))
Пример #5
0
    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)
Пример #6
0
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))