github.com/jasonkeene/cli@v6.14.1-0.20160816203908-ca5715166dfb+incompatible/cf/api/logs/loggregator_message.go (about)

     1  package logs
     2  
     3  import (
     4  	"strings"
     5  	"time"
     6  	"unicode/utf8"
     7  
     8  	"fmt"
     9  
    10  	"github.com/cloudfoundry/cli/cf/terminal"
    11  	"github.com/cloudfoundry/loggregatorlib/logmessage"
    12  )
    13  
    14  type loggregatorLogMessage struct {
    15  	msg *logmessage.LogMessage
    16  }
    17  
    18  func NewLoggregatorLogMessage(m *logmessage.LogMessage) *loggregatorLogMessage {
    19  	return &loggregatorLogMessage{
    20  		msg: m,
    21  	}
    22  }
    23  
    24  func (m *loggregatorLogMessage) GetSourceName() string {
    25  	return m.msg.GetSourceName()
    26  }
    27  
    28  func (m *loggregatorLogMessage) ToLog(loc *time.Location) string {
    29  	logMsg := m.msg
    30  
    31  	sourceName := logMsg.GetSourceName()
    32  	sourceID := logMsg.GetSourceId()
    33  	t := time.Unix(0, logMsg.GetTimestamp())
    34  	timeFormat := "2006-01-02T15:04:05.00-0700"
    35  	timeString := t.In(loc).Format(timeFormat)
    36  
    37  	var logHeader string
    38  
    39  	if sourceID == "" {
    40  		logHeader = fmt.Sprintf("%s [%s]", timeString, sourceName)
    41  	} else {
    42  		logHeader = fmt.Sprintf("%s [%s/%s]", timeString, sourceName, sourceID)
    43  	}
    44  
    45  	coloredLogHeader := terminal.LogSysHeaderColor(logHeader)
    46  
    47  	// Calculate padding
    48  	longestHeader := fmt.Sprintf("%s  [HEALTH/10] ", timeFormat)
    49  	expectedHeaderLength := utf8.RuneCountInString(longestHeader)
    50  	headerPadding := strings.Repeat(" ", max(0, expectedHeaderLength-utf8.RuneCountInString(logHeader)))
    51  
    52  	logHeader = logHeader + headerPadding
    53  	coloredLogHeader = coloredLogHeader + headerPadding
    54  
    55  	msgText := string(logMsg.GetMessage())
    56  	msgText = strings.TrimRight(msgText, "\r\n")
    57  
    58  	msgLines := strings.Split(msgText, "\n")
    59  	contentPadding := strings.Repeat(" ", utf8.RuneCountInString(logHeader))
    60  	coloringFunc := terminal.LogStdoutColor
    61  	logType := "OUT"
    62  
    63  	if logMsg.GetMessageType() == logmessage.LogMessage_ERR {
    64  		coloringFunc = terminal.LogStderrColor
    65  		logType = "ERR"
    66  	}
    67  
    68  	logContent := fmt.Sprintf("%s %s", logType, msgLines[0])
    69  	for _, msgLine := range msgLines[1:] {
    70  		logContent = fmt.Sprintf("%s\n%s%s", logContent, contentPadding, msgLine)
    71  	}
    72  
    73  	logContent = coloringFunc(logContent)
    74  
    75  	return fmt.Sprintf("%s%s", coloredLogHeader, logContent)
    76  }
    77  
    78  func (m *loggregatorLogMessage) ToSimpleLog() string {
    79  	msgText := string(m.msg.GetMessage())
    80  
    81  	return strings.TrimRight(msgText, "\r\n")
    82  }