Skip to content

Commit c650133

Browse files
committed
Move baseline ranking derivation to collector
1 parent 8325dd8 commit c650133

9 files changed

Lines changed: 65 additions & 73 deletions

File tree

comp/networkpath/npcollector/impl/baseline.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ func addBaselinePath(selected []baselineCandidate, path common.Pathtest, signals
6464
return addBaselineCandidate(selected, baselineCandidate{
6565
path: path,
6666
pathHash: path.GetHash(),
67-
diagnostic: signals.Diagnostic,
68-
bytes: signals.Bytes,
67+
diagnostic: signals.TimeoutCount > 0 || signals.RTOCount > 0 || signals.Retransmits > 0,
68+
bytes: signals.SentBytes + signals.RecvBytes,
6969
})
7070
}

comp/networkpath/npcollector/impl/baseline_test.go

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,12 @@ import (
1414
"time"
1515

1616
model "github.com/DataDog/agent-payload/v5/process"
17+
"github.com/DataDog/datadog-agent/comp/networkpath/npcollector/impl/common"
18+
npmodel "github.com/DataDog/datadog-agent/comp/networkpath/npcollector/model"
1719
"github.com/DataDog/datadog-agent/pkg/networkpath/payload"
1820
"github.com/DataDog/datadog-agent/pkg/trace/teststatsd"
1921
"github.com/stretchr/testify/assert"
2022
"github.com/stretchr/testify/require"
21-
22-
npmodel "github.com/DataDog/datadog-agent/comp/networkpath/npcollector/model"
2323
)
2424

2525
func baselineConn(host string, bytes uint64) npmodel.NetworkPathConnection {
@@ -28,7 +28,7 @@ func baselineConn(host string, bytes uint64) npmodel.NetworkPathConnection {
2828
Type: model.ConnectionType_udp,
2929
Direction: model.ConnectionDirection_outgoing,
3030
Family: model.ConnectionFamily_v4,
31-
Baseline: npmodel.BaselineSignals{Bytes: bytes},
31+
Baseline: npmodel.BaselineSignals{SentBytes: bytes},
3232
}
3333
}
3434

