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])
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)
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)
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')