github.com/Benchkram/bob@v0.0.0-20220321080157-7c8f3876e225/pkg/composectl/logger.go (about)

     1  package composectl
     2  
     3  import (
     4  	"fmt"
     5  	"github.com/docker/compose/v2/pkg/api"
     6  	"github.com/logrusorgru/aurora"
     7  	"io"
     8  )
     9  
    10  var colorPool = []aurora.Color{
    11  	aurora.BlueFg,
    12  	aurora.GreenFg,
    13  	aurora.CyanFg,
    14  	aurora.MagentaFg,
    15  	aurora.YellowFg,
    16  	aurora.RedFg,
    17  }
    18  
    19  type logger struct {
    20  	writer          io.Writer
    21  	containerColors map[string]aurora.Color
    22  }
    23  
    24  var _ api.LogConsumer = (*logger)(nil)
    25  
    26  func NewLogConsumer(w io.Writer) (*logger, error) {
    27  	return &logger{
    28  		writer:          w,
    29  		containerColors: map[string]aurora.Color{},
    30  	}, nil
    31  }
    32  
    33  func (l *logger) colorize(cid string) string {
    34  	color, ok := l.containerColors[cid]
    35  	if ok {
    36  		return aurora.Colorize(cid, color).String()
    37  	}
    38  
    39  	color = colorPool[len(l.containerColors)%len(colorPool)]
    40  	l.containerColors[cid] = color
    41  
    42  	return aurora.Colorize(cid, color).String()
    43  }
    44  
    45  func (l *logger) Log(_, container, msg string) {
    46  	_, _ = l.writer.Write([]byte(fmt.Sprintf("[%s] %s\n", l.colorize(container), msg)))
    47  }
    48  
    49  func (l *logger) Status(container, msg string) {
    50  	_, _ = l.writer.Write([]byte(fmt.Sprintf("[%s] %s\n", l.colorize(container), msg)))
    51  }
    52  
    53  func (l *logger) Register(container string) {
    54  	_, _ = l.writer.Write([]byte(fmt.Sprintf("[%s] registered\n", l.colorize(container))))
    55  }