package main import ( "flag" "io/ioutil" "log" "os" "os/exec" "strings" floatschema "git.autistici.org/ai3/tools/float-dashboard/schema/float" "git.autistici.org/ai3/tools/float-dashboard/schema/graph" "gopkg.in/yaml.v3" ) var service = flag.String("service", "", "filter this service only") func main() { log.SetFlags(0) flag.Parse() data, err := ioutil.ReadFile(flag.Arg(0)) if err != nil { log.Fatal(err) } var svcmap map[string]*floatschema.Service if err := yaml.Unmarshal(data, &svcmap); err != nil { log.Fatal(err) } var dot string g := graph.ServiceGraph(svcmap) if *service != "" { g = g.Filter(graph.FilterEdgeByService(*service)) dot = g.Render( graph.StyleNodeByService(*service), graph.StyleEdgeByService(*service), ) } else { dot = g.Render(nil, nil) } // Run graphviz to render to SVG. cmd := exec.Command("dot", "-Tsvg") cmd.Stdin = strings.NewReader(dot) cmd.Stderr = os.Stderr cmd.Stdout = os.Stdout if err := cmd.Run(); err != nil { log.Fatal(err) } }