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 }