@@ -93,9 +93,9 @@ func TestBaselinePrioritizesDiagnosticConnections(t *testing.T) {
9393

9494
healthyLarge := baselineConn("10.0.0.1", 1_000)
9595
diagnosticSmall := baselineConn("10.0.0.2", 1)
96-
diagnosticSmall.Baseline.Diagnostic = true
96+
diagnosticSmall.Baseline.TimeoutCount = 1
9797
diagnosticLarge := baselineConn("10.0.0.3", 10)
98-
diagnosticLarge.Baseline.Diagnostic = true
98+
diagnosticLarge.Baseline.RTOCount = 1
9999

100100
collector.ScheduleNetworkPathTests(slices.Values([]npmodel.NetworkPathConnection{
101101
healthyLarge,
@@ -107,6 +107,31 @@ func TestBaselinePrioritizesDiagnosticConnections(t *testing.T) {
107107
assert.Equal(t, []string{"10.0.0.3", "10.0.0.2", "10.0.0.1"}, scheduledBaselineHosts(t, collector))
108108
}
109109

110+
func TestBaselineDiagnosticSignals(t *testing.T) {
111+
for name, signals := range map[string]npmodel.BaselineSignals{
112+
"timeout": {TimeoutCount: 1},
113+
"rto": {RTOCount: 1},
114+
"retransmit": {Retransmits: 1},
115+
} {
116+
t.Run(name, func(t *testing.T) {
117+
selected := addBaselinePath(nil, common.Pathtest{Hostname: name}, signals)
118+
119+
require.Len(t, selected, 1)
120+
assert.True(t, selected[0].diagnostic)
121+
})
122+
}
123+
}
124+
125+
func TestBaselineCombinesSentAndReceivedBytes(t *testing.T) {
126+
selected := addBaselinePath(nil, common.Pathtest{Hostname: "host"}, npmodel.BaselineSignals{
127+
SentBytes: 5,
128+
RecvBytes: 6,
129+
})
130+
131+
require.Len(t, selected, 1)
132+
assert.Equal(t, uint64(11), selected[0].bytes)
133+
}
134+
110135
func TestBaselineKeepsStrongestObservationPerPath(t *testing.T) {
111136
_, collector := newTestNpCollector(t, map[string]any{
112137
"network_path.connections_monitoring.baseline_tests_enabled": true,
Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
load("@rules_go//go:def.bzl", "go_library")
2-
load("//bazel/rules/go:dd_agent_go_test.bzl", "dd_agent_go_test")
32

43
go_library(
54
name = "model",
@@ -8,10 +7,3 @@ go_library(
87
visibility = ["//visibility:public"],
98
deps = ["@com_github_datadog_agent_payload_v5//process"],
109
)
11-
12-
dd_agent_go_test(
13-
name = "model_test",
14-
srcs = ["connection_test.go"],
15-
embed = [":model"],
16-
deps = ["@com_github_stretchr_testify//assert"],
17-
)

comp/networkpath/npcollector/model/connection.go

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,11 @@ const TCPTimeoutErrno uint16 = 110
1818

1919
// BaselineSignals contains the normalized CNM values used by baseline selection.
2020
type BaselineSignals struct {
21-
Diagnostic bool
22-
Bytes uint64
23-
}
24-
25-
// NewBaselineSignals normalizes the CNM deltas used by baseline selection.
26-
// Both direct and process-agent producers use this constructor so their ranking
27-
// inputs remain equivalent.
28-
func NewBaselineSignals(timeoutCount, rtoCount, retransmits, sentBytes, recvBytes uint64) BaselineSignals {
29-
return BaselineSignals{
30-
Diagnostic: timeoutCount > 0 || rtoCount > 0 || retransmits > 0,
31-
Bytes: sentBytes + recvBytes,
32-
}
21+
TimeoutCount uint64
22+
RTOCount uint64
23+
Retransmits uint64
24+
SentBytes uint64
25+
RecvBytes uint64
3326
}
3427

3528
// NetworkPathConnection is the minimum information needed about a connection to schedule a network path test

comp/networkpath/npcollector/model/connection_test.go

Lines changed: 0 additions & 28 deletions
This file was deleted.

pkg/network/sender/sender_linux.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -292,13 +292,13 @@ func (d *directSender) networkPathConnections(conns *network.Connections) iter.S
292292
Domain: getDNSNameForIP(conns, conn.Dest),
293293
IntraHost: conn.IntraHost,
294294
SystemProbeConn: conn.Pid == d.sysProbePID,
295-
Baseline: npmodel.NewBaselineSignals(
296-
uint64(conn.TCPFailures[npmodel.TCPTimeoutErrno]),
297-
uint64(conn.Last.TCPRTOCount),
298-
uint64(conn.Last.Retransmits),
299-
conn.Last.SentBytes,
300-
conn.Last.RecvBytes,
301-
),
295+
Baseline: npmodel.BaselineSignals{
296+
TimeoutCount: uint64(conn.TCPFailures[npmodel.TCPTimeoutErrno]),
297+
RTOCount: uint64(conn.Last.TCPRTOCount),
298+
Retransmits: uint64(conn.Last.Retransmits),
299+
SentBytes: conn.Last.SentBytes,
300+
RecvBytes: conn.Last.RecvBytes,
301+
},
302302
}
303303
if !yield(npc) {
304304
return

pkg/network/sender/sender_linux_test.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,8 +170,13 @@ func TestNetworkPathConnectionsBaselineSignals(t *testing.T) {
170170
}))
171171

172172
require.Len(t, got, 1)
173-
assert.True(t, got[0].Baseline.Diagnostic)
174-
assert.Equal(t, uint64(11), got[0].Baseline.Bytes)
173+
assert.Equal(t, npmodel.BaselineSignals{
174+
TimeoutCount: 1,
175+
RTOCount: 2,
176+
Retransmits: 3,
177+
SentBytes: 5,
178+
RecvBytes: 6,
179+
}, got[0].Baseline)
175180
}
176181

177182
func TestNetworkConnectionBatchingWithDNS(t *testing.T) {

pkg/process/checks/net.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -255,13 +255,13 @@ func networkPathConnections(conns *model.Connections) iter.Seq[npmodel.NetworkPa
255255
Family: conn.Family,
256256
IntraHost: conn.IntraHost,
257257
SystemProbeConn: conn.SystemProbeConn,
258-
Baseline: npmodel.NewBaselineSignals(
259-
uint64(conn.TcpFailuresByErrCode[uint32(npmodel.TCPTimeoutErrno)]),
260-
uint64(conn.LastTcpRtoCount),
261-
uint64(conn.LastRetransmits),
262-
conn.LastBytesSent,
263-
conn.LastBytesReceived,
264-
),
258+
Baseline: npmodel.BaselineSignals{
259+
TimeoutCount: uint64(conn.TcpFailuresByErrCode[uint32(npmodel.TCPTimeoutErrno)]),
260+
RTOCount: uint64(conn.LastTcpRtoCount),
261+
Retransmits: uint64(conn.LastRetransmits),
262+
SentBytes: conn.LastBytesSent,
263+
RecvBytes: conn.LastBytesReceived,
264+
},
265265
}
266266
if !yield(npc) {
267267
return

pkg/process/checks/net_test.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -182,8 +182,13 @@ func TestNetworkPathConnectionsBaselineSignals(t *testing.T) {
182182
got := slices.Collect(networkPathConnections(&model.Connections{Conns: []*model.Connection{conn}}))
183183

184184
require.Len(t, got, 1)
185-
assert.True(t, got[0].Baseline.Diagnostic)
186-
assert.Equal(t, uint64(11), got[0].Baseline.Bytes)
185+
assert.Equal(t, npmodel.BaselineSignals{
186+
TimeoutCount: 1,
187+
RTOCount: 2,
188+
Retransmits: 3,
189+
SentBytes: 5,
190+
RecvBytes: 6,
191+
}, got[0].Baseline)
187192
}
188193

189194
func TestNetworkConnectionBatchingWithDNS(t *testing.T) {

0 commit comments

Comments
 (0)