Skip to content

Commit

Permalink
Support for concurrent visualization
Browse files Browse the repository at this point in the history
  • Loading branch information
DimitarPetrov committed Sep 6, 2020
1 parent b5bb922 commit 8446a6b
Show file tree
Hide file tree
Showing 8 changed files with 268 additions and 140 deletions.
2 changes: 1 addition & 1 deletion cmd/apply.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,6 @@ func (ac *ApplyCmd) Run() error {
if err != nil {
return err
}
return ac.importsGroomer.RemoveUnusedImportFromDirectory(path, map[string]string{"fmt":"", "runtime":"rt", "rand":""}) // TODO: flag for import aliases
return ac.importsGroomer.RemoveUnusedImportFromDirectory(path, map[string]string{"fmt": "", "runtime": "rt", "rand": ""}) // TODO: flag for import aliases
})
}
2 changes: 1 addition & 1 deletion cmd/revert.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,6 @@ func (rc *RevertCmd) Run() error {
if err != nil {
return err
}
return rc.importsGroomer.RemoveUnusedImportFromDirectory(path, map[string]string{"fmt":"", "runtime":"rt", "crypto/rand":""}) // TODO: flag for import aliases
return rc.importsGroomer.RemoveUnusedImportFromDirectory(path, map[string]string{"fmt": "", "runtime": "rt", "crypto/rand": ""}) // TODO: flag for import aliases
})
}
60 changes: 44 additions & 16 deletions parser/parser.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,24 +19,46 @@ const (
)

type FuncEvent interface {
FuncName() string
GetCaller() string
GetCallee() string
GetCallID() string
}

type InvocationEvent struct {
Name string
Args string
Caller string
Callee string
CallID string
Args string
}

