示例#1
0
    def test_node_size_vector(self):
        node1, node2 = mock.MagicMock(), mock.MagicMock()
        node1.id, node1.size, node1.connections = 'node1', 0, set(
            ['node2', 'external1'])
        node2.id, node2.size, node2.connections = 'node2', 0, set([])

        model = mock.MagicMock()
        model.nodes = [node1, node2]

        plotter1 = Plotter(model)
        self.assertIsNone(plotter1._node_size_vector)

        node1.size = 100

        plotter2 = Plotter(model)
        self.assertListEqual(plotter2._node_size_vector, [1000, 200, 200])
示例#2
0
    def test_graph_builder(self):
        node1, node2 = mock.MagicMock(), mock.MagicMock()
        node1.id, node1.size, node1.connections = 'node1', 42, set(
            ['node2', 'external1'])
        node2.id, node2.size, node2.connections = 'node2', 0, set([])

        model = mock.MagicMock()
        model.nodes = [node1, node2]

        plotter = Plotter(model)
        graph = plotter.graph

        self.assertIsNotNone(graph)
        self.assertEqual(len(graph.nodes()), 3)
        self.assertEqual(len(graph.edges()), 2)

        for n, d in graph.nodes_iter(data=True):
            if n == 'node1':
                self.assertTrue('size' in d)
                self.assertEqual(d['size'], 42)
            elif n == 'node2':
                self.assertTrue('size' in d)
                self.assertEqual(d['size'], 0)
            elif n == 'external1':
                self.assertFalse('size' in d)
            else:
                self.fail('Unexpected node: %s' % n)
示例#3
0
    def test_plotting(self):
        node1, node2 = mock.MagicMock(), mock.MagicMock()
        node1.id, node1.size, node1.connections = 'node1', 100, set(
            ['node2', 'external1'])
        node2.id, node2.size, node2.connections = 'node2', 0, set([])

        model = mock.MagicMock()
        model.nodes = [node1, node2]

        try:
            work_dir = tempfile.mkdtemp()

            with mock.patch(
                    'coffea.analyzer.Plotter._node_size_vector') as nsv_mock:
                nsv_mock.__get__ = mock.MagicMock()

                plotter = Plotter(model)

                filename = os.path.join(work_dir, 'test1.png')

                self.assertFalse(os.path.exists(filename))
                plotter.plot(filename=filename)
                self.assertTrue(os.path.exists(filename))
                self.assertFalse(nsv_mock.__get__.called)

            with mock.patch(
                    'coffea.analyzer.Plotter._node_size_vector') as nsv_mock:
                nsv_mock.__get__ = mock.MagicMock(
                    return_value=[1000, 200, 200])

                plotter = Plotter(model)

                filename = os.path.join(work_dir, 'test2.png')

                self.assertFalse(os.path.exists(filename))
                plotter.plot(filename=filename, calc_node_size=True)
                self.assertTrue(os.path.exists(filename))
                self.assertTrue(nsv_mock.__get__.called)

        finally:
            shutil.rmtree(work_dir)
示例#4
0
    def test_plotting(self):
        node1, node2 = mock.MagicMock(), mock.MagicMock()
        node1.id, node1.size, node1.connections = 'node1', 100, set(['node2', 'external1'])
        node2.id, node2.size, node2.connections = 'node2', 0, set([])
         
        model = mock.MagicMock()
        model.nodes = [node1, node2]

        try:
            work_dir = tempfile.mkdtemp()
           
            with mock.patch('coffea.analyzer.Plotter._node_size_vector') as nsv_mock:
                nsv_mock.__get__ = mock.MagicMock()

                plotter = Plotter(model)

                filename = os.path.join(work_dir, 'test1.png')
            
                self.assertFalse(os.path.exists(filename))
                plotter.plot(filename=filename)
                self.assertTrue(os.path.exists(filename))
                self.assertFalse(nsv_mock.__get__.called) 

            with mock.patch('coffea.analyzer.Plotter._node_size_vector') as nsv_mock:
                nsv_mock.__get__ = mock.MagicMock(return_value=[1000, 200, 200])

                plotter = Plotter(model)

                filename = os.path.join(work_dir, 'test2.png')
            
                self.assertFalse(os.path.exists(filename))
                plotter.plot(filename=filename, calc_node_size=True)
                self.assertTrue(os.path.exists(filename))
                self.assertTrue(nsv_mock.__get__.called) 
        
        finally:
            shutil.rmtree(work_dir)
from coffea.model import NodeIdFilter, NodeIdMapper

# Build a package dependency model using code size as weight
b = Builder(PackageNodeFactory(size_property="code"))

# Drop packages that don't belong to the org.jboss namespace
b.model.node_filters.append(NodeIdFilter(lambda it: it.startswith('org.jboss.')))

# Drop the org.jboss prefix for clarity
b.model.node_filters.append(NodeIdMapper(lambda it: it.replace('org.jboss.', '')))

# Reduce all child packages to the top level package (eg. "as.xyz" and "as.abc.pqr" will be merged into "as")
b.model.node_filters.append(NodeIdMapper(lambda it: it.split('.')[0]))

# Remove unimportant packages
b.model.node_filters.append(NodeIdFilter(lambda it: it not in ['logging']))

# Run the analysis 
b.append(jboss7_mods)

print 'Nodes: ', len(b.model.nodes)

p = Plotter(b.model)

# Plot using matplotlib
p.plot(calc_node_size=True)

# Plot to a file
#p.plot(filename='/tmp/jboss7_module_dependencies.png')