From 7b8e2f46936ef00fe177a0bd4d05f03a585bf35f Mon Sep 17 00:00:00 2001 From: k1LoW Date: Sat, 5 Sep 2020 14:13:45 +0900 Subject: [PATCH] Fix diagram for layer --- cmd/doc.go | 2 +- output/dot/dot.go | 39 +++++++++++++++++++++++++++++++++++++++ output/gviz/gviz.go | 8 ++++++++ 3 files changed, 48 insertions(+), 1 deletion(-) diff --git a/cmd/doc.go b/cmd/doc.go index f936e025..88823d93 100644 --- a/cmd/doc.go +++ b/cmd/doc.go @@ -109,7 +109,7 @@ var docCmd = &cobra.Command{ if err != nil { printFatalln(cmd, err) } - if err := diag.Output(dFile); err != nil { + if err := diag.OutputLayer(dFile, l); err != nil { printFatalln(cmd, err) } } diff --git a/output/dot/dot.go b/output/dot/dot.go index 57873b70..9fff195c 100644 --- a/output/dot/dot.go +++ b/output/dot/dot.go @@ -1,7 +1,9 @@ package dot import ( + "fmt" "io" + "strings" "text/template" "github.com/gobuffalo/packr/v2" @@ -46,3 +48,40 @@ func (d *Dot) Output(wr io.Writer) error { } return nil } + +func (d *Dot) OutputLayer(wr io.Writer, l *config.Layer) error { + t := "cluster-diag.dot.tmpl" + + ts, err := d.box.FindString(t) + if err != nil { + return err + } + tmpl := template.Must(template.New("diagram").Funcs(output.FuncMap).Parse(ts)) + + clusters, remain, networks, err := d.config.BuildNestedClusters([]string{l.Name}) + if err != nil { + return err + } + nws := []*config.Network{} +L: + for _, nw := range networks { + for _, n := range remain { + if strings.HasPrefix(nw.Head.Id(), fmt.Sprintf("%s:", n.Id())) { + continue L + } + if strings.HasPrefix(nw.Tail.Id(), fmt.Sprintf("%s:", n.Id())) { + continue L + } + } + nws = append(nws, nw) + } + if err := tmpl.Execute(wr, map[string]interface{}{ + "Clusters": clusters, + "RemainNodes": []*config.Node{}, + "GlobalComponents": d.config.GlobalComponents(), + "Networks": nws, + }); err != nil { + return err + } + return nil +} diff --git a/output/gviz/gviz.go b/output/gviz/gviz.go index b7d8a46e..7159b219 100644 --- a/output/gviz/gviz.go +++ b/output/gviz/gviz.go @@ -31,6 +31,14 @@ func (g *Gviz) Output(wr io.Writer) error { return g.render(wr, buf.Bytes()) } +func (g *Gviz) OutputLayer(wr io.Writer, l *config.Layer) error { + buf := &bytes.Buffer{} + if err := g.dot.OutputLayer(buf, l); err != nil { + return err + } + return g.render(wr, buf.Bytes()) +} + func (g *Gviz) render(wr io.Writer, b []byte) (e error) { format := g.config.DiagFormat() gviz := graphviz.New()