#!/bin/sh

echo 'digraph g {'
echo ' rankdir="LR";'

sysctl dev | awk -vd=0 -F'[:.]' '
BEGIN { color[0]="black"; color[1]="red"; color[2]="blue"; color[3]="yellow";
        color[4]="magenta"; color[5]="brown"; color[6]="aqua" }
{
  if ($2 !~ /^(acpi_perf|acpi_sysresource|coretemp|cpufreq|est|pci_link)$/) {
    dev = $2 $3

    if ($4 == "%parent")        { par[dev]  = substr($5, 2, length($5)) }
    else if ($4 == "%desc")     { desc[dev] = substr($5, 2, length($5)) }
    else if ($4 == "%location") {
      split($0, a, ":");
      i = index(a[2], "_PXM=");
      if (i != 0) {
        prox[dev] = substr(a[2], i+5, length(a[2]))
        clist[prox[dev]] = "_PXM " prox[dev]
      }
    }
  }
}
END {
  if(clist[0] == "") { clist[0] = "No _PXM"; prox["nexus0"] = 0 }
  for (dummy in par) {
      found = 0
      for (dev in par) {
        if(prox[dev] == "" && prox[par[dev]] != "") {
          prox[dev]=prox[par[dev]]
          found=1
        }
      }
      if (found == 0) { break }
  }
  for (clust in clist) {
    printf " subgraph cluster%u {\n", clust
    printf "  edge [color=\"" color[clust] "\"];\n"
    printf "  node [color=\"" color[clust] "\"];\n"
    printf "  label = \"%s\";\n", clist[clust]
    for (dev in par) {
      if(prox[dev] == "") prox[dev] = 0;
      if(prox[dev] == clust) {
        attr = ""
        label = ""
        if(d == 1 && desc[dev] != "") { label = dev "\\n" desc[dev] }
        if(label != "") { attr = " label=\"" label "\"" }
        if(dev ~ /^[ci]x/) { attr = attr " style=\"filled\" shape=\"box\" fillcolor=\"Gold\"" }
        if(dev ~ /^cpu/)   { attr = attr " style=\"filled\" shape=\"box\" fillcolor=\"Gold\"" }
        if(attr != "") { attr = " [" attr " ]" }
        printf "  %s -> %s;\n", par[dev], dev
        printf "  %s%s;\n", dev, attr;
      }
    }
    printf " }\n"
  }
}'
echo '}'