-
Notifications
You must be signed in to change notification settings - Fork 85
/
node_info_provider.go
66 lines (54 loc) · 1.87 KB
/
node_info_provider.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
package routing
import (
"context"
"github.com/bacalhau-project/bacalhau/pkg/models"
)
type NodeInfoProviderParams struct {
NodeID string
LabelsProvider models.LabelsProvider
BacalhauVersion models.BuildVersionInfo
DefaultNodeApproval models.NodeApproval
}
type NodeInfoProvider struct {
nodeID string
labelsProvider models.LabelsProvider
bacalhauVersion models.BuildVersionInfo
nodeInfoDecorators []models.NodeInfoDecorator
defaultNodeApproval models.NodeApproval
}
func NewNodeInfoProvider(params NodeInfoProviderParams) *NodeInfoProvider {
provider := &NodeInfoProvider{
nodeID: params.NodeID,
labelsProvider: params.LabelsProvider,
bacalhauVersion: params.BacalhauVersion,
nodeInfoDecorators: make([]models.NodeInfoDecorator, 0),
defaultNodeApproval: params.DefaultNodeApproval,
}
// If we were not given a default approval, we default to PENDING
if !provider.defaultNodeApproval.IsValid() {
provider.defaultNodeApproval = models.NodeApprovals.PENDING
}
return provider
}
// RegisterNodeInfoDecorator registers a node info decorator with the node info provider.
func (n *NodeInfoProvider) RegisterNodeInfoDecorator(decorator models.NodeInfoDecorator) {
n.nodeInfoDecorators = append(n.nodeInfoDecorators, decorator)
}
func (n *NodeInfoProvider) GetNodeInfo(ctx context.Context) models.NodeInfo {
res := models.NodeInfo{
NodeID: n.nodeID,
BacalhauVersion: n.bacalhauVersion,
Labels: n.labelsProvider.GetLabels(ctx),
NodeType: models.NodeTypeRequester,
Approval: n.defaultNodeApproval,
}
for _, decorator := range n.nodeInfoDecorators {
res = decorator.DecorateNodeInfo(ctx, res)
}
if !res.Approval.IsValid() {
res.Approval = models.NodeApprovals.PENDING
}
return res
}
// compile-time interface check
var _ models.NodeInfoProvider = &NodeInfoProvider{}