@@ -606,6 +606,41 @@ func (c *Manager) EventChan() (<-chan Event, <-chan error) {
606606 return ec , errCh
607607}
608608
609+ func parseMemoryEvents (out map [string ]interface {}) (Event , error ) {
610+ e := Event {}
611+ if v , ok := out ["high" ]; ok {
612+ e .High , ok = v .(uint64 )
613+ if ! ok {
614+ return Event {}, fmt .Errorf ("cannot convert high to uint64: %+v" , v )
615+ }
616+ }
617+ if v , ok := out ["low" ]; ok {
618+ e .Low , ok = v .(uint64 )
619+ if ! ok {
620+ return Event {}, fmt .Errorf ("cannot convert low to uint64: %+v" , v )
621+ }
622+ }
623+ if v , ok := out ["max" ]; ok {
624+ e .Max , ok = v .(uint64 )
625+ if ! ok {
626+ return Event {}, fmt .Errorf ("cannot convert max to uint64: %+v" , v )
627+ }
628+ }
629+ if v , ok := out ["oom" ]; ok {
630+ e .OOM , ok = v .(uint64 )
631+ if ! ok {
632+ return Event {}, fmt .Errorf ("cannot convert oom to uint64: %+v" , v )
633+ }
634+ }
635+ if v , ok := out ["oom_kill" ]; ok {
636+ e .OOMKill , ok = v .(uint64 )
637+ if ! ok {
638+ return Event {}, fmt .Errorf ("cannot convert oom_kill to uint64: %+v" , v )
639+ }
640+ }
641+ return e , nil
642+ }
643+
609644func (c * Manager ) waitForEvents (ec chan <- Event , errCh chan <- error ) {
610645 defer close (errCh )
611646
@@ -626,41 +661,10 @@ func (c *Manager) waitForEvents(ec chan<- Event, errCh chan<- error) {
626661 if bytesRead >= syscall .SizeofInotifyEvent {
627662 out := make (map [string ]interface {})
628663 if err := readKVStatsFile (c .path , "memory.events" , out ); err == nil {
629- e := Event {}
630- if v , ok := out ["high" ]; ok {
631- e .High , ok = v .(uint64 )
632- if ! ok {
633- errCh <- fmt .Errorf ("cannot convert high to uint64: %+v" , v )
634- return
635- }
636- }
637- if v , ok := out ["low" ]; ok {
638- e .Low , ok = v .(uint64 )
639- if ! ok {
640- errCh <- fmt .Errorf ("cannot convert low to uint64: %+v" , v )
641- return
642- }
643- }
644- if v , ok := out ["max" ]; ok {
645- e .Max , ok = v .(uint64 )
646- if ! ok {
647- errCh <- fmt .Errorf ("cannot convert max to uint64: %+v" , v )
648- return
649- }
650- }
651- if v , ok := out ["oom" ]; ok {
652- e .OOM , ok = v .(uint64 )
653- if ! ok {
654- errCh <- fmt .Errorf ("cannot convert oom to uint64: %+v" , v )
655- return
656- }
657- }
658- if v , ok := out ["oom_kill" ]; ok {
659- e .OOMKill , ok = v .(uint64 )
660- if ! ok {
661- errCh <- fmt .Errorf ("cannot convert oom_kill to uint64: %+v" , v )
662- return
663- }
664+ e , err := parseMemoryEvents (out )
665+ if err != nil {
666+ errCh <- err
667+ return
664668 }
665669 ec <- e
666670 } else {
0 commit comments