@@ -17,7 +17,6 @@ import (
1717)
1818
1919const defaultTenant string = "ce66672c-e36d-4761-a8c8-90058fee1a24"
20- const delayCheckConfig = 30 * time .Second
2120
2221type GroupModule struct {
2322 GroupName string
@@ -140,25 +139,73 @@ func startGroupModuleManager() {
140139}
141140
142141func (m * GroupModuleManager ) SyncConfigs () {
143- ticker := time .NewTicker (delayCheckConfig )
144- defer ticker .Stop ()
142+ time .Sleep (3 * time .Second )
145143
146- for range ticker .C {
147- if err := ConnectionChecker (CHECKCON ); err != nil {
148- _ = catcher .Error ("External connection failure detected" , err , map [string ]any {"process" : "plugin_com.utmstack.gcp" })
144+ m .handleConfigUpdate (config .GetConfig ())
145+
146+ for newConfig := range config .GetConfigUpdateChannel () {
147+ catcher .Info ("Received config update" , map [string ]any {
148+ "moduleActive" : newConfig != nil && newConfig .ModuleActive ,
149+ "process" : "plugin_com.utmstack.gcp" ,
150+ })
151+ m .handleConfigUpdate (newConfig )
152+ }
153+ }
154+
155+ func (m * GroupModuleManager ) handleConfigUpdate (moduleConfig * config.ConfigurationSection ) {
156+ if err := ConnectionChecker (CHECKCON ); err != nil {
157+ _ = catcher .Error ("External connection failure detected" , err , map [string ]any {"process" : "plugin_com.utmstack.gcp" })
158+ }
159+
160+ if moduleConfig == nil || ! moduleConfig .ModuleActive {
161+ for groupID , group := range m .Groups {
162+ catcher .Info ("Cancelling group" , map [string ]any {
163+ "process" : "plugin_com.utmstack.gcp" ,
164+ })
165+ group .Cancel ()
166+ delete (m .Groups , groupID )
149167 }
168+ return
169+ }
150170
151- moduleConfig := config .GetConfig ()
152- if moduleConfig != nil && moduleConfig .ModuleActive {
153- for _ , conf := range moduleConfig .ModuleGroups {
154- m .Groups [conf .Id ] = getModuleConfig (conf )
155- group := m .Groups [conf .Id ]
156- go group .PullLogs ()
171+ currentGroupIDs := make (map [int32 ]bool )
172+ for _ , conf := range moduleConfig .ModuleGroups {
173+ currentGroupIDs [conf .Id ] = true
174+
175+ if existing , ok := m .Groups [conf .Id ]; ok {
176+ newModule := getModuleConfig (conf )
177+ if configChanged (existing , newModule ) {
178+ catcher .Info ("Configuration changed for group, restarting" , map [string ]any {
179+ "process" : "plugin_com.utmstack.gcp" ,
180+ })
181+ existing .Cancel ()
182+ delete (m .Groups , conf .Id )
183+ m .Groups [conf .Id ] = newModule
184+ go newModule .PullLogs ()
157185 }
158186 } else {
159- for _ , cnf := range m .Groups {
160- cnf .Cancel ()
161- }
187+ catcher .Info ("Starting new group" , map [string ]any {
188+ "process" : "plugin_com.utmstack.gcp" ,
189+ })
190+ m .Groups [conf .Id ] = getModuleConfig (conf )
191+ group := m .Groups [conf .Id ]
192+ go group .PullLogs ()
162193 }
163194 }
195+
196+ for groupID , group := range m .Groups {
197+ if ! currentGroupIDs [groupID ] {
198+ catcher .Info ("Group removed, stopping" , map [string ]any {
199+ "process" : "plugin_com.utmstack.gcp" ,
200+ })
201+ group .Cancel ()
202+ delete (m .Groups , groupID )
203+ }
204+ }
205+ }
206+
207+ func configChanged (old , new GroupModule ) bool {
208+ return old .JsonKey != new .JsonKey ||
209+ old .ProjectID != new .ProjectID ||
210+ old .SubscriptionID != new .SubscriptionID
164211}
0 commit comments