even better graphviz

master
Serge Bazanski 2018-10-06 17:48:23 +01:00
parent de869df9ac
commit 69518ab6a2
2 changed files with 23 additions and 2 deletions

9
Gopkg.lock generated
View File

@ -346,6 +346,14 @@
revision = "5420a8b6744d3b0345ab293f6fcba19c978f1183"
version = "v2.2.1"
[[projects]]
branch = "master"
digest = "1:9132eacc44d9bd1e03145ea2e9d4888800da7773d6edebb401f8cd34c9fb8380"
name = "vbom.ml/util"
packages = ["sortorder"]
pruneopts = "UT"
revision = "efcd4e0f97874370259c7d93e12aad57911dea81"
[solve-meta]
analyzer-name = "dep"
analyzer-version = 1
@ -360,6 +368,7 @@
"github.com/q3k/statusz",
"golang.org/x/net/context",
"google.golang.org/grpc",
"vbom.ml/util/sortorder",
]
solver-name = "gps-cdcl"
solver-version = 1

View File

@ -4,12 +4,14 @@ import (
"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 @@ const topologyFragment = `
var dot = this.responseText;
viz.renderSVGElement(dot)
.then(function(element) {
document.body.appendChild(element);
document.getElementById("graph").appendChild(element);
});
}
};
@ -50,6 +52,7 @@ const topologyFragment = `
xmlhttp.send();
</script>
<div id="graph" style="text-align: center;"></div>
`
func (s *Service) Run() {
@ -62,6 +65,8 @@ func (s *Service) Run() {
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 @@ func (s *Service) Run() {
}
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 @@ func (s *Service) Run() {
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")