mirror of
https://github.com/jimeh/rbheap.git
synced 2026-02-19 12:56:46 +00:00
Initial starting point for a inspect command
This commit is contained in:
74
inspect/dump.go
Normal file
74
inspect/dump.go
Normal file
@@ -0,0 +1,74 @@
|
||||
package inspect
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"io"
|
||||
"os"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
func NewDump(filePath string) *Dump {
|
||||
return &Dump{FilePath: filePath}
|
||||
}
|
||||
|
||||
// Dump contains all relevant data for a single heap dump.
|
||||
type Dump struct {
|
||||
FilePath string
|
||||
ByAddress map[string]*Object
|
||||
ByFile map[string][]*Object
|
||||
ByFileAndLine map[string][]*Object
|
||||
ByGeneration map[int][]*Object
|
||||
}
|
||||
|
||||
// Process processes the heap dump referenced in FilePath.
|
||||
func (s *Dump) Process() error {
|
||||
file, err := os.Open(s.FilePath)
|
||||
defer file.Close()
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
s.ByAddress = map[string]*Object{}
|
||||
s.ByFile = map[string][]*Object{}
|
||||
s.ByFileAndLine = map[string][]*Object{}
|
||||
s.ByGeneration = map[int][]*Object{}
|
||||
|
||||
reader := bufio.NewReader(file)
|
||||
for {
|
||||
line, err := reader.ReadBytes(byte('\n'))
|
||||
if err == io.EOF {
|
||||
break
|
||||
} else if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
object, err := NewObject(line)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
s.AddObject(object)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// AddObject adds a *Object to the Dump.
|
||||
func (s *Dump) AddObject(obj *Object) {
|
||||
s.ByAddress[obj.Address] = obj
|
||||
|
||||
if obj.File != "" {
|
||||
s.ByFile[obj.File] = append(s.ByFile[obj.File], obj)
|
||||
}
|
||||
|
||||
if obj.File != "" && obj.Line != 0 {
|
||||
key := obj.File + ":" + strconv.Itoa(obj.Line)
|
||||
s.ByFileAndLine[key] = append(s.ByFileAndLine[key], obj)
|
||||
}
|
||||
|
||||
if obj.Generation != 0 {
|
||||
s.ByGeneration[obj.Generation] =
|
||||
append(s.ByGeneration[obj.Generation], obj)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user