diff options
| author | Paul Buetow <paul@buetow.org> | 2025-04-16 16:13:47 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2025-04-16 16:13:47 +0300 |
| commit | 2c5499a26593d8e4fb80c4c8415d2bd1181b5eb1 (patch) | |
| tree | 6ed8ac818fa438c566b69b003657fd7cdf7437ca /internal | |
| parent | 8373683c8fb16b7d26a9b4056eab4461f12c3e66 (diff) | |
refactor
Diffstat (limited to 'internal')
| -rw-r--r-- | internal/event/event.go | 88 | ||||
| -rw-r--r-- | internal/event/pair.go | 93 |
2 files changed, 93 insertions, 88 deletions
diff --git a/internal/event/event.go b/internal/event/event.go index 24cf173..aa0e317 100644 --- a/internal/event/event.go +++ b/internal/event/event.go @@ -1,11 +1,7 @@ package event import ( - "fmt" - "ior/internal/file" . "ior/internal/types" - "strconv" - "strings" "sync" ) @@ -21,87 +17,3 @@ type Event interface { GetTime() uint64 Recycle() } - -// Represents a pair of enter and exit events (e.g. entering the syscall + exiting it) -type Pair struct { - EnterEv, ExitEv Event - File file.File - Comm string - Duration uint64 - DurationToPrev uint64 -} - -func NewPair(enterEv Event) *Pair { - e := poolOfEventPairs.Get().(*Pair) - e.EnterEv = enterEv - return e -} - -func (e *Pair) CalculateDurations(prevPairTime uint64) { - e.Duration = e.ExitEv.GetTime() - e.EnterEv.GetTime() - if prevPairTime > 0 { - e.DurationToPrev = e.EnterEv.GetTime() - prevPairTime - } -} - -func (e *Pair) Is(id TraceId) bool { - return e.EnterEv.GetTraceId() == id -} - -const EventStreamHeader = "durationToPrevNs,durationNs,comm,pid.tid,name,ret,notice,file" - -func (e *Pair) String() string { - var sb strings.Builder - - sb.WriteString(fmt.Sprintf("%08d,%08d", e.DurationToPrev, e.Duration)) - - sb.WriteString(",") - sb.WriteString(e.Comm) - - sb.WriteString("@") - sb.WriteString(strconv.FormatInt(int64(e.EnterEv.GetPid()), 10)) - sb.WriteString(".") - sb.WriteString(strconv.FormatInt(int64(e.EnterEv.GetTid()), 10)) - - sb.WriteString(",") - sb.WriteString(e.EnterEv.GetTraceId().Name()) - - sb.WriteString("=>") - if retEv, ok := e.ExitEv.(*RetEvent); ok { - sb.WriteString(strconv.FormatInt(int64(retEv.Ret), 10)) - } - - sb.WriteString(",") - if e.File == nil { - sb.WriteString("N:file") - } else { - sb.WriteString(e.File.String()) - } - - return sb.String() -} - -func (e *Pair) Flags() file.Flags { - if e.File == nil { - return file.Flags(0) - } - return e.File.Flags() -} - -func (e *Pair) FileName() string { - if e.File == nil { - return "N:file" - } - return e.File.Name() -} - -func (e *Pair) Dump() string { - return fmt.Sprintf("%v with enterEv(%v) and exitEv(%v)", e, e.EnterEv, e.ExitEv) -} - -func (e *Pair) Recycle() { - e.EnterEv.Recycle() - e.ExitEv.Recycle() - e.DurationToPrev = 0 - poolOfEventPairs.Put(e) -} diff --git a/internal/event/pair.go b/internal/event/pair.go new file mode 100644 index 0000000..13ad7e0 --- /dev/null +++ b/internal/event/pair.go @@ -0,0 +1,93 @@ +package event + +import ( + "fmt" + "ior/internal/file" + "ior/internal/types" + "strconv" + "strings" +) + +// Represents a pair of enter and exit events (e.g. entering the syscall + exiting it) +type Pair struct { + EnterEv, ExitEv Event + File file.File + Comm string + Duration uint64 + DurationToPrev uint64 +} + +func NewPair(enterEv Event) *Pair { + e := poolOfEventPairs.Get().(*Pair) + e.EnterEv = enterEv + return e +} + +func (e *Pair) CalculateDurations(prevPairTime uint64) { + e.Duration = e.ExitEv.GetTime() - e.EnterEv.GetTime() + if prevPairTime > 0 { + e.DurationToPrev = e.EnterEv.GetTime() - prevPairTime + } +} + +func (e *Pair) Is(id types.TraceId) bool { + return e.EnterEv.GetTraceId() == id +} + +const EventStreamHeader = "durationToPrevNs,durationNs,comm,pid.tid,name,ret,notice,file" + +func (e *Pair) String() string { + var sb strings.Builder + + sb.WriteString(fmt.Sprintf("%08d,%08d", e.DurationToPrev, e.Duration)) + + sb.WriteString(",") + sb.WriteString(e.Comm) + + sb.WriteString("@") + sb.WriteString(strconv.FormatInt(int64(e.EnterEv.GetPid()), 10)) + sb.WriteString(".") + sb.WriteString(strconv.FormatInt(int64(e.EnterEv.GetTid()), 10)) + + sb.WriteString(",") + sb.WriteString(e.EnterEv.GetTraceId().Name()) + + sb.WriteString("=>") + if retEv, ok := e.ExitEv.(*types.RetEvent); ok { + sb.WriteString(strconv.FormatInt(int64(retEv.Ret), 10)) + } + + sb.WriteString(",") + if e.File == nil { + sb.WriteString("N:file") + } else { + sb.WriteString(e.File.String()) + } + + return sb.String() +} + +func (e *Pair) Flags() file.Flags { + if e.File == nil { + return file.Flags(0) + } + return e.File.Flags() +} + +func (e *Pair) FileName() string { + if e.File == nil { + return "N:file" + } + return e.File.Name() +} + +func (e *Pair) Dump() string { + return fmt.Sprintf("%v with enterEv(%v) and exitEv(%v)", e, e.EnterEv, e.ExitEv) +} + +func (e *Pair) Recycle() { + e.EnterEv.Recycle() + e.ExitEv.Recycle() + e.DurationToPrev = 0 + poolOfEventPairs.Put(e) +} |
