/
node_info_decorator.go
58 lines (51 loc) · 1.96 KB
/
node_info_decorator.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
package compute
import (
"context"
"github.com/bacalhau-project/bacalhau/pkg/compute/capacity"
"github.com/bacalhau-project/bacalhau/pkg/executor"
"github.com/bacalhau-project/bacalhau/pkg/models"
"github.com/bacalhau-project/bacalhau/pkg/publisher"
"github.com/bacalhau-project/bacalhau/pkg/storage"
)
type NodeInfoDecoratorParams struct {
Executors executor.ExecutorProvider
Publisher publisher.PublisherProvider
Storages storage.StorageProvider
CapacityTracker capacity.Tracker
ExecutorBuffer *ExecutorBuffer
MaxJobRequirements models.Resources
}
type NodeInfoDecorator struct {
executors executor.ExecutorProvider
publishers publisher.PublisherProvider
storages storage.StorageProvider
capacityTracker capacity.Tracker
executorBuffer *ExecutorBuffer
maxJobRequirements models.Resources
}
func NewNodeInfoDecorator(params NodeInfoDecoratorParams) *NodeInfoDecorator {
return &NodeInfoDecorator{
executors: params.Executors,
publishers: params.Publisher,
storages: params.Storages,
capacityTracker: params.CapacityTracker,
executorBuffer: params.ExecutorBuffer,
maxJobRequirements: params.MaxJobRequirements,
}
}
func (n *NodeInfoDecorator) DecorateNodeInfo(ctx context.Context, nodeInfo models.NodeInfo) models.NodeInfo {
nodeInfo.NodeType = models.NodeTypeCompute
nodeInfo.ComputeNodeInfo = &models.ComputeNodeInfo{
ExecutionEngines: n.executors.Keys(ctx),
Publishers: n.publishers.Keys(ctx),
StorageSources: n.storages.Keys(ctx),
MaxCapacity: n.capacityTracker.GetMaxCapacity(ctx),
AvailableCapacity: n.capacityTracker.GetAvailableCapacity(ctx),
MaxJobRequirements: n.maxJobRequirements,
RunningExecutions: len(n.executorBuffer.RunningExecutions()),
EnqueuedExecutions: n.executorBuffer.EnqueuedExecutionsCount(),
}
return nodeInfo
}
// compile-time interface check
var _ models.NodeInfoDecorator = &NodeInfoDecorator{}