improvement(go.d dyncfg): add user to source (#19666)
Ilya Mashchenko committed
Feb 18, 2025 at 11:42 UTC
964fe16073a8203611b897cc5c4b96878d05c515
3 files changed
+29
-11
src/go/plugin/go.d/agent/jobmgr/dyncfg.go
+10
@@ -75,3 +75,13 @@ func unmarshalPayload(dst any, fn functions.Function) error {
75
}
76
return yaml.Unmarshal(fn.Payload, dst)
77
}
78
+
79
+func getFnSourceValue(fn functions.Function, key string) string {
80
+ prefix := key + "="
81
+ for _, part := range strings.Split(fn.Source, ",") {
82
+ if v, ok := strings.CutPrefix(part, prefix); ok {
83
+ return strings.TrimSpace(v)
84
+ }
85
+ }
86
+ return ""
87
+}
src/go/plugin/go.d/agent/jobmgr/dyncfg_collector.go
+8
-4
@@ -533,7 +533,7 @@ func (m *Manager) dyncfgConfigAdd(fn functions.Function) {
533
return
534
}
535
536
- m.dyncfgSetConfigMeta(cfg, mn, jn)
536
+ m.dyncfgSetConfigMeta(cfg, mn, jn, fn)
537
538
if _, err := m.createCollectorJob(cfg); err != nil {
539
m.Warningf("dyncfg: add: module %s job %s: failed to apply config: %v", mn, jn, err)
@@ -614,7 +614,7 @@ func (m *Manager) dyncfgConfigUpdate(fn functions.Function) {
614
return
615
}
616
617
- m.dyncfgSetConfigMeta(cfg, mn, jn)
617
+ m.dyncfgSetConfigMeta(cfg, mn, jn, fn)
618
619
if ecfg.status == dyncfgRunning && ecfg.cfg.UID() == cfg.UID() {
620
m.dyncfgRespf(fn, 200, "")
@@ -680,9 +680,13 @@ func (m *Manager) dyncfgConfigUpdate(fn functions.Function) {
680
m.dyncfgJobStatus(scfg.cfg, scfg.status)
681
}
682
683
-func (m *Manager) dyncfgSetConfigMeta(cfg confgroup.Config, module, name string) {
683
+func (m *Manager) dyncfgSetConfigMeta(cfg confgroup.Config, module, name string, fn functions.Function) {
684
+ src := fmt.Sprintf("type=dyncfg,module=%s,job=%s", module, name)
685
+ if v := getFnSourceValue(fn, "user"); v != "" {
686
+ src += fmt.Sprintf(", user=%s", v)
687
+ }
688
cfg.SetProvider("dyncfg")
685
- cfg.SetSource(fmt.Sprintf("type=dyncfg,module=%s,job=%s", module, name))
689
+ cfg.SetSource(src)
690
cfg.SetSourceType("dyncfg")
691
cfg.SetModule(module)
692
cfg.SetName(name)
src/go/plugin/go.d/agent/jobmgr/dyncfg_vnode.go
+11
-7
@@ -139,7 +139,7 @@ func (m *Manager) dyncfgVnodeAdd(fn functions.Function) {
139
return
140
}
141
142
- dyncfgUpdateVnodeConfig(cfg, name)
142
+ dyncfgUpdateVnodeConfig(cfg, name, fn)
143
144
if err := m.verifyVnodeUnique(cfg); err != nil {
145
m.Warningf("dyncfg: add: vnode job %s: %v", name, err)
@@ -213,7 +213,7 @@ func (m *Manager) dyncfgVnodeTest(fn functions.Function) {
213
return
214
}
215
216
- dyncfgUpdateVnodeConfig(cfg, name)
216
+ dyncfgUpdateVnodeConfig(cfg, name, fn)
217
218
if err := m.verifyVnodeUnique(cfg); err != nil {
219
m.Warningf("dyncfg: test: vnode job %s: %v", name, err)
@@ -252,7 +252,7 @@ func (m *Manager) dyncfgVnodeUpdate(fn functions.Function) {
252
return
253
}
254
255
- dyncfgUpdateVnodeConfig(cfg, name)
255
+ dyncfgUpdateVnodeConfig(cfg, name, fn)
256
257
if orig.Equal(cfg) {
258
m.dyncfgRespf(fn, 202, "")
@@ -309,13 +309,17 @@ func (m *Manager) verifyVnodeUnique(newCfg *vnodes.VirtualNode) error {
309
return nil
310
}
311
312
-func dyncfgUpdateVnodeConfig(cfg *vnodes.VirtualNode, name string) {
312
+func dyncfgUpdateVnodeConfig(cfg *vnodes.VirtualNode, name string, fn functions.Function) {
313
+ cfg.SourceType = confgroup.TypeDyncfg
314
+ src := "type=dyncfg"
315
+ if v := getFnSourceValue(fn, "user"); v != "" {
316
+ src += fmt.Sprintf(", user=%s", v)
317
+ }
318
+ cfg.Source = src
319
cfg.Name = name
320
if cfg.Hostname == "" {
321
cfg.Hostname = name
322
}
317
- cfg.SourceType = confgroup.TypeDyncfg
318
- cfg.Source = "type=dyncfg"
323
}
324
325
func vnodeConfigFromPayload(fn functions.Function) (*vnodes.VirtualNode, error) {
@@ -339,7 +343,7 @@ func vnodeUserconfigFromPayload(fn functions.Function) ([]byte, error) {
343
name = fn.Args[2]
344
}
345
342
- dyncfgUpdateVnodeConfig(cfg, name)
346
+ dyncfgUpdateVnodeConfig(cfg, name, fn)
347
348
bs, err := yaml.Marshal([]any{cfg})
349
if err != nil {