def write_dot_file(basename, edge_list, vertices=None, label=None, destdir=None,
reformat_labels=True, directed=False, debug=None, edge_colors=None,
- edge_labels=None):
+ edge_labels=None, vertex_colors=None):
from tempfile import NamedTemporaryFile
if label:
basename += '_' + label.translate(None, ', ') #fix DN, guid labels
print >>f, '%s %s {' % ('digraph' if directed else 'graph', graphname)
print >>f, 'label="%s";\nfontsize=20;' % (label or graphname)
if vertices:
- for v in vertices:
+ for i, v in enumerate(vertices):
if reformat_labels:
v = v.replace(',', '\\n')
- print >>f, '"%s";' % (v,)
+ vc = ('color="%s"' % vertex_colors[i]) if vertex_colors else ''
+ print >>f, '"%s" [%s];' % (v, vc)
for i, edge in enumerate(edge_list):
a, b = edge
def verify_and_dot(basename, edges, vertices=None, label=None, destdir=None,
reformat_labels=True, directed=False, properties=(), fatal=True,
debug=None, verify=True, dot_files=False, edge_colors=None,
- edge_labels=None):
+ edge_labels=None, vertex_colors=None):
title = '%s %s' % (basename, label or '')
if verify:
if dot_files:
write_dot_file(basename, edges, vertices=vertices, label=label, destdir=destdir,
reformat_labels=reformat_labels, directed=directed, debug=debug,
- edge_colors=edge_colors, edge_labels=edge_labels)
+ edge_colors=edge_colors, edge_labels=edge_labels,
+ vertex_colors=vertex_colors)
def list_verify_tests():
for k, v in sorted(globals().items()):
dot_edges = []
dot_vertices = []
- colours = []
- for site in self.site_table.values():
- for dsa in site.dsa_table.values():
- dot_vertices.append(dsa.dsa_dnstr)
- for con in dsa.connect_table.values():
- if con.is_rodc_topology():
- colours.append('red')
- else:
- colours.append('blue')
- dot_edges.append((con.from_dnstr, dsa.dsa_dnstr))
+ edge_colours = []
+ vertex_colours = []
+
+ for dsa in self.dsa_by_dnstr.values():
+ dot_vertices.append(dsa.dsa_dnstr)
+ if dsa.is_ro():
+ vertex_colours.append('#cc0000')
+ else:
+ vertex_colours.append('#0000cc')
+ for con in dsa.connect_table.values():
+ if con.is_rodc_topology():
+ edge_colours.append('red')
+ else:
+ edge_colours.append('blue')
+ dot_edges.append((con.from_dnstr, dsa.dsa_dnstr))
verify_and_dot(basename, dot_edges, vertices=dot_vertices,
label=self.my_dsa_dnstr, properties=verify_properties,
debug=DEBUG, verify=verify, dot_files=plot,
- directed=True, edge_colors=colours)
+ directed=True, edge_colors=edge_colours,
+ vertex_colors=vertex_colours)
def run(self, dburl, lp, creds, forced_local_dsa=None,
dot_edges = []
dot_vertices = []
colours = []
+ vertex_colours = []
for dsa in dsas:
kcc = KCC()
for site in kcc.site_table.values():
for dsa in site.dsa_table.values():
+ if dsa.is_ro():
+ vertex_colours.append('#cc0000')
+ else:
+ vertex_colours.append('#0000cc')
dot_vertices.append(dsa.dsa_dnstr)
for con in dsa.connect_table.values():
if con.is_rodc_topology():
colours.append('blue')
dot_edges.append((con.from_dnstr, dsa.dsa_dnstr))
+ verify_and_dot('all-dsa-connections', dot_edges, vertices=dot_vertices,
+ label="all dsa NTDSConnections", properties=(),
+ debug=DEBUG, verify=opts.verify, dot_files=opts.dot_files,
+ directed=True, edge_colors=colours, vertex_colors=vertex_colours)
+
for name, rep_parts in (('needed', needed_parts), ('current', current_parts)):
for part, edges in rep_parts.items():
verify_and_dot('repsFrom_%s_all_%s' % (name, part), edges, directed=True, label=part,
properties=(), debug=DEBUG, verify=opts.verify,
dot_files=opts.dot_files)
- verify_and_dot('all-dsa-connections', dot_edges, vertices=dot_vertices,
- label="all dsa NTDSConnections", properties=(),
- debug=DEBUG, verify=opts.verify, dot_files=opts.dot_files,
- directed=True, edge_colors=colours)
logger = logging.getLogger("samba_kcc")