Skip to content

Commit faaf02e

Browse files
authored
[AGTHEAL-112] refactor(snmptraps): migrate forwarder component to v2 (#49774)
### What does this PR do? Migrates `comp/snmptraps/forwarder` to V2 component architecture. - `component.go` → `def/component.go` - `forwarderimpl/forwarder.go` → `impl/forwarder.go` - New `fx/fx.go` with `FxLifecycleAdapter()` - `fx.In`/`fx.Lifecycle`/`fx.Hook` → `compdef.In`/`compdef.Lifecycle`/`compdef.Hook` - `lc fx.Lifecycle` direct parameter moved into `Requires` struct as `Lc compdef.Lifecycle` - `Module()` removed from impl, lives in `fx/fx.go` - `newTrapForwarder` renamed to `NewComponent` with `Requires`/`Provides` pattern ### Motivation Part of the ongoing V1→V2 component migration effort across the codebase. ### Describe how you validated your changes Pre-commit hooks (go-fmt, copyright) pass. Callers updated accordingly. ### Additional Notes The only external caller (`comp/snmptraps/server/serverimpl/server.go`) has been updated to import `forwarder/def` and `forwarder/fx` instead of the old `forwarder` and `forwarder/forwarderimpl` paths. Co-authored-by: louis.coquerelle <louis.coquerelle@datadoghq.com>
1 parent 2c3c282 commit faaf02e

6 files changed

Lines changed: 40 additions & 30 deletions

File tree

comp/snmptraps/forwarder/BUILD.bazel

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

comp/snmptraps/forwarder/fx/fx.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// Unless explicitly stated otherwise all files in this repository are licensed
2+
// under the Apache License Version 2.0.
3+
// This product includes software developed at Datadog (https://www.datadoghq.com/).
4+
// Copyright 2023-present Datadog, Inc.
5+
6+
// Package fx provides the fx module for the snmptraps forwarder component.
7+
package fx
8+
9+
import (
10+
forwarderimpl "github.com/DataDog/datadog-agent/comp/snmptraps/forwarder/impl"
11+
"github.com/DataDog/datadog-agent/pkg/util/fxutil"
12+
)
13+
14+
// Module defines the fx options for this component.
15+
func Module() fxutil.Module {
16+
return fxutil.Component(
17+
fxutil.ProvideComponentConstructor(forwarderimpl.NewComponent),
18+
)
19+
}

comp/snmptraps/forwarder/forwarderimpl/forwarder.go renamed to comp/snmptraps/forwarder/impl/forwarder.go

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -10,27 +10,18 @@ import (
1010
"context"
1111
"time"
1212

13-
"go.uber.org/fx"
14-
1513
"github.com/DataDog/datadog-agent/comp/aggregator/demultiplexer"
1614
log "github.com/DataDog/datadog-agent/comp/core/log/def"
15+
compdef "github.com/DataDog/datadog-agent/comp/def"
1716
"github.com/DataDog/datadog-agent/comp/forwarder/eventplatform"
1817
config "github.com/DataDog/datadog-agent/comp/snmptraps/config/def"
1918
formatter "github.com/DataDog/datadog-agent/comp/snmptraps/formatter/def"
20-
"github.com/DataDog/datadog-agent/comp/snmptraps/forwarder"
19+
forwarder "github.com/DataDog/datadog-agent/comp/snmptraps/forwarder/def"
2120
listener "github.com/DataDog/datadog-agent/comp/snmptraps/listener/def"
2221
"github.com/DataDog/datadog-agent/comp/snmptraps/packet"
2322
"github.com/DataDog/datadog-agent/pkg/aggregator/sender"
24-
"github.com/DataDog/datadog-agent/pkg/util/fxutil"
2523
)
2624

27-
// Module defines the fx options for this component.
28-
func Module() fxutil.Module {
29-
return fxutil.Component(
30-
fx.Provide(newTrapForwarder),
31-
)
32-
}
33-
3425
// trapForwarder consumes SNMP packets, formats traps and send them as EventPlatformEvents
3526
// The trapForwarder is an intermediate step between the listener and the epforwarder in order to limit the processing of the listener
3627
// to the minimum. The forwarder process payloads received by the listener via the trapsIn channel, formats them and finally
@@ -43,20 +34,28 @@ type trapForwarder struct {
4334
logger log.Component
4435
}
4536

46-
type dependencies struct {
47-
fx.In
37+
// Requires defines the dependencies for the forwarder component.
38+
type Requires struct {
39+
compdef.In
40+
Lc compdef.Lifecycle
4841
Config config.Component
4942
Formatter formatter.Component
5043
Demux demultiplexer.Component
5144
Listener listener.Component
5245
Logger log.Component
5346
}
5447

55-
// newTrapForwarder creates a simple TrapForwarder instance
56-
func newTrapForwarder(lc fx.Lifecycle, dep dependencies) (forwarder.Component, error) {
48+
// Provides defines the output of the forwarder component.
49+
type Provides struct {
50+
compdef.Out
51+
Comp forwarder.Component
52+
}
53+
54+
// NewComponent creates a simple TrapForwarder instance
55+
func NewComponent(dep Requires) (Provides, error) {
5756
sender, err := dep.Demux.GetDefaultSender()
5857
if err != nil {
59-
return nil, err
58+
return Provides{}, err
6059
}
6160
tf := &trapForwarder{
6261
trapsIn: dep.Listener.Packets(),
@@ -67,7 +66,7 @@ func newTrapForwarder(lc fx.Lifecycle, dep dependencies) (forwarder.Component, e
6766
}
6867
conf := dep.Config.Get()
6968
if conf.Enabled {
70-
lc.Append(fx.Hook{
69+
dep.Lc.Append(compdef.Hook{
7170
OnStart: func(_ context.Context) error {
7271
tf.Start()
7372
return nil
@@ -79,7 +78,7 @@ func newTrapForwarder(lc fx.Lifecycle, dep dependencies) (forwarder.Component, e
7978
})
8079
}
8180

82-
return tf, nil
81+
return Provides{Comp: tf}, nil
8382
}
8483

8584
// Start the TrapForwarder instance. Need to Stop it manually.

comp/snmptraps/forwarder/forwarderimpl/forwarder_test.go renamed to comp/snmptraps/forwarder/impl/forwarder_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import (
1818
configfx "github.com/DataDog/datadog-agent/comp/snmptraps/config/fx"
1919
formatter "github.com/DataDog/datadog-agent/comp/snmptraps/formatter/def"
2020
formatterfx "github.com/DataDog/datadog-agent/comp/snmptraps/formatter/fx"
21-
"github.com/DataDog/datadog-agent/comp/snmptraps/forwarder"
21+
forwarder "github.com/DataDog/datadog-agent/comp/snmptraps/forwarder/def"
2222
listener "github.com/DataDog/datadog-agent/comp/snmptraps/listener/def"
2323
listenerfx "github.com/DataDog/datadog-agent/comp/snmptraps/listener/fx"
2424
"github.com/DataDog/datadog-agent/comp/snmptraps/packet"
@@ -44,7 +44,7 @@ func setUp(t *testing.T) *services {
4444
senderhelper.Opts,
4545
formatterfx.MockModule(),
4646
listenerfx.MockModule(),
47-
Module(),
47+
fxutil.ProvideComponentConstructor(NewComponent),
4848
)
4949
return &s
5050
}

comp/snmptraps/server/impl/server.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ import (
2323
configfx "github.com/DataDog/datadog-agent/comp/snmptraps/config/fx"
2424
formatter "github.com/DataDog/datadog-agent/comp/snmptraps/formatter/def"
2525
formatterimpl "github.com/DataDog/datadog-agent/comp/snmptraps/formatter/impl"
26-
"github.com/DataDog/datadog-agent/comp/snmptraps/forwarder"
27-
"github.com/DataDog/datadog-agent/comp/snmptraps/forwarder/forwarderimpl"
26+
forwarder "github.com/DataDog/datadog-agent/comp/snmptraps/forwarder/def"
27+
forwarderimpl "github.com/DataDog/datadog-agent/comp/snmptraps/forwarder/fx"
2828
listener "github.com/DataDog/datadog-agent/comp/snmptraps/listener/def"
2929
listenerfx "github.com/DataDog/datadog-agent/comp/snmptraps/listener/fx"
3030
oidresolverfx "github.com/DataDog/datadog-agent/comp/snmptraps/oidresolver/fx"

0 commit comments

Comments
 (0)