| package plugin |
| |
| // TaskMonitor provides an interface for monitoring of containers within containerd |
| type TaskMonitor interface { |
| // Monitor adds the provided container to the monitor |
| Monitor(Task) error |
| // Stop stops and removes the provided container from the monitor |
| Stop(Task) error |
| // Events emits events from the monitor |
| Events(chan<- *Event) |
| } |
| |
| func NewMultiTaskMonitor(monitors ...TaskMonitor) TaskMonitor { |
| return &multiTaskMonitor{ |
| monitors: monitors, |
| } |
| } |
| |
| func NewNoopMonitor() TaskMonitor { |
| return &noopTaskMonitor{} |
| } |
| |
| type noopTaskMonitor struct { |
| } |
| |
| func (mm *noopTaskMonitor) Monitor(c Task) error { |
| return nil |
| } |
| |
| func (mm *noopTaskMonitor) Stop(c Task) error { |
| return nil |
| } |
| |
| func (mm *noopTaskMonitor) Events(events chan<- *Event) { |
| } |
| |
| type multiTaskMonitor struct { |
| monitors []TaskMonitor |
| } |
| |
| func (mm *multiTaskMonitor) Monitor(c Task) error { |
| for _, m := range mm.monitors { |
| if err := m.Monitor(c); err != nil { |
| return err |
| } |
| } |
| return nil |
| } |
| |
| func (mm *multiTaskMonitor) Stop(c Task) error { |
| for _, m := range mm.monitors { |
| if err := m.Stop(c); err != nil { |
| return err |
| } |
| } |
| return nil |
| } |
| |
| func (mm *multiTaskMonitor) Events(events chan<- *Event) { |
| for _, m := range mm.monitors { |
| m.Events(events) |
| } |
| } |