k9s/internal/dao/log_options.go

73 lines
1.4 KiB
Go

package dao
import (
"strings"
"github.com/derailed/k9s/internal/client"
"github.com/derailed/k9s/internal/color"
)
// LogOptions represent logger options.
type LogOptions struct {
Path string
Container string
Lines int64
Color color.Paint
Previous bool
SingleContainer bool
MultiPods bool
}
// HasContainer checks if a container is present.
func (o LogOptions) HasContainer() bool {
return o.Container != ""
}
// FixedSizeName returns a normalize fixed size pod name if possible.
func (o LogOptions) FixedSizeName() string {
_, n := client.Namespaced(o.Path)
tokens := strings.Split(n, "-")
if len(tokens) < 3 {
return n
}
var s []string
for i := 0; i < len(tokens)-1; i++ {
s = append(s, tokens[i])
}
return Truncate(strings.Join(s, "-"), 15) + "-" + tokens[len(tokens)-1]
}
func colorize(c color.Paint, txt string) string {
if c == 0 {
return ""
}
return color.Colorize(txt, c)
}
// DecorateLog add a log header to display po/co information along with the log message.
func (o LogOptions) DecorateLog(bytes []byte) []byte {
if len(bytes) == 0 {
return bytes
}
bytes = bytes[:len(bytes)-1]
_, n := client.Namespaced(o.Path)
var prefix []byte
if o.MultiPods {
prefix = []byte(colorize(o.Color, n+":"+o.Container+" "))
}
if !o.SingleContainer {
prefix = []byte(colorize(o.Color, o.Container+" "))
}
if len(prefix) == 0 {
return bytes
}
return append(prefix, bytes...)
}