From 2fdfa26388f4e738d1a4f89a29fbe93dfdbce41a Mon Sep 17 00:00:00 2001 From: jwijenbergh Date: Thu, 14 Apr 2022 15:30:49 +0200 Subject: FSM graph generation: Add generation using mermaid as default Dot from graphviz kept re-ordering (e.g. flipping edges) which is annoying when showing the graph live --- src/fsm.go | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/fsm.go b/src/fsm.go index 2d41a34..fa2a5c4 100644 --- a/src/fsm.go +++ b/src/fsm.go @@ -103,11 +103,12 @@ func (eduvpn *VPNState) GoTransition(newState FSMStateID, data string) bool { return ok } -func (eduvpn *VPNState) GenerateGraph() string { +func (eduvpn *VPNState) generateDotGraph() string { graph := `digraph eduvpn_fsm { nodesep = 2; -rankdir = LR;` - graph += "\nnode[color=blue]; " + eduvpn.FSM.Current.String() + ";\n" +remincross = false; +` + graph += "node[color=blue]; " + eduvpn.FSM.Current.String() + ";\n" graph += "node [color=black];\n" for state, transitions := range eduvpn.FSM.States { for _, transition := range transitions { @@ -118,6 +119,21 @@ rankdir = LR;` return graph } +func (eduvpn *VPNState) generateMermaidGraph() string { + graph := "graph TD\n" + graph += "style " + eduvpn.FSM.Current.String() + " fill:cyan\n" + for state, transitions := range eduvpn.FSM.States { + for _, transition := range transitions { + graph += state.String() + "(" + state.String() + ") " + "-->|" + transition.Description + "| " + transition.To.String() + "\n" + } + } + return graph +} + +func (eduvpn *VPNState) GenerateGraph() string { + return eduvpn.generateMermaidGraph() +} + func (eduvpn *VPNState) InitializeFSM() { eduvpn.FSM = &FSM{ States: FSMStates { -- cgit v1.2.3