tetragon

Форк
0
/
color.go 
114 строк · 2.1 Кб
1
// SPDX-License-Identifier: Apache-2.0
2
// Copyright Authors of Tetragon
3

4
package encoder
5

6
import (
7
	"fmt"
8
	"strings"
9

10
	"github.com/cilium/tetragon/api/v1/tetragon"
11
	"github.com/fatih/color"
12
)
13

14
type Colorer struct {
15
	Colors  []*color.Color
16
	Red     *color.Color
17
	Green   *color.Color
18
	Blue    *color.Color
19
	Cyan    *color.Color
20
	Magenta *color.Color
21
	Yellow  *color.Color
22
}
23

24
func NewColorer(when ColorMode) *Colorer {
25
	red := color.New(color.FgRed)
26
	green := color.New(color.FgGreen)
27
	blue := color.New(color.FgBlue)
28
	cyan := color.New(color.FgCyan)
29
	magenta := color.New(color.FgMagenta)
30
	yellow := color.New(color.FgYellow)
31

32
	c := &Colorer{
33
		Red:     red,
34
		Green:   green,
35
		Blue:    blue,
36
		Cyan:    cyan,
37
		Magenta: magenta,
38
		Yellow:  yellow,
39
	}
40

41
	c.Colors = []*color.Color{
42
		red, green, blue,
43
		cyan, magenta, yellow,
44
	}
45
	switch when {
46
	case Always:
47
		c.enable()
48
	case Never:
49
		c.disable()
50
	case Auto:
51
		c.auto()
52
	}
53
	return c
54
}
55

56
func (c *Colorer) auto() {
57
	for _, v := range c.Colors {
58
		if color.NoColor { // NoColor is global and set dynamically
59
			v.DisableColor()
60
		} else {
61
			v.EnableColor()
62
		}
63
	}
64
}
65

66
func (c *Colorer) enable() {
67
	for _, v := range c.Colors {
68
		v.EnableColor()
69
	}
70
}
71

72
func (c *Colorer) disable() {
73
	for _, v := range c.Colors {
74
		v.DisableColor()
75
	}
76
}
77

78
func printCap(c int) bool {
79
	switch c {
80
	case int(tetragon.CapabilitiesType_CAP_SYS_ADMIN):
81
		return true
82
	}
83
	return false
84
}
85

86
func processCaps(c *tetragon.Capabilities) string {
87
	var caps []string
88

89
	if c == nil {
90
		return ""
91
	}
92

93
	for e := range c.Effective {
94
		if printCap(e) {
95
			caps = append(caps, tetragon.CapabilitiesType_name[int32(e)])
96
		}
97
	}
98

99
	capsString := strings.Join(caps, ",")
100
	if len(caps) > 0 {
101
		capsString = "🛑 " + capsString
102
	}
103
	return capsString
104
}
105

106
func (c *Colorer) ProcessInfo(host string, process *tetragon.Process) (string, string) {
107
	source := c.Green.Sprint(host)
108
	if process.Pod != nil {
109
		source = c.Green.Sprint(process.Pod.Namespace, "/", process.Pod.Name)
110
	}
111
	proc := c.Magenta.Sprint(process.Binary)
112
	caps := c.Magenta.Sprint(processCaps(process.Cap))
113
	return fmt.Sprintf("%s %s", source, proc), caps
114
}
115

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.