func (ie *InvocationEvent) FuncName() string {
return ie.Name
func (ie *InvocationEvent) GetCaller() string {
return ie.Caller
}

func (ie *InvocationEvent) GetCallee() string {
return ie.Callee
}

func (ie *InvocationEvent) GetCallID() string {
return ie.CallID
}

type ReturningEvent struct {
Name string
Caller string
Callee string
CallID string
}

func (re *ReturningEvent) GetCaller() string {
return re.Caller
}

func (re *ReturningEvent) GetCallee() string {
return re.Callee
}

func (ie *ReturningEvent) FuncName() string {
return ie.Name
func (re *ReturningEvent) GetCallID() string {
return re.CallID
}

type parser struct {
Expand All @@ -50,19 +72,25 @@ func (p *parser) Parse(in io.Reader) ([]FuncEvent, error) {
var events []FuncEvent
scanner := bufio.NewScanner(in)
for scanner.Scan() {
row := scanner.Text()
if strings.HasPrefix(row, "Entering function") {
words := strings.Split(row, " ")
halfs := strings.Split(scanner.Text(), ";")
callID := strings.Split(halfs[1], "=")[1]
msg := halfs[0]
if strings.HasPrefix(msg, "Function") {
words := strings.Split(msg, " ")
events = append(events, &InvocationEvent{
Name: words[2],
Args: strings.Join(words[3:], " "),
Callee: words[1],
Caller: words[4],
Args: strings.Join(words[5:], " "),
CallID: callID,
})
}

if strings.HasPrefix(row, "Exiting function") {
split := strings.Split(row, " ")
if strings.HasPrefix(msg, "Exiting function") {
words := strings.Split(msg, " ")
events = append(events, &ReturningEvent{
Name: split[2],
Callee: words[2],
Caller: words[5],
CallID: callID,
})
}
}
Expand Down
60 changes: 42 additions & 18 deletions parser/parser_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,34 +7,58 @@ import (
)

func TestParser_Parse(t *testing.T) {
input := `Entering function main
Entering function foo with args (1) (true)
Entering function bar with args (test string)
Entering function baz
Exiting function baz
Exiting function bar
Exiting function foo
Exiting function main`
input := `Function main.main called by runtime.main; callID=1d8ca74e-c860-8a75-fc36-fe6d34350f0c
Function main.foo called by main.main with args (5) (false); callID=973355a9-2ec6-095c-9137-7a1081ac0a5f
Function main.bar called by main.foo with args (test string); callID=6c294dfd-4c6a-39b1-474e-314bee73f514
Function main.baz called by main.bar; callID=a019a297-0a6e-a792-0e3f-23c33a44622f
Exiting function main.baz called by main.bar; callID=a019a297-0a6e-a792-0e3f-23c33a44622f
Exiting function main.bar called by main.foo; callID=6c294dfd-4c6a-39b1-474e-314bee73f514
Exiting function main.foo called by main.main; callID=973355a9-2ec6-095c-9137-7a1081ac0a5f
Exiting function main.main called by runtime.main; callID=1d8ca74e-c860-8a75-fc36-fe6d34350f0c`

expected := []FuncEvent{
&InvocationEvent{
Name: "main",
Caller: "runtime.main",
Callee: "main.main",
CallID: "1d8ca74e-c860-8a75-fc36-fe6d34350f0c",
},
&InvocationEvent{
Name: "foo",
Args: "with args (1) (true)",
Caller: "main.main",
Callee: "main.foo",
CallID: "973355a9-2ec6-095c-9137-7a1081ac0a5f",
Args: "with args (5) (false)",
},
&InvocationEvent{
Name: "bar",
Args: "with args (test string)",
Caller: "main.foo",
Callee: "main.bar",
CallID: "6c294dfd-4c6a-39b1-474e-314bee73f514",
Args: "with args (test string)",
},
&InvocationEvent{
Name: "baz",
Caller: "main.bar",
Callee: "main.baz",
CallID: "a019a297-0a6e-a792-0e3f-23c33a44622f",
},
&ReturningEvent{
Caller: "main.bar",
Callee: "main.baz",
CallID: "a019a297-0a6e-a792-0e3f-23c33a44622f",
},
&ReturningEvent{
Caller: "main.foo",
Callee: "main.bar",
CallID: "6c294dfd-4c6a-39b1-474e-314bee73f514",
},
&ReturningEvent{
Caller: "main.main",
Callee: "main.foo",
CallID: "973355a9-2ec6-095c-9137-7a1081ac0a5f",
},
&ReturningEvent{
Caller: "runtime.main",
Callee: "main.main",
CallID: "1d8ca74e-c860-8a75-fc36-fe6d34350f0c",
},
&ReturningEvent{Name: "baz"},
&ReturningEvent{Name: "bar"},
&ReturningEvent{Name: "foo"},
&ReturningEvent{Name: "main"},
}

actual, err := NewParser().Parse(bytes.NewBufferString(input))
Expand Down
4 changes: 2 additions & 2 deletions tracing/deinstrument_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ func TestDeinstrumentFile(t *testing.T) {
}

var buff2 bytes.Buffer
if err := NewImportsGroomer().RemoveUnusedImportFromFile(fset, file, &buff2, map[string]string{"fmt":"", "runtime":"rt", "crypto/rand":""}); err != nil {
if err := NewImportsGroomer().RemoveUnusedImportFromFile(fset, file, &buff2, map[string]string{"fmt": "", "runtime": "rt", "crypto/rand": ""}); err != nil {
t.Fatal(err)
}

Expand Down Expand Up @@ -87,7 +87,7 @@ func TestDeinstrumentDirectory(t *testing.T) {
t.Fatal(err)
}

if err := NewImportsGroomer().RemoveUnusedImportFromDirectory("test", map[string]string{"fmt":"", "runtime":"rt", "crypto/rand":""}); err != nil {
if err := NewImportsGroomer().RemoveUnusedImportFromDirectory("test", map[string]string{"fmt": "", "runtime": "rt", "crypto/rand": ""}); err != nil {
t.Fatal(err)
}

Expand Down
4 changes: 2 additions & 2 deletions tracing/unused_imports_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ func TestRemoveUnusedImportsFromFile(t *testing.T) {
t.Fatal(err)
}
var buff bytes.Buffer
if err := NewImportsGroomer().RemoveUnusedImportFromFile(fset, file, &buff, map[string]string{"fmt":"", "runtime":"rt", "crypto/rand":""}); err != nil {
if err := NewImportsGroomer().RemoveUnusedImportFromFile(fset, file, &buff, map[string]string{"fmt": "", "runtime": "rt", "crypto/rand": ""}); err != nil {
t.Fatal(err)
}

Expand Down Expand Up @@ -63,7 +63,7 @@ func TestRemoveUnusedImportsFromDirectory(t *testing.T) {
i++
}

if err := NewImportsGroomer().RemoveUnusedImportFromDirectory("test", map[string]string{"fmt":"", "runtime":"rt", "crypto/rand":""}); err != nil {
if err := NewImportsGroomer().RemoveUnusedImportFromDirectory("test", map[string]string{"fmt": "", "runtime": "rt", "crypto/rand": ""}); err != nil {
t.Fatal(err)
}

Expand Down
Loading

0 comments on commit 8446a6b

Please sign in to comment.