-
Notifications
You must be signed in to change notification settings - Fork 928
/
logs.go
122 lines (96 loc) · 3.45 KB
/
logs.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
package ui_helpers
import (
"fmt"
"regexp"
"strings"
"time"
"unicode/utf8"
"github.com/cloudfoundry/cli/cf/terminal"
"github.com/cloudfoundry/loggregatorlib/logmessage"
"github.com/cloudfoundry/sonde-go/events"
)
func max(a, b int) int {
if a > b {
return a
}
return b
}
func ExtractLogHeader(msg *logmessage.LogMessage, loc *time.Location) (logHeader, coloredLogHeader string) {
logMsg := msg
sourceName := logMsg.GetSourceName()
sourceID := logMsg.GetSourceId()
t := time.Unix(0, logMsg.GetTimestamp())
timeFormat := "2006-01-02T15:04:05.00-0700"
timeString := t.In(loc).Format(timeFormat)
if sourceID == "" {
logHeader = fmt.Sprintf("%s [%s]", timeString, sourceName)
} else {
logHeader = fmt.Sprintf("%s [%s/%s]", timeString, sourceName, sourceID)
}
coloredLogHeader = terminal.LogSysHeaderColor(logHeader)
// Calculate padding
longestHeader := fmt.Sprintf("%s [HEALTH/10] ", timeFormat)
expectedHeaderLength := utf8.RuneCountInString(longestHeader)
padding := strings.Repeat(" ", max(0, expectedHeaderLength-utf8.RuneCountInString(logHeader)))
logHeader = logHeader + padding
coloredLogHeader = coloredLogHeader + padding
return
}
func ExtractNoaaLogHeader(msg *events.LogMessage, loc *time.Location) (logHeader, coloredLogHeader string) {
logMsg := msg
sourceName := logMsg.GetSourceType()
sourceID := logMsg.GetSourceInstance()
t := time.Unix(0, logMsg.GetTimestamp())
timeFormat := "2006-01-02T15:04:05.00-0700"
timeString := t.In(loc).Format(timeFormat)
if sourceID == "" {
logHeader = fmt.Sprintf("%s [%s]", timeString, sourceName)
} else {
logHeader = fmt.Sprintf("%s [%s/%s]", timeString, sourceName, sourceID)
}
coloredLogHeader = terminal.LogSysHeaderColor(logHeader)
// Calculate padding
longestHeader := fmt.Sprintf("%s [HEALTH/10] ", timeFormat)
expectedHeaderLength := utf8.RuneCountInString(longestHeader)
padding := strings.Repeat(" ", max(0, expectedHeaderLength-utf8.RuneCountInString(logHeader)))
logHeader = logHeader + padding
coloredLogHeader = coloredLogHeader + padding
return
}
var newLinesPattern = regexp.MustCompile("[\n\r]+$")
func ExtractNoaaLogContent(logMsg *events.LogMessage, logHeader string) (logContent string) {
msgText := string(logMsg.GetMessage())
msgText = newLinesPattern.ReplaceAllString(msgText, "")
msgLines := strings.Split(msgText, "\n")
padding := strings.Repeat(" ", utf8.RuneCountInString(logHeader))
coloringFunc := terminal.LogStdoutColor
logType := "OUT"
if logMsg.GetMessageType() == events.LogMessage_ERR {
coloringFunc = terminal.LogStderrColor
logType = "ERR"
}
logContent = fmt.Sprintf("%s %s", logType, msgLines[0])
for _, msgLine := range msgLines[1:] {
logContent = fmt.Sprintf("%s\n%s%s", logContent, padding, msgLine)
}
logContent = coloringFunc(logContent)
return
}
func ExtractLogContent(logMsg *logmessage.LogMessage, logHeader string) (logContent string) {
msgText := string(logMsg.GetMessage())
msgText = newLinesPattern.ReplaceAllString(msgText, "")
msgLines := strings.Split(msgText, "\n")
padding := strings.Repeat(" ", utf8.RuneCountInString(logHeader))
coloringFunc := terminal.LogStdoutColor
logType := "OUT"
if logMsg.GetMessageType() == logmessage.LogMessage_ERR {
coloringFunc = terminal.LogStderrColor
logType = "ERR"
}
logContent = fmt.Sprintf("%s %s", logType, msgLines[0])
for _, msgLine := range msgLines[1:] {
logContent = fmt.Sprintf("%s\n%s%s", logContent, padding, msgLine)
}
logContent = coloringFunc(logContent)
return
}