justone / dockviz

Visualizing Docker data
Apache License 2.0
1.21k stars 106 forks source link

Feature request: Stacked blocks or force-directed graph viz #47

Open nl-brett-stime opened 3 years ago

nl-brett-stime commented 3 years ago

Thanks for dockviz!

I understand graphviz is doing most of the heavy lifting when it comes to visualization with this approach. Unfortunately, I don't think treemaps are the right approach for this use case. Usually, a treemap would be used for a bottom-up approach where we start with a given branch and want to know it's cumulative weight, including that of all the leaves 'owned' by the branch. E.g., all of the files nested under a given directory in a file system.

However, in the case of docker images, our interest is reversed. We'd prefer a top-down approach where we're interested in a particular peak in a mountain range and we want to determine the weight of all the supporting strata, including those which might also be undergirding other peaks. In the top-down analysis, a supporting stratum isn't necessarily 'owned' solely by a single peak.

In short, treemaps = sum(for all descendants of branch) analysis ...but for docker images we want: sum(for all ancestors of leaf) analysis

To that end, I think a better visualization would look more like a flamegraph or sunburst chart where we'd have more abstract/general/foundational building blocks across the bottom and more concrete/specific/dependent building blocks stacked up on top of their respective underlying dependencies. The area of any given block would be proportional to it's size in bytes.

Flame graphs: http://www.brendangregg.com/flamegraphs.html Sunburst chart: https://architect-api.readthedocs.io/en/latest/text/document-vis-hierarchy.html#sunburst-chart

The main difference when compared to a regular flame graph is that the more dependent layers aren't necessarily constrained to be smaller than their dependencies. Some graphs might be top-heavy e.g., https://i.pinimg.com/736x/d3/79/61/d3796140d9104796457d8d26986c9f56.jpg

nl-brett-stime commented 3 years ago

Maybe a force-directed graph would be a relatively straightforward integration: https://www.amcharts.com/demos/force-directed-network/