forked from hswaw/hscloud
even better graphviz
This commit is contained in:
parent
de869df9ac
commit
69518ab6a2
2 changed files with 23 additions and 2 deletions
9
Gopkg.lock
generated
9
Gopkg.lock
generated
|
@ -346,6 +346,14 @@
|
||||||
revision = "5420a8b6744d3b0345ab293f6fcba19c978f1183"
|
revision = "5420a8b6744d3b0345ab293f6fcba19c978f1183"
|
||||||
version = "v2.2.1"
|
version = "v2.2.1"
|
||||||
|
|
||||||
|
[[projects]]
|
||||||
|
branch = "master"
|
||||||
|
digest = "1:9132eacc44d9bd1e03145ea2e9d4888800da7773d6edebb401f8cd34c9fb8380"
|
||||||
|
name = "vbom.ml/util"
|
||||||
|
packages = ["sortorder"]
|
||||||
|
pruneopts = "UT"
|
||||||
|
revision = "efcd4e0f97874370259c7d93e12aad57911dea81"
|
||||||
|
|
||||||
[solve-meta]
|
[solve-meta]
|
||||||
analyzer-name = "dep"
|
analyzer-name = "dep"
|
||||||
analyzer-version = 1
|
analyzer-version = 1
|
||||||
|
@ -360,6 +368,7 @@
|
||||||
"github.com/q3k/statusz",
|
"github.com/q3k/statusz",
|
||||||
"golang.org/x/net/context",
|
"golang.org/x/net/context",
|
||||||
"google.golang.org/grpc",
|
"google.golang.org/grpc",
|
||||||
|
"vbom.ml/util/sortorder",
|
||||||
]
|
]
|
||||||
solver-name = "gps-cdcl"
|
solver-name = "gps-cdcl"
|
||||||
solver-version = 1
|
solver-version = 1
|
||||||
|
|
16
service.go
16
service.go
|
@ -4,12 +4,14 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"code.hackerspace.pl/q3k/topo/graph"
|
"code.hackerspace.pl/q3k/topo/graph"
|
||||||
"github.com/gobuffalo/packr"
|
"github.com/gobuffalo/packr"
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
"github.com/q3k/statusz"
|
"github.com/q3k/statusz"
|
||||||
|
"vbom.ml/util/sortorder"
|
||||||
)
|
)
|
||||||
|
|
||||||
type ServiceConfig struct {
|
type ServiceConfig struct {
|
||||||
|
@ -42,7 +44,7 @@ const topologyFragment = `
|
||||||
var dot = this.responseText;
|
var dot = this.responseText;
|
||||||
viz.renderSVGElement(dot)
|
viz.renderSVGElement(dot)
|
||||||
.then(function(element) {
|
.then(function(element) {
|
||||||
document.body.appendChild(element);
|
document.getElementById("graph").appendChild(element);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -50,6 +52,7 @@ const topologyFragment = `
|
||||||
xmlhttp.send();
|
xmlhttp.send();
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
<div id="graph" style="text-align: center;"></div>
|
||||||
`
|
`
|
||||||
|
|
||||||
func (s *Service) Run() {
|
func (s *Service) Run() {
|
||||||
|
@ -62,6 +65,8 @@ func (s *Service) Run() {
|
||||||
|
|
||||||
http.HandleFunc("/debug/graphviz", func(w http.ResponseWriter, r *http.Request) {
|
http.HandleFunc("/debug/graphviz", func(w http.ResponseWriter, r *http.Request) {
|
||||||
fmt.Fprintf(w, "graph G {\n")
|
fmt.Fprintf(w, "graph G {\n")
|
||||||
|
fmt.Fprintf(w, " ranksep = 2\n")
|
||||||
|
fmt.Fprintf(w, " splines = polyline\n")
|
||||||
fmt.Fprintf(w, " rankdir = LR\n")
|
fmt.Fprintf(w, " rankdir = LR\n")
|
||||||
for _, machine := range s.gr.Machines {
|
for _, machine := range s.gr.Machines {
|
||||||
portNames := []string{}
|
portNames := []string{}
|
||||||
|
@ -74,7 +79,14 @@ func (s *Service) Run() {
|
||||||
}
|
}
|
||||||
for _, sw := range s.gr.Switches {
|
for _, sw := range s.gr.Switches {
|
||||||
portNames := []string{}
|
portNames := []string{}
|
||||||
|
portsOrdered := []*graph.SwitchPort{}
|
||||||
for _, port := range sw.Ports {
|
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)
|
name := fmt.Sprintf("<%s> %s", port.Name, port.Name)
|
||||||
portNames = append(portNames, name)
|
portNames = append(portNames, name)
|
||||||
}
|
}
|
||||||
|
@ -86,7 +98,7 @@ func (s *Service) Run() {
|
||||||
if port.OtherEnd == nil {
|
if port.OtherEnd == nil {
|
||||||
continue
|
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")
|
fmt.Fprintf(w, "}\n")
|
||||||
|
|
Loading…
Reference in a new issue