github.com/asifdxtreme/cli@v6.1.3-0.20150123051144-9ead8700b4ae+incompatible/cf/ui_helpers/logs.go (about)

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