@@ -15,6 +15,7 @@ import (
1515 "github.com/nginx/agent/sdk/v2/proto"
1616 models "github.com/nginx/agent/sdk/v2/proto/events"
1717 "github.com/nginx/agent/v2/src/core"
18+ "github.com/nginx/agent/v2/src/core/config"
1819 "strings"
1920 "sync"
2021
@@ -29,13 +30,15 @@ type MetricsSender struct {
2930 started * atomic.Bool
3031 readyToSend * atomic.Bool
3132 readyToSendMu sync.RWMutex
33+ conf * config.Config
3234}
3335
34- func NewMetricsSender (reporter client.MetricReporter ) * MetricsSender {
36+ func NewMetricsSender (reporter client.MetricReporter , config * config. Config ) * MetricsSender {
3537 return & MetricsSender {
3638 reporter : reporter ,
3739 started : atomic .NewBool (false ),
3840 readyToSend : atomic .NewBool (false ),
41+ conf : config ,
3942 }
4043}
4144
@@ -62,13 +65,17 @@ func (r *MetricsSender) Info() *core.Info {
6265}
6366
6467func (r * MetricsSender ) Process (msg * core.Message ) {
65- //if msg.Exact(core.AgentConnected) {
66- // log.Debugf("MetricsSender AgentConnected Before: %v", r.readyToSend)
67- // r.readyToSend.Store(true)
68- // log.Debugf("MetricsSender AgentConnected After %v", r.readyToSend)
69- // return
70- //}
71-
68+ if msg .Exact (core .AgentConnected ) {
69+ if r .conf .Features != nil && r .isFeatureEnabled (r .conf .Features ) {
70+ r .readyToSendMu .Lock ()
71+ r .readyToSend .Store (true )
72+ r .readyToSendMu .Unlock ()
73+ } else {
74+ r .readyToSendMu .Lock ()
75+ r .readyToSend .Store (false )
76+ r .readyToSendMu .Unlock ()
77+ }
78+ }
7279 if msg .Exact (core .CommMetrics ) {
7380 payloads , ok := msg .Data ().([]core.Payload )
7481 if ! ok {
@@ -107,9 +114,9 @@ func (r *MetricsSender) Process(msg *core.Message) {
107114 }
108115 }
109116 } else if msg .Exact (core .AgentConfigChanged ) {
110- switch config := msg .Data ().(type ) {
117+ switch agentConfig := msg .Data ().(type ) {
111118 case * proto.AgentConfig :
112- r .metricSenderBackoff (config )
119+ r .metricSenderBackoff (agentConfig )
113120 default :
114121 log .Warnf ("metrics sender expected %T type, but got: %T" , & proto.AgentConfig {}, msg .Data ())
115122 }
@@ -119,7 +126,7 @@ func (r *MetricsSender) Process(msg *core.Message) {
119126func (r * MetricsSender ) metricSenderBackoff (agentConfig * proto.AgentConfig ) {
120127 log .Debugf ("update metric reporter client configuration to %+v" , agentConfig )
121128 if agentConfig .Details .Features != nil {
122- if r .isFeatureEnabled (agentConfig ) {
129+ if r .isFeatureEnabled (agentConfig . Details . Features ) {
123130 r .readyToSendMu .Lock ()
124131 r .readyToSend .Store (true )
125132 r .readyToSendMu .Unlock ()
@@ -142,10 +149,10 @@ func (r *MetricsSender) Subscriptions() []string {
142149 return []string {core .CommMetrics , core .AgentConnected , core .AgentConfigChanged }
143150}
144151
145- func (r * MetricsSender ) isFeatureEnabled (agentConfig * proto. AgentConfig ) bool {
152+ func (r * MetricsSender ) isFeatureEnabled (features [] string ) bool {
146153 var isFeatureEnabled bool
147- if agentConfig . Details . Features != nil {
148- for _ , feature := range agentConfig . Details . Features {
154+ if features != nil {
155+ for _ , feature := range features {
149156 if feature == agent_config .FeatureMetricsSender {
150157 isFeatureEnabled = true
151158 break
0 commit comments