func()

in recipes/beyla-service-graph/graphgen/internal/graph.go [49:89]


func (g Graph) Render(writer io.Writer) error {
	gv := graphviz.New()
	graph, err := gv.Graph()
	if err != nil {
		return err
	}
	defer func() {
		if err := graph.Close(); err != nil {
			slog.Error("error closing graph", "err", err)
		}
		gv.Close()
	}()

	nodes := map[*Node]*cgraph.Node{}

	// add nodes and edges
	for clientIp, servers := range g.adjacencies {
		clientNode, err := getCNode(g.nodes[clientIp], graph, nodes)
		if err != nil {
			return err
		}
		for _, serverIp := range servers {
			serverNode, err := getCNode(g.nodes[serverIp], graph, nodes)
			if err != nil {
				return err
			}

			_, err = graph.CreateEdge("", clientNode, serverNode)
			// TODO: set weight in label
			// e.SetLabel("e")
			if err != nil {
				return err
			}
		}
	}

	if err := gv.Render(graph, graphviz.SVG, writer); err != nil {
		return err
	}
	return nil
}