/
nodeproxy.go
113 lines (86 loc) · 2.54 KB
/
nodeproxy.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
package nexnode
import (
"log/slog"
"github.com/nats-io/nats-server/v2/server"
"github.com/nats-io/nats.go"
"github.com/synadia-io/nex/internal/models"
"github.com/synadia-io/nex/internal/node/observability"
"github.com/synadia-io/nex/internal/node/processmanager"
)
// Use this proxy object with extreme care, as it exposes
// the private/internal bits of a node instance to callers.
// It was created only as a way to make writing specs work
// and should not be used for any other purpose!
type NodeProxy struct {
n *Node
}
func NewNodeProxyWith(node *Node) *NodeProxy {
return &NodeProxy{n: node}
}
func (n *NodeProxy) APIListener() *ApiListener {
return n.n.api
}
func (n *NodeProxy) WorkloadManager() *WorkloadManager {
return n.n.manager
}
func (n *NodeProxy) Log() *slog.Logger {
return n.n.log
}
func (n *NodeProxy) NodeConfiguration() *models.NodeConfiguration {
return n.n.config
}
func (n *NodeProxy) InternalNATS() *server.Server {
return n.n.natsint
}
func (n *NodeProxy) InternalNATSConn() *nats.Conn {
return n.n.ncint
}
func (n *NodeProxy) Telemetry() *observability.Telemetry {
return n.n.telemetry
}
type WorkloadManagerProxy struct {
m *WorkloadManager
}
func NewWorkloadManagerProxyWith(manager *WorkloadManager) *WorkloadManagerProxy {
return &WorkloadManagerProxy{m: manager}
}
func (m *WorkloadManagerProxy) Log() *slog.Logger {
return m.m.log
}
func (m *WorkloadManagerProxy) NodeConfiguration() *models.NodeConfiguration {
return m.m.config
}
func (m *WorkloadManagerProxy) InternalNATSConn() *nats.Conn {
return m.m.ncInternal
}
func (m *WorkloadManagerProxy) Telemetry() *observability.Telemetry {
return m.m.t
}
func (w *WorkloadManagerProxy) AllAgents() map[string]*processmanager.ProcessInfo {
agentsmap := make(map[string]*processmanager.ProcessInfo)
for _, agent := range w.Agents() {
agentsmap[agent.ID] = agent
}
for _, agent := range w.PoolAgents() {
agentsmap[agent.ID] = agent
}
return agentsmap
}
func (w *WorkloadManagerProxy) Agents() map[string]*processmanager.ProcessInfo {
agentsmap := make(map[string]*processmanager.ProcessInfo)
agents, _ := w.m.procMan.ListProcesses()
for _, agent := range agents {
agentsmap[agent.ID] = &agent
}
return agentsmap
}
func (w *WorkloadManagerProxy) PoolAgents() map[string]*processmanager.ProcessInfo {
// FIXME-- this is no longer exposed
return map[string]*processmanager.ProcessInfo{}
}
type AgentProxy struct {
agent *processmanager.ProcessInfo
}
func NewAgentProxyWith(agent *processmanager.ProcessInfo) *AgentProxy {
return &AgentProxy{agent: agent}
}