summaryrefslogtreecommitdiff
path: root/internal/eventloop.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2024-03-28 11:48:42 +0200
committerPaul Buetow <paul@buetow.org>2024-03-28 11:48:42 +0200
commit0ae1e14580786019703ab188ab76560fc3323fdd (patch)
tree1d23bb2631289a0a825166b2eb7bb0b3097224f6 /internal/eventloop.go
parent97615d05d95cd11238d0a5af88e9ed28f0940e1f (diff)
initial support for logging time diffs between syscalls
Diffstat (limited to 'internal/eventloop.go')
-rw-r--r--internal/eventloop.go23
1 files changed, 15 insertions, 8 deletions
diff --git a/internal/eventloop.go b/internal/eventloop.go
index 9ce0149..9b6cdcb 100644
--- a/internal/eventloop.go
+++ b/internal/eventloop.go
@@ -12,26 +12,30 @@ import (
func eventLoop(bpfModule *bpf.Module, rawCh <-chan []byte) {
for ev := range events(rawCh) {
- fmt.Println(ev)
- ev.recycle()
+ fmt.Println(ev.String())
+ if ev.prevPair != nil {
+ // Only recycle the previous event, as the current event is the previous
+ // event of the next event!
+ ev.prevPair.recycle()
+ }
}
fmt.Println("Good bye")
}
-func events(rawCh <-chan []byte) <-chan enterExitEvent {
+func events(rawCh <-chan []byte) <-chan *eventPair {
// Channel of events (enter+exit tracepoint results of a syscall).
- evCh := make(chan enterExitEvent)
+ evCh := make(chan *eventPair)
// Temp. store of sys_enter tracepoints per Tid.
- enterEvs := make(map[uint32]enterExitEvent)
+ enterEvs := make(map[uint32]*eventPair)
// Track all open files by file descriptor.
files := make(map[int32]file)
// Program or thread name of the current Tid.
comms := make(map[uint32]string)
+ // Previous event (to calculate time differences between two events)
+ prevPairs := make(map[uint32]*eventPair)
enter := func(enterEv event) {
- enterEvs[enterEv.GetTid()] = enterExitEvent{
- enterEv: enterEv,
- }
+ enterEvs[enterEv.GetTid()] = newEventPair(enterEv)
}
exit := func(exitEv event) {
@@ -96,6 +100,9 @@ func events(rawCh <-chan []byte) <-chan enterExitEvent {
panic(fmt.Sprintf("unknown type: %v", v))
}
+ ev.prevPair, _ = prevPairs[ev.enterEv.GetTid()]
+ ev.calculateDurations()
+ prevPairs[ev.enterEv.GetTid()] = ev
evCh <- ev
}