diff options
| author | Paul Buetow <paul@buetow.org> | 2024-02-29 20:50:05 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2024-02-29 20:50:05 +0200 |
| commit | bbbd2c5e367b9da5c7bc2661ecce2cad27189d9f (patch) | |
| tree | 952d29aa0be2a30cc3017754a9133498046b7f50 | |
| parent | f4549a9f22cf14713b2d74cf4d95a17565a5bf67 (diff) | |
refactor
| -rw-r--r-- | internal/eventloop.go | 49 |
1 files changed, 27 insertions, 22 deletions
diff --git a/internal/eventloop.go b/internal/eventloop.go index 120a327..765345d 100644 --- a/internal/eventloop.go +++ b/internal/eventloop.go @@ -19,9 +19,9 @@ func (o openFile) String() string { return fmt.Sprintf("(%d) %s", o.fd, o.path) } -func eventLoop(bpfModule *bpf.Module, ch <-chan []byte) { - enterEvs := make(map[uint32]enterExitEvent) +func events(rawCh <-chan []byte) <-chan enterExitEvent { evCh := make(chan enterExitEvent) + enterEvs := make(map[uint32]enterExitEvent) enter := func(enterEv event) { enterEvs[enterEv.GetTid()] = enterExitEvent{ @@ -41,29 +41,34 @@ func eventLoop(bpfModule *bpf.Module, ch <-chan []byte) { } go func() { - for ev := range evCh { - fmt.Println(ev.dump()) - ev.recycle() + defer close(evCh) + for raw := range rawCh { + switch EventType(raw[0]) { + case ENTER_OPEN_EVENT: + enter(NewOpenEnterEvent(raw)) + case EXIT_OPEN_EVENT: + exit(NewFdEvent(raw)) + case ENTER_FD_EVENT: + enter(NewFdEvent(raw)) + case EXIT_FD_EVENT: + exit(NewFdEvent(raw)) + case EXIT_NULL_EVENT: + exit(NewNullEvent(raw)) + case EXIT_RET_EVENT: + exit(NewRetEvent(raw)) + default: + panic(fmt.Sprintf("Unhandled event type %s", EventType(raw[0]))) + } } }() - for raw := range ch { - switch EventType(raw[0]) { - case ENTER_OPEN_EVENT: - enter(NewOpenEnterEvent(raw)) - case EXIT_OPEN_EVENT: - exit(NewFdEvent(raw)) - case ENTER_FD_EVENT: - enter(NewFdEvent(raw)) - case EXIT_FD_EVENT: - exit(NewFdEvent(raw)) - case EXIT_NULL_EVENT: - exit(NewNullEvent(raw)) - case EXIT_RET_EVENT: - exit(NewRetEvent(raw)) - default: - panic(fmt.Sprintf("Unhandled event type %s", EventType(raw[0]))) - } + return evCh +} + +func eventLoop(bpfModule *bpf.Module, rawCh <-chan []byte) { + for ev := range events(rawCh) { + fmt.Println(ev.dump()) + ev.recycle() } fmt.Println("Good bye") |
