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  }