Skip to content

Commit

Permalink
only config_id
Browse files Browse the repository at this point in the history
  • Loading branch information
AlexandreYang committed Jan 29, 2025
1 parent 06675bd commit 359607d
Show file tree
Hide file tree
Showing 9 changed files with 39 additions and 89 deletions.
20 changes: 4 additions & 16 deletions comp/haagent/impl/haagent.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,28 +11,23 @@ import (

log "github.com/DataDog/datadog-agent/comp/core/log/def"
haagent "github.com/DataDog/datadog-agent/comp/haagent/def"
"github.com/DataDog/datadog-agent/comp/metadata/inventoryagent"
"github.com/DataDog/datadog-agent/pkg/remoteconfig/state"
"github.com/DataDog/datadog-agent/pkg/util/hostname"
"go.uber.org/atomic"
)

type haAgentImpl struct {
log log.Component
inventoryAgent inventoryagent.Component
haAgentConfigs *haAgentConfigs
state *atomic.String
}

func newHaAgentImpl(log log.Component, inventoryAgent inventoryagent.Component, haAgentConfigs *haAgentConfigs) *haAgentImpl {
haagentImpl := &haAgentImpl{
func newHaAgentImpl(log log.Component, haAgentConfigs *haAgentConfigs) *haAgentImpl {
return &haAgentImpl{
log: log,
inventoryAgent: inventoryAgent,
haAgentConfigs: haAgentConfigs,
state: atomic.NewString(string(haagent.Unknown)),
}
haagentImpl.setState(haagent.Unknown)
return haagentImpl
}

func (h *haAgentImpl) Enabled() bool {
Expand Down Expand Up @@ -65,21 +60,14 @@ func (h *haAgentImpl) SetLeader(leaderAgentHostname string) {

if newState != prevState {
h.log.Infof("agent state switched from %s to %s", prevState, newState)
h.setState(newState)
h.state.Store(string(newState))
} else {
h.log.Debugf("agent state not changed (current state: %s)", prevState)
}
}

func (h *haAgentImpl) setState(newState haagent.State) {
h.state.Store(string(newState))

// Set ha_agent_state Agent Metadata
h.inventoryAgent.Set("ha_agent_state", string(newState))
}

func (h *haAgentImpl) resetAgentState() {
h.setState(haagent.Unknown)
h.state.Store(string(haagent.Unknown))
}

// ShouldRunIntegration return true if the agent integrations should to run.
Expand Down
12 changes: 3 additions & 9 deletions comp/haagent/impl/haagent_comp.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,14 @@ import (
"github.com/DataDog/datadog-agent/comp/core/config"
log "github.com/DataDog/datadog-agent/comp/core/log/def"
haagent "github.com/DataDog/datadog-agent/comp/haagent/def"
"github.com/DataDog/datadog-agent/comp/metadata/inventoryagent"
rctypes "github.com/DataDog/datadog-agent/comp/remote-config/rcclient/types"
"github.com/DataDog/datadog-agent/pkg/remoteconfig/state"
)

// Requires defines the dependencies for the haagent component
type Requires struct {
Logger log.Component
AgentConfig config.Component
InventoryAgent inventoryagent.Component
Logger log.Component
AgentConfig config.Component
}

// Provides defines the output of the haagent component
Expand All @@ -31,11 +29,7 @@ type Provides struct {
// NewComponent creates a new haagent component
func NewComponent(reqs Requires) (Provides, error) {
haAgentConf := newHaAgentConfigs(reqs.AgentConfig)
haAgent := newHaAgentImpl(reqs.Logger, reqs.InventoryAgent, haAgentConf)

// Set ha_agent_enabled Agent Metadata
reqs.InventoryAgent.Set("ha_agent_enabled", haAgent.Enabled())

haAgent := newHaAgentImpl(reqs.Logger, haAgentConf)
var rcListener rctypes.ListenerProvider
if haAgent.Enabled() {
reqs.Logger.Debug("Add HA Agent RCListener")
Expand Down
36 changes: 17 additions & 19 deletions comp/haagent/impl/haagent_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,14 @@ package haagentimpl
import (
"testing"

"github.com/DataDog/datadog-agent/comp/core/config"
logmock "github.com/DataDog/datadog-agent/comp/core/log/mock"
haagent "github.com/DataDog/datadog-agent/comp/haagent/def"
"github.com/DataDog/datadog-agent/pkg/remoteconfig/state"
"github.com/DataDog/datadog-agent/pkg/util/fxutil"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.uber.org/fx"
)

var testRCConfigID = "datadog/2/HA_AGENT/config-62345762794c0c0b/65f17d667fb50f8ae28a3c858bdb1be9ea994f20249c119e007c520ac115c807"
Expand All @@ -26,28 +30,22 @@ func Test_Enabled(t *testing.T) {
{
name: "enabled",
configs: map[string]interface{}{
"enable_metadata_collection": true,
"inventories_enabled": true,
"ha_agent.enabled": true,
"ha_agent.enabled": true,
},
expectedEnabled: true,
},
{
name: "disabled",
configs: map[string]interface{}{
"enable_metadata_collection": true,
"inventories_enabled": true,
"ha_agent.enabled": false,
"ha_agent.enabled": false,
},
expectedEnabled: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
provides, deps := newTestHaAgentComponent(t, tt.configs)
haAgent := provides.Comp
haAgent := newTestHaAgentComponent(t, tt.configs).Comp
assert.Equal(t, tt.expectedEnabled, haAgent.Enabled())
assert.Equal(t, tt.expectedEnabled, deps.InventoryAgent.Get()["ha_agent_enabled"])
})
}
}
Expand All @@ -56,17 +54,15 @@ func Test_GetConfigID(t *testing.T) {
agentConfigs := map[string]interface{}{
"config_id": "my-configID-01",
}
provides, _ := newTestHaAgentComponent(t, agentConfigs)
haAgent := provides.Comp
haAgent := newTestHaAgentComponent(t, agentConfigs).Comp
assert.Equal(t, "my-configID-01", haAgent.GetConfigID())
}

func Test_GetState(t *testing.T) {
agentConfigs := map[string]interface{}{
"hostname": "my-agent-hostname",
}
provides, _ := newTestHaAgentComponent(t, agentConfigs)
haAgent := provides.Comp
haAgent := newTestHaAgentComponent(t, agentConfigs).Comp

assert.Equal(t, haagent.Unknown, haAgent.GetState())

Expand Down Expand Up @@ -100,7 +96,7 @@ func Test_RCListener(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
provides, _ := newTestHaAgentComponent(t, tt.configs)
provides := newTestHaAgentComponent(t, tt.configs)
if tt.expectRCListener {
assert.NotNil(t, provides.RCListener.ListenerProvider)
} else {
Expand Down Expand Up @@ -185,9 +181,12 @@ func Test_haAgentImpl_onHaAgentUpdate(t *testing.T) {
"ha_agent.enabled": true,
"config_id": testConfigID,
}
agentConfigComponent := fxutil.Test[config.Component](t, fx.Options(
config.MockModule(),
fx.Replace(config.MockParams{Overrides: agentConfigs}),
))

provides, deps := newTestHaAgentComponent(t, agentConfigs)
h := provides.Comp.(*haAgentImpl)
h := newHaAgentImpl(logmock.New(t), newHaAgentConfigs(agentConfigComponent))

if tt.initialState != "" {
h.state.Store(string(tt.initialState))
Expand All @@ -203,7 +202,6 @@ func Test_haAgentImpl_onHaAgentUpdate(t *testing.T) {
assert.Equal(t, tt.expectedApplyID, applyID)
assert.Equal(t, tt.expectedApplyStatus, applyStatus)
assert.Equal(t, tt.expectedAgentState, h.GetState())
assert.Equal(t, deps.InventoryAgent.Get()["ha_agent_state"], string(h.GetState()))
})
}
}
Expand Down Expand Up @@ -275,7 +273,7 @@ func Test_haAgentImpl_ShouldRunIntegration(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
haAgent, _ := newTestHaAgentComponent(t, tt.agentConfigs)
haAgent := newTestHaAgentComponent(t, tt.agentConfigs)
haAgent.Comp.SetLeader(tt.leader)

for integrationName, shouldRun := range tt.expectShouldRunIntegration {
Expand All @@ -287,7 +285,7 @@ func Test_haAgentImpl_ShouldRunIntegration(t *testing.T) {

func Test_haAgentImpl_resetAgentState(t *testing.T) {
// GIVEN
haAgent, _ := newTestHaAgentComponent(t, nil)
haAgent := newTestHaAgentComponent(t, nil)
haAgentComp := haAgent.Comp.(*haAgentImpl)
haAgentComp.state.Store(string(haagent.Active))
require.Equal(t, haagent.Active, haAgentComp.GetState())
Expand Down
34 changes: 8 additions & 26 deletions comp/haagent/impl/haagent_testutils_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,43 +9,25 @@ import (
"testing"

"github.com/DataDog/datadog-agent/comp/core/config"
configComponent "github.com/DataDog/datadog-agent/comp/core/config"
"github.com/DataDog/datadog-agent/comp/core/hostname/hostnameimpl"
log "github.com/DataDog/datadog-agent/comp/core/log/def"
logmock "github.com/DataDog/datadog-agent/comp/core/log/mock"
"github.com/DataDog/datadog-agent/comp/metadata/inventoryagent"
"github.com/DataDog/datadog-agent/comp/metadata/inventoryagent/inventoryagentimpl"
"github.com/DataDog/datadog-agent/pkg/util/fxutil"
"github.com/stretchr/testify/require"
"go.uber.org/fx"
)

type testDeps struct {
fx.In

Config config.Component
Log log.Component
InventoryAgent inventoryagent.Component
}

func newTestHaAgentComponent(t *testing.T, agentConfigs map[string]interface{}) (Provides, testDeps) {
deps := fxutil.Test[testDeps](t, fx.Options(
fx.Supply(configComponent.Params{}),
fx.Supply(log.Params{}),
fx.Provide(func() log.Component { return logmock.New(t) }),
configComponent.MockModule(),
hostnameimpl.MockModule(),
fx.Replace(configComponent.MockParams{Overrides: agentConfigs}),
inventoryagentimpl.MockModule(),
func newTestHaAgentComponent(t *testing.T, agentConfigs map[string]interface{}) Provides {
logComponent := logmock.New(t)
agentConfigComponent := fxutil.Test[config.Component](t, fx.Options(
config.MockModule(),
fx.Replace(config.MockParams{Overrides: agentConfigs}),
))

requires := Requires{
Logger: deps.Log,
AgentConfig: deps.Config,
InventoryAgent: deps.InventoryAgent,
Logger: logComponent,
AgentConfig: agentConfigComponent,
}

provides, err := NewComponent(requires)
require.NoError(t, err)
return provides, deps
return provides
}
2 changes: 1 addition & 1 deletion comp/haagent/mock/mock.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ func (m *mockHaAgent) Enabled() bool {
func (m *mockHaAgent) SetLeader(_ string) {
}

func (m *mockHaAgent) GetState() haagent.State { return m.state }
func (m *mockHaAgent) GetState() haagent.State { return haagent.Standby }

func (m *mockHaAgent) SetConfigID(configID string) {
m.configID = configID
Expand Down
2 changes: 0 additions & 2 deletions comp/metadata/bundle_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ import (
authtokenimpl "github.com/DataDog/datadog-agent/comp/api/authtoken/fetchonlyimpl"
"github.com/DataDog/datadog-agent/comp/collector/collector/collectorimpl"
"github.com/DataDog/datadog-agent/comp/core"
haagentmock "github.com/DataDog/datadog-agent/comp/haagent/mock"
"github.com/DataDog/datadog-agent/comp/logs/agent"
"github.com/DataDog/datadog-agent/comp/metadata/runner/runnerimpl"
"github.com/DataDog/datadog-agent/pkg/serializer"
Expand All @@ -30,7 +29,6 @@ func TestBundleDependencies(t *testing.T) {
return option.None[agent.Component]()
}),
authtokenimpl.Module(),
haagentmock.Module(),
)
}

Expand Down
6 changes: 1 addition & 5 deletions comp/metadata/inventoryagent/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -125,8 +125,6 @@ The payload is a JSON dict with the following fields
- `ecs_fargate_cluster_name` - **string**: if the Agent runs in ECS Fargate, contains the Agent's cluster name. Else, is empty.
- `fleet_policies_applied` -- **array of string**: The Fleet Policies that have been applied to the agent, if any. Is empty if no policy is applied.
- `config_id` -- **string**: the Fleet Config ID, the configuration value `config_id`.
- `ha_agent_enabled` -- **bool**: true if HA Agent is enabled (see: `ha_agent.enabled` config option).
- `ha_agent_state` -- **string**: if HA Agent is enabled, contains the HA Agent state.

("scrubbed" indicates that secrets are removed from the field value just as they are in logs)

Expand Down Expand Up @@ -171,9 +169,7 @@ Here an example of an inventory payload:
"remote_configuration": "log_level: \"debug\"",
"cli_configuration": "log_level: \"warn\"",
"source_local_configuration": "",
"config_id": "my-config",
"ha_agent_enabled": true",
"ha_agent_state": "active"
"config_id": "my-config"
}
"hostname": "my-host",
"timestamp": 1631281754507358895
Expand Down
14 changes: 4 additions & 10 deletions comp/metadata/inventoryagent/inventoryagentimpl/mock.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,23 +33,17 @@ type MockProvides struct {
Comp iainterface.Component
}

type inventoryagentMock struct {
data agentMetadata
}
type inventoryagentMock struct{}

func newMock() MockProvides {
ia := &inventoryagentMock{
data: make(agentMetadata),
}
ia := &inventoryagentMock{}
return MockProvides{
Comp: ia,
}
}

// Set is an empty function on this mock
func (m *inventoryagentMock) Set(key string, val interface{}) {
m.data[key] = val
}
func (m *inventoryagentMock) Set(string, interface{}) {}

// GetAsJSON is a mocked function
func (m *inventoryagentMock) GetAsJSON() ([]byte, error) {
Expand All @@ -58,7 +52,7 @@ func (m *inventoryagentMock) GetAsJSON() ([]byte, error) {

// Get is a mocked function
func (m *inventoryagentMock) Get() map[string]interface{} {
return m.data
return nil
}

// Refresh is a mocked function
Expand Down
2 changes: 1 addition & 1 deletion pkg/aggregator/aggregator_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -313,7 +313,7 @@ func TestDefaultSeries(t *testing.T) {
}, &metrics.Serie{
Name: fmt.Sprintf("datadog.%s.ha_agent.running", agg.agentName),
Points: []metrics.Point{{Value: float64(1), Ts: float64(start.Unix())}},
Tags: tagset.CompositeTagsFromSlice([]string{"agent_state:active"}),
Tags: tagset.CompositeTagsFromSlice([]string{"agent_state:standby"}),
Host: agg.hostname,
MType: metrics.APIGaugeType,
SourceTypeName: "System",
Expand Down

0 comments on commit 359607d

Please sign in to comment.