even better graphviz
diff --git a/service.go b/service.go
index 05964fa..ccfd0bc 100644
--- a/service.go
+++ b/service.go
@@ -4,12 +4,14 @@
"context"
"fmt"
"net/http"
+ "sort"
"strings"
"code.hackerspace.pl/q3k/topo/graph"
"github.com/gobuffalo/packr"
"github.com/golang/glog"
"github.com/q3k/statusz"
+ "vbom.ml/util/sortorder"
)
type ServiceConfig struct {
@@ -42,7 +44,7 @@
var dot = this.responseText;
viz.renderSVGElement(dot)
.then(function(element) {
- document.body.appendChild(element);
+ document.getElementById("graph").appendChild(element);
});
}
};
@@ -50,6 +52,7 @@
xmlhttp.send();
</script>
+ <div id="graph" style="text-align: center;"></div>
`
func (s *Service) Run() {
@@ -62,6 +65,8 @@
http.HandleFunc("/debug/graphviz", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "graph G {\n")
+ fmt.Fprintf(w, " ranksep = 2\n")
+ fmt.Fprintf(w, " splines = polyline\n")
fmt.Fprintf(w, " rankdir = LR\n")
for _, machine := range s.gr.Machines {
portNames := []string{}
@@ -74,7 +79,14 @@
}
for _, sw := range s.gr.Switches {
portNames := []string{}
+ portsOrdered := []*graph.SwitchPort{}
for _, port := range sw.Ports {
+ portsOrdered = append(portsOrdered, port)
+ }
+ sort.Slice(portsOrdered, func(i, j int) bool {
+ return sortorder.NaturalLess(portsOrdered[i].Name, portsOrdered[j].Name)
+ })
+ for _, port := range portsOrdered {
name := fmt.Sprintf("<%s> %s", port.Name, port.Name)
portNames = append(portNames, name)
}
@@ -86,7 +98,7 @@
if port.OtherEnd == nil {
continue
}
- fmt.Fprintf(w, " %s:%q -- %s:%q\n", machine.Name, port.Name, port.OtherEnd.Switch.Name, port.OtherEnd.Name)
+ fmt.Fprintf(w, " %s:%q:e -- %s:%q:w\n", machine.Name, port.Name, port.OtherEnd.Switch.Name, port.OtherEnd.Name)
}
}
fmt.Fprintf(w, "}\n")