Multiple graph types from the same data (GraphViz)

Showing just one part of a hierarchy, or truncating depth. Title image shows one colo, with all its leaf nodes.

I'm going to use the words "element", "item," "leaf node", and possibly "equipment" interchangeably when talking about this stuff. Naming things really is the hardest part of programming.

All these were generated from the same input data, changing one or two variables. Equipment is populated from templates, so to specify that a given element or connection exists in say every row, I only declare it in one place. If one element differs from the rest, I can apply the templates in series to apply the differences.

Templates look like this:

template_MOR = [
    # [index, name, [systems], [connections]]
    (12, "BLU-switch", ['BLU-GRN'], ["parent.BLU-Hub", "MOR monitor"]),
    (15, "GRN-switch", ['BLU-GRN'], ["parent.GRN-Hub", "MOR monitor"]),
    (22, "MOR monitor", ['BLU-GRN'], ["root.Admin1.Ops Room"])

Each middle of row rack (MOR) gets this set of items. For example, in building TFG, colo 1, cell 1, row 1, rack 1 an element "BLU-switch" is placed in rack space 12 and connected to an element "BLU-Hub" in colo1, cell1, row 1 . The "parent" keyword ascends the hierarchy so here "BLU-Hub" is being sought not in the switch's parent (which is its rack), but in it's grandparent row.

These are minimum-viable graphs, what I'm working on specifically is engine that decides how endpoints are represented, specifically the ability to consolidate them into their parents in a configurable way. There are also rack diagrams being generated alongside these, but those are a little less fun to look at.

This one shows just one cell with leaf nodes collapsed into their parent, i.e. rack equipment is shown as the rack it is in.:

This one shows one colo with leaf nodes collapsed:

Finally, this is all colos, with leaf nodes collapsed:

-Published 7 pm Wed, Mar 1 2023-