-
Notifications
You must be signed in to change notification settings - Fork 24
/
flowcollector.go
156 lines (134 loc) · 4.03 KB
/
flowcollector.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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
package helper
import (
"strings"
flowslatest "github.com/netobserv/network-observability-operator/api/v1beta1"
"github.com/netobserv/network-observability-operator/controllers/constants"
"sigs.k8s.io/controller-runtime/pkg/client"
)
func GetSampling(spec *flowslatest.FlowCollectorSpec) int {
if UseEBPF(spec) {
return int(*spec.Agent.EBPF.Sampling)
}
return int(spec.Agent.IPFIX.Sampling)
}
func UseEBPF(spec *flowslatest.FlowCollectorSpec) bool {
return spec.Agent.Type == flowslatest.AgentEBPF
}
func UseIPFIX(spec *flowslatest.FlowCollectorSpec) bool {
return spec.Agent.Type == flowslatest.AgentIPFIX
}
func UseKafka(spec *flowslatest.FlowCollectorSpec) bool {
return spec.DeploymentModel == flowslatest.DeploymentModelKafka
}
func HasKafkaExporter(spec *flowslatest.FlowCollectorSpec) bool {
for _, ex := range spec.Exporters {
if ex.Type == flowslatest.KafkaExporter {
return true
}
}
return false
}
func HPADisabled(spec *flowslatest.FlowCollectorHPA) bool {
return spec.Status == flowslatest.HPAStatusDisabled
}
func HPAEnabled(spec *flowslatest.FlowCollectorHPA) bool {
return spec.Status == flowslatest.HPAStatusEnabled
}
func LokiNoAuthToken(spec *flowslatest.FlowCollectorLoki) bool {
return spec.AuthToken == flowslatest.LokiAuthDisabled
}
func LokiUseHostToken(spec *flowslatest.FlowCollectorLoki) bool {
return spec.AuthToken == flowslatest.LokiAuthUseHostToken
}
func LokiForwardUserToken(spec *flowslatest.FlowCollectorLoki) bool {
return spec.AuthToken == flowslatest.LokiAuthForwardUserToken
}
func GetLokiStatusTLS(spec *flowslatest.FlowCollectorLoki) flowslatest.ClientTLS {
if spec.StatusURL != "" {
return spec.StatusTLS
}
return spec.TLS
}
func GetRecordTypes(processor *flowslatest.FlowCollectorFLP) []string {
outputRecordTypes := []string{constants.FlowLogType}
if processor.LogTypes != nil {
switch *processor.LogTypes {
case flowslatest.LogTypeFlows:
outputRecordTypes = []string{
constants.FlowLogType,
}
case flowslatest.LogTypeConversations:
outputRecordTypes = []string{
constants.NewConnectionType,
constants.HeartbeatType,
constants.EndConnectionType,
}
case flowslatest.LogTypeEndedConversations:
outputRecordTypes = []string{
constants.EndConnectionType,
}
case flowslatest.LogTypeAll:
outputRecordTypes = []string{
constants.FlowLogType,
constants.NewConnectionType,
constants.HeartbeatType,
constants.EndConnectionType,
}
}
}
return outputRecordTypes
}
func UseSASL(cfg *flowslatest.SASLConfig) bool {
return cfg.Type == flowslatest.SASLPlain || cfg.Type == flowslatest.SASLScramSHA512
}
func UseLoki(spec *flowslatest.FlowCollectorSpec) bool {
// nil should fallback to default value, which is "true"
return spec.Loki.Enable == nil || *spec.Loki.Enable
}
func UseConsolePlugin(spec *flowslatest.FlowCollectorSpec) bool {
return UseLoki(spec) &&
// nil should fallback to default value, which is "true"
(spec.ConsolePlugin.Enable == nil || *spec.ConsolePlugin.Enable)
}
func IsFeatureEnabled(spec *flowslatest.FlowCollectorEBPF, feature flowslatest.AgentFeature) bool {
for _, f := range spec.Features {
if f == feature {
return true
}
}
return false
}
func IsPrivileged(spec *flowslatest.FlowCollectorEBPF) bool {
return spec.Privileged
}
func IsPktDropEnabled(spec *flowslatest.FlowCollectorEBPF) bool {
if IsPrivileged(spec) && IsFeatureEnabled(spec, flowslatest.PacketDrop) {
return true
}
return false
}
func IsDNSTrackingEnabled(spec *flowslatest.FlowCollectorEBPF) bool {
if IsPrivileged(spec) && IsFeatureEnabled(spec, flowslatest.DNSTracking) {
return true
}
return false
}
func IsFlowRTTEnabled(spec *flowslatest.FlowCollectorEBPF) bool {
return IsFeatureEnabled(spec, flowslatest.FlowRTT)
}
func PtrBool(b *bool) bool {
if b == nil {
return false
}
return *b
}
func PtrInt32(i *int32) int32 {
if i == nil {
return 0
}
return *i
}
func IsOwned(obj client.Object) bool {
refs := obj.GetOwnerReferences()
return len(refs) > 0 && strings.HasPrefix(refs[0].APIVersion, flowslatest.GroupVersion.Group)
}