master
go 103 lines 2.88 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package jobmgr
4
5 import (
6 "fmt"
7
8 "github.com/netdata/netdata/go/plugins/pkg/netdataapi"
9 "github.com/netdata/netdata/go/plugins/plugin/framework/confgroup"
10 "github.com/netdata/netdata/go/plugins/plugin/framework/dyncfg"
11 )
12
13 const (
14 dyncfgCollectorPrefixf = "%s:collector:"
15 dyncfgCollectorPath = "/collectors/%s/Jobs"
16 )
17
18 func (m *Manager) dyncfgCollectorPrefixValue() string {
19 return fmt.Sprintf(dyncfgCollectorPrefixf, m.pluginName)
20 }
21
22 func (m *Manager) dyncfgModID(name string) string {
23 return fmt.Sprintf("%s%s", m.dyncfgCollectorPrefixValue(), name)
24 }
25
26 func (m *Manager) dyncfgJobID(cfg confgroup.Config) string {
27 return fmt.Sprintf("%s%s:%s", m.dyncfgCollectorPrefixValue(), cfg.Module(), cfg.Name())
28 }
29
30 func dyncfgCollectorModCmds() string {
31 return dyncfg.JoinCommands(
32 dyncfg.CommandAdd,
33 dyncfg.CommandSchema,
34 dyncfg.CommandEnable,
35 dyncfg.CommandDisable,
36 dyncfg.CommandTest,
37 dyncfg.CommandUserconfig)
38 }
39
40 func (m *Manager) dyncfgCollectorModuleCreate(name string) {
41 m.dyncfgResponder.ConfigCreate(netdataapi.ConfigOpts{
42 ID: m.dyncfgModID(name),
43 Status: dyncfg.StatusAccepted.String(),
44 ConfigType: dyncfg.ConfigTypeTemplate.String(),
45 Path: fmt.Sprintf(dyncfgCollectorPath, m.pluginName),
46 SourceType: "internal",
47 Source: "internal",
48 SupportedCommands: dyncfgCollectorModCmds(),
49 })
50 }
51
52 // exposedLookupByName looks up an exposed config by module + job name.
53 func (m *Manager) exposedLookupByName(module, job string) (*dyncfg.Entry[confgroup.Config], bool) {
54 key := module + "_" + job
55 if module == job {
56 key = job
57 }
58 return m.collectorExposed.LookupByKey(key)
59 }
60
61 func (m *Manager) dyncfgCollectorExec(fn dyncfg.Function) {
62 switch fn.Command() {
63 case dyncfg.CommandUserconfig:
64 m.dyncfgCmdUserconfig(fn)
65 return
66 case dyncfg.CommandSchema:
67 m.dyncfgCmdSchema(fn)
68 return
69 }
70 m.enqueueDyncfgFunction(fn)
71 }
72
73 func (m *Manager) dyncfgCollectorSeqExec(fn dyncfg.Function) {
74 cmd := fn.Command()
75 m.collectorHandler.SyncDecision(fn)
76
77 switch cmd {
78 case dyncfg.CommandAdd:
79 m.collectorHandler.CmdAdd(fn)
80 m.syncSecretStoreDepsByFunction(fn)
81 case dyncfg.CommandUpdate:
82 m.collectorHandler.CmdUpdate(fn)
83 m.syncSecretStoreDepsByFunction(fn)
84 case dyncfg.CommandEnable:
85 m.collectorHandler.CmdEnable(fn)
86 case dyncfg.CommandDisable:
87 m.collectorHandler.CmdDisable(fn)
88 case dyncfg.CommandRemove:
89 m.collectorHandler.CmdRemove(fn)
90 m.syncSecretStoreDepsByFunction(fn)
91 case dyncfg.CommandRestart:
92 m.collectorHandler.CmdRestart(fn)
93 case dyncfg.CommandTest:
94 m.dyncfgCmdTest(fn)
95 case dyncfg.CommandSchema:
96 m.dyncfgCmdSchema(fn)
97 case dyncfg.CommandGet:
98 m.dyncfgCmdGet(fn)
99 default:
100 m.Warningf("dyncfg: function '%s' command '%s' not implemented", fn.Fn().Name, cmd)
101 m.dyncfgResponder.SendCodef(fn, 501, "Function '%s' command '%s' is not implemented.", fn.Fn().Name, cmd)
102 }
103 }