96 lines
1.9 KiB
Go
96 lines
1.9 KiB
Go
package dao
|
|
|
|
import (
|
|
"bytes"
|
|
)
|
|
|
|
// LogChan represents a channel for logs.
|
|
type LogChan chan *LogItem
|
|
|
|
var ItemEOF = new(LogItem)
|
|
|
|
// LogItem represents a container log line.
|
|
type LogItem struct {
|
|
Pod, Container string
|
|
SingleContainer bool
|
|
Bytes []byte
|
|
}
|
|
|
|
// NewLogItem returns a new item.
|
|
func NewLogItem(bb []byte) *LogItem {
|
|
return &LogItem{
|
|
Bytes: bb,
|
|
}
|
|
}
|
|
|
|
// NewLogItemFromString returns a new item.
|
|
func NewLogItemFromString(s string) *LogItem {
|
|
return &LogItem{
|
|
Bytes: []byte(s),
|
|
}
|
|
}
|
|
|
|
// ID returns pod and or container based id.
|
|
func (l *LogItem) ID() string {
|
|
if l.Pod != "" {
|
|
return l.Pod
|
|
}
|
|
return l.Container
|
|
}
|
|
|
|
// GetTimestamp fetch log lime timestamp
|
|
func (l *LogItem) GetTimestamp() string {
|
|
index := bytes.Index(l.Bytes, []byte{' '})
|
|
if index < 0 {
|
|
return ""
|
|
}
|
|
return string(l.Bytes[:index])
|
|
}
|
|
|
|
// Info returns pod and container information.
|
|
func (l *LogItem) Info() string {
|
|
return l.Pod + "::" + l.Container
|
|
}
|
|
|
|
// IsEmpty checks if the entry is empty.
|
|
func (l *LogItem) IsEmpty() bool {
|
|
return len(l.Bytes) == 0
|
|
}
|
|
|
|
// Size returns the size of the item.
|
|
func (l *LogItem) Size() int {
|
|
return 100 + len(l.Bytes) + len(l.Pod) + len(l.Container)
|
|
}
|
|
|
|
// Render returns a log line as string.
|
|
func (l *LogItem) Render(paint string, showTime bool, bb *bytes.Buffer) {
|
|
index := bytes.Index(l.Bytes, []byte{' '})
|
|
if showTime && index > 0 {
|
|
bb.WriteString("[gray::]")
|
|
bb.Write(l.Bytes[:index])
|
|
bb.WriteString(" ")
|
|
for i := len(l.Bytes[:index]); i < 30; i++ {
|
|
bb.WriteByte(' ')
|
|
}
|
|
}
|
|
|
|
if l.Pod != "" {
|
|
bb.WriteString("[" + paint + "::]" + l.Pod)
|
|
}
|
|
|
|
if !l.SingleContainer && l.Container != "" {
|
|
if len(l.Pod) > 0 {
|
|
bb.WriteString(" ")
|
|
}
|
|
bb.WriteString("[" + paint + "::b]" + l.Container + "[-::-] ")
|
|
} else if len(l.Pod) > 0 {
|
|
bb.WriteString("[-::] ")
|
|
}
|
|
|
|
if index > 0 {
|
|
bb.Write(l.Bytes[index+1:])
|
|
} else {
|
|
bb.Write(l.Bytes)
|
|
}
|
|
}
|