github.com/skippbox/kompose-origin@v0.0.0-20160524133224-16a9dca7bac2/project/listener.go (about) 1 package project 2 3 import ( 4 "bytes" 5 6 "github.com/Sirupsen/logrus" 7 "github.com/docker/libcompose/project/events" 8 ) 9 10 var ( 11 infoEvents = map[events.EventType]bool{ 12 events.ProjectDeleteDone: true, 13 events.ProjectDeleteStart: true, 14 events.ProjectDownDone: true, 15 events.ProjectDownStart: true, 16 events.ProjectRestartDone: true, 17 events.ProjectRestartStart: true, 18 events.ProjectUpDone: true, 19 events.ProjectUpStart: true, 20 events.ServiceDeleteStart: true, 21 events.ServiceDelete: true, 22 events.ServiceDownStart: true, 23 events.ServiceDown: true, 24 events.ServiceRestartStart: true, 25 events.ServiceRestart: true, 26 events.ServiceUpStart: true, 27 events.ServiceUp: true, 28 } 29 ) 30 31 type defaultListener struct { 32 project *Project 33 listenChan chan events.Event 34 upCount int 35 } 36 37 // NewDefaultListener create a default listener for the specified project. 38 func NewDefaultListener(p *Project) chan<- events.Event { 39 l := defaultListener{ 40 listenChan: make(chan events.Event), 41 project: p, 42 } 43 go l.start() 44 return l.listenChan 45 } 46 47 func (d *defaultListener) start() { 48 for event := range d.listenChan { 49 buffer := bytes.NewBuffer(nil) 50 if event.Data != nil { 51 for k, v := range event.Data { 52 if buffer.Len() > 0 { 53 buffer.WriteString(", ") 54 } 55 buffer.WriteString(k) 56 buffer.WriteString("=") 57 buffer.WriteString(v) 58 } 59 } 60 61 if event.EventType == events.ServiceUp { 62 d.upCount++ 63 } 64 65 logf := logrus.Debugf 66 67 if infoEvents[event.EventType] { 68 logf = logrus.Infof 69 } 70 71 if event.ServiceName == "" { 72 logf("Project [%s]: %s %s", d.project.Name, event.EventType, buffer.Bytes()) 73 } else { 74 logf("[%d/%d] [%s]: %s %s", d.upCount, d.project.ServiceConfigs.Len(), event.ServiceName, event.EventType, buffer.Bytes()) 75 } 76 } 77 }