From b7e759b1b6aae94a4d552e92cdccd7e27bffbe93 Mon Sep 17 00:00:00 2001 From: jesseward Date: Sun, 27 Jul 2025 11:40:52 -0400 Subject: [PATCH 1/2] Adds new constructor NewFromEndOfFile Ignores OOMs that occurred before the parser was created. --- utils/oomparser/oomexample/main.go | 10 +++++++++- utils/oomparser/oomparser.go | 15 +++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/utils/oomparser/oomexample/main.go b/utils/oomparser/oomexample/main.go index ff8fbe5e7f..4b91b7710e 100644 --- a/utils/oomparser/oomexample/main.go +++ b/utils/oomparser/oomexample/main.go @@ -25,11 +25,19 @@ import ( // demonstrates how to run oomparser.OomParser to get OomInstance information func main() { klog.InitFlags(nil) + ignoreOldOOMs := flag.Bool("ignore_old", false, "Read only new OOM events, ignoring old. ") flag.Parse() // out is a user-provided channel from which the user can read incoming // OomInstance objects outStream := make(chan *oomparser.OomInstance) - oomLog, err := oomparser.New() + + var oomLog *oomparser.OomParser + var err error + if *ignoreOldOOMs { + oomLog, err = oomparser.NewFromEndOfFile() + } else { + oomLog, err = oomparser.New() + } if err != nil { klog.Infof("Couldn't make a new oomparser. %v", err) } else { diff --git a/utils/oomparser/oomparser.go b/utils/oomparser/oomparser.go index 32dc838fb9..707c876059 100644 --- a/utils/oomparser/oomparser.go +++ b/utils/oomparser/oomparser.go @@ -149,6 +149,21 @@ func (p *OomParser) StreamOoms(outStream chan<- *OomInstance) { klog.Errorf("exiting analyzeLines. OOM events will not be reported.") } +// NewFromEndOfFile initializes an OomParser object that starts reading from the end of the kernel log. +// This will ignore any OOM events that occurred before the parser was created. +func NewFromEndOfFile() (*OomParser, error) { + parser, err := New() + if err != nil { + return nil, err + } + + // seek to and set the offset at the end of /dev/kmsg to avoid reporting old OOM events + if err := parser.parser.SeekEnd(); err != nil { + return nil, err + } + return parser, nil +} + // initializes an OomParser object. Returns an OomParser object and an error. func New() (*OomParser, error) { parser, err := kmsgparser.NewParser() From fbf2a427277355ae7360838524d58eb217645a9a Mon Sep 17 00:00:00 2001 From: jesseward Date: Sun, 27 Jul 2025 20:14:41 +0000 Subject: [PATCH 2/2] Constructor name is now NewFromNow(). --- utils/oomparser/oomexample/main.go | 2 +- utils/oomparser/oomparser.go | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/utils/oomparser/oomexample/main.go b/utils/oomparser/oomexample/main.go index 4b91b7710e..432433427b 100644 --- a/utils/oomparser/oomexample/main.go +++ b/utils/oomparser/oomexample/main.go @@ -34,7 +34,7 @@ func main() { var oomLog *oomparser.OomParser var err error if *ignoreOldOOMs { - oomLog, err = oomparser.NewFromEndOfFile() + oomLog, err = oomparser.NewFromNow() } else { oomLog, err = oomparser.New() } diff --git a/utils/oomparser/oomparser.go b/utils/oomparser/oomparser.go index 707c876059..e15a24cd21 100644 --- a/utils/oomparser/oomparser.go +++ b/utils/oomparser/oomparser.go @@ -149,9 +149,9 @@ func (p *OomParser) StreamOoms(outStream chan<- *OomInstance) { klog.Errorf("exiting analyzeLines. OOM events will not be reported.") } -// NewFromEndOfFile initializes an OomParser object that starts reading from the end of the kernel log. -// This will ignore any OOM events that occurred before the parser was created. -func NewFromEndOfFile() (*OomParser, error) { +// NewFromNow initializes an OomParser object that returns current OOM events only. In this mode the OomParser object +// will not send OOM events that occurred before the OomParser object was constructed. +func NewFromNow() (*OomParser, error) { parser, err := New() if err != nil { return nil, err