- Notifications
You must be signed in to change notification settings - Fork221
Create beautiful system diagrams with Go
License
NotificationsYou must be signed in to change notification settings
blushft/go-diagrams
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Go-Diagrams is a loose port ofdiagrams.
Turn this:
d,err:=diagram.New(diagram.Filename("app"),diagram.Label("App"),diagram.Direction("LR"))iferr!=nil {log.Fatal(err)}dns:=gcp.Network.Dns(diagram.NodeLabel("DNS"))lb:=gcp.Network.LoadBalancing(diagram.NodeLabel("NLB"))cache:=gcp.Database.Memorystore(diagram.NodeLabel("Cache"))db:=gcp.Database.Sql(diagram.NodeLabel("Database"))dc:=diagram.NewGroup("GCP")dc.NewGroup("services").Label("Service Layer").Add(gcp.Compute.ComputeEngine(diagram.NodeLabel("Server 1")),gcp.Compute.ComputeEngine(diagram.NodeLabel("Server 2")),gcp.Compute.ComputeEngine(diagram.NodeLabel("Server 3")), ).ConnectAllFrom(lb.ID(),diagram.Forward()).ConnectAllTo(cache.ID(),diagram.Forward())dc.NewGroup("data").Label("Data Layer").Add(cache,db).Connect(cache,db)d.Connect(dns,lb,diagram.Forward()).Group(dc)iferr:=d.Render();err!=nil {log.Fatal(err)}
Into this:
go get github.com/blushft/go-diagrams
Create a diagram:
d,err:=diagram.New(diagram.Label("my-diagram"),diagram.Filename("diagram"))iferr!=nil {log.Fatal(err)}fw:=generic.Network.Firewall().Label("fw")sw:=generic.Network.Switch().Label("sw")d.Connect(fw,sw)
Render the output:
iferr:=d.Render();err!=nil {log.Fatal(err)}
Go-Diagrams will create a folder in the current working directory with the graphviz DOT file and any image assets.
Create an ouput image with any graphviz compatible renderer:
dot -Tpng diagram.dot> diagram.png