@@ -65,6 +65,27 @@ func (t *TCPMetrics) getLabels() []string {
6565 return labels
6666}
6767
68+ func combineFlagsWithPrevious (flags []string , flow * v1.Flow ) map [string ]uint32 {
69+ var combinedFlags map [string ]uint32
70+
71+ previous := utils .PreviouslyObservedTCPFlags (flow )
72+ if previous != nil {
73+ combinedFlags = previous
74+ } else {
75+ combinedFlags = map [string ]uint32 {}
76+ }
77+
78+ for _ , flag := range flags {
79+ if _ , ok := combinedFlags [flag ]; ! ok {
80+ combinedFlags [flag ] = 1
81+ } else {
82+ combinedFlags [flag ]++
83+ }
84+ }
85+
86+ return combinedFlags
87+ }
88+
6889func (t * TCPMetrics ) ProcessFlow (flow * v1.Flow ) {
6990 if flow == nil {
7091 return
@@ -100,11 +121,11 @@ func (t *TCPMetrics) ProcessFlow(flow *v1.Flow) {
100121 dstLabels = t .dstCtx .getValues (flow )
101122 }
102123
103- for _ , flag := range flags {
124+ for flag , count := range combineFlagsWithPrevious ( flags , flow ) {
104125 labels := append ([]string {flag }, srcLabels ... )
105126 labels = append (labels , dstLabels ... )
106- t .tcpFlagsMetrics .WithLabelValues (labels ... ).Inc ( )
107- t .l .Debug ("TCP flag metric" , zap .String ("flag" , flag ), zap .Strings ("labels" , labels ))
127+ t .tcpFlagsMetrics .WithLabelValues (labels ... ).Add ( float64 ( count ) )
128+ t .l .Debug ("TCP flag metric" , zap .String ("flag" , flag ), zap .Strings ("labels" , labels ), zap . Uint32 ( "count" , count ) )
108129 }
109130}
110131
@@ -113,20 +134,23 @@ func (t *TCPMetrics) processLocalCtxFlow(flow *v1.Flow, flags []string) {
113134 if labelValuesMap == nil {
114135 return
115136 }
137+
138+ combinedFlags := combineFlagsWithPrevious (flags , flow )
139+
116140 // Ingress values
117141 if l := len (labelValuesMap [ingress ]); l > 0 {
118- for _ , flag := range flags {
142+ for flag , count := range combinedFlags {
119143 labels := append ([]string {flag }, labelValuesMap [ingress ]... )
120- t .tcpFlagsMetrics .WithLabelValues (labels ... ).Inc ( )
121- t .l .Debug ("TCP flag metric" , zap .String ("flag" , flag ), zap .Strings ("labels" , labels ))
144+ t .tcpFlagsMetrics .WithLabelValues (labels ... ).Add ( float64 ( count ) )
145+ t .l .Debug ("TCP flag metric" , zap .String ("flag" , flag ), zap .Strings ("labels" , labels ), zap . Uint32 ( "count" , count ) )
122146 }
123147 }
124148
125149 if l := len (labelValuesMap [egress ]); l > 0 {
126- for _ , flag := range flags {
150+ for flag , count := range combinedFlags {
127151 labels := append ([]string {flag }, labelValuesMap [egress ]... )
128- t .tcpFlagsMetrics .WithLabelValues (labels ... ).Inc ( )
129- t .l .Debug ("TCP flag metric" , zap .String ("flag" , flag ), zap .Strings ("labels" , labels ))
152+ t .tcpFlagsMetrics .WithLabelValues (labels ... ).Add ( float64 ( count ) )
153+ t .l .Debug ("TCP flag metric" , zap .String ("flag" , flag ), zap .Strings ("labels" , labels ), zap . Uint32 ( "count" , count ) )
130154 }
131155 }
132156}
@@ -171,6 +195,10 @@ func (t *TCPMetrics) getFlagValues(flags *v1.TCPFlags) []string {
171195 f = append (f , utils .CWR )
172196 }
173197
198+ if flags .GetNS () {
199+ f = append (f , utils .NS )
200+ }
201+
174202 return f
175203}
176204
0 commit comments