diff options
| author | Paul Buetow <paul@buetow.org> | 2025-03-12 22:58:13 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2025-03-12 22:58:13 +0200 |
| commit | 0cbf594b5646ec7b020894d918c522be825aacc4 (patch) | |
| tree | acebbd79c31a1c1a0efb1400e664c55f52fd4211 /internal/tree | |
| parent | ac7ebea0920819a14e981da7e3297a8e2e256559 (diff) | |
refactor
Diffstat (limited to 'internal/tree')
| -rw-r--r-- | internal/tree/tree.go | 97 |
1 files changed, 0 insertions, 97 deletions
diff --git a/internal/tree/tree.go b/internal/tree/tree.go deleted file mode 100644 index 9b7ac16..0000000 --- a/internal/tree/tree.go +++ /dev/null @@ -1,97 +0,0 @@ -package tree - -import ( - "context" - "fmt" - "ior/internal/event" - "ior/internal/generated/types" - "os" - "path" - "strings" -) - -type counter struct { - count uint64 - duration uint64 -} - -// It's a "flat tree" stored in a map, one key per directory -type Tree struct { - // Collapsed flamegraph stats collector - collapsed map[string]map[types.TraceId]counter - inCh chan *event.Pair - Done chan struct{} -} - -func New() Tree { - return Tree{ - collapsed: make(map[string]map[types.TraceId]counter), - inCh: make(chan *event.Pair, 4096), - Done: make(chan struct{}), - } -} - -func (t Tree) Start(ctx context.Context) { - go func() { - for { - select { - case ev := <-t.inCh: - pathname := path.Dir(ev.File.Name()) - pathMap, ok := t.collapsed[pathname] - if !ok { - pathMap = make(map[types.TraceId]counter) - } - - traceId := ev.EnterEv.GetTraceId() - cnt := pathMap[traceId] - cnt.count++ - cnt.duration += ev.Duration - pathMap[traceId] = cnt - - t.collapsed[pathname] = pathMap - ev.RecyclePrev() - default: - select { - case <-ctx.Done(): - fmt.Println("Tree processed last event") - t.mustDump("ior.collapsed") - close(t.Done) - return - default: - } - } - } - }() -} - -func (t Tree) Add(ev *event.Pair) { - t.inCh <- ev -} - -func (t Tree) mustDump(outfile string) { - fmt.Println("Writing", outfile) - file, err := os.Create(outfile) - if err != nil { - panic(err) - } - defer file.Close() - - for path, value := range t.collapsed { - var sb strings.Builder - - for i, part := range strings.Split(path, "/") { - if i > 1 { - sb.WriteString(";") - sb.WriteString("/") - } - sb.WriteString(part) - } - - for traceId, cnt := range value { - _, err := fmt.Fprintf(file, "%s;[%s] %v\n", sb.String(), traceId, cnt.count) - if err != nil { - panic(err) - } - } - } -} |
