Added a way for oom events to be handled by the manager

This commit is contained in:
Katie Knister 2015-02-20 15:37:11 -08:00
parent 7def27275a
commit 5f66cbc9bf

View File

@ -71,6 +71,9 @@ type Manager interface {
// Get version information about different components we depend on. // Get version information about different components we depend on.
GetVersionInfo() (*info.VersionInfo, error) GetVersionInfo() (*info.VersionInfo, error)
// Get events streamed through passedChannel that fit the request.
WatchForEvents(request *events.Request, passedChannel chan *events.Event) error
} }
// New takes a memory storage and returns a new manager. // New takes a memory storage and returns a new manager.
@ -107,6 +110,8 @@ func New(memoryStorage *memory.InMemoryStorage, sysfs sysfs.SysFs) (Manager, err
newManager.versionInfo = *versionInfo newManager.versionInfo = *versionInfo
glog.Infof("Version: %+v", newManager.versionInfo) glog.Infof("Version: %+v", newManager.versionInfo)
newManager.eventHandler = events.NewEventManager()
return newManager, nil return newManager, nil
} }
@ -129,6 +134,7 @@ type manager struct {
cadvisorContainer string cadvisorContainer string
dockerContainersRegexp *regexp.Regexp dockerContainersRegexp *regexp.Regexp
loadReader cpuload.CpuLoadReader loadReader cpuload.CpuLoadReader
eventHandler events.EventManager
} }
// Start the container manager. // Start the container manager.
@ -169,6 +175,10 @@ func (self *manager) Start() error {
return err return err
} }
self.quitChannels = append(self.quitChannels, quitWatcher) self.quitChannels = append(self.quitChannels, quitWatcher)
err = self.watchForNewOoms()
if err != nil {
return err
}
// Look for new containers in the main housekeeping thread. // Look for new containers in the main housekeeping thread.
quitGlobalHousekeeping := make(chan error) quitGlobalHousekeeping := make(chan error)
@ -645,7 +655,16 @@ func (self *manager) watchForNewOoms() error {
EventData: oomInstance, EventData: oomInstance,
} }
glog.V(1).Infof("Created an oom event: %v", newEvent) glog.V(1).Infof("Created an oom event: %v", newEvent)
err := self.eventHandler.AddEvent(newEvent)
if err != nil {
glog.Errorf("Failed to add event %v, got error: %v", newEvent, err)
}
} }
}() }()
return nil return nil
} }
// can be called by the api which will take events returned on the channel
func (self *manager) WatchForEvents(request *events.Request, passedChannel chan *events.Event) error {
return self.eventHandler.WatchEvents(passedChannel, request)
}