github.com/filecoin-project/bacalhau@v0.3.23-0.20230228154132-45c989550ace/pkg/compute/capacity/calculators.go (about)

     1  package capacity
     2  
     3  import (
     4  	"context"
     5  
     6  	"github.com/filecoin-project/bacalhau/pkg/model"
     7  )
     8  
     9  type DefaultsUsageCalculatorParams struct {
    10  	Defaults model.ResourceUsageData
    11  }
    12  
    13  type DefaultsUsageCalculator struct {
    14  	defaults model.ResourceUsageData
    15  }
    16  
    17  func NewDefaultsUsageCalculator(params DefaultsUsageCalculatorParams) *DefaultsUsageCalculator {
    18  	return &DefaultsUsageCalculator{
    19  		defaults: params.Defaults,
    20  	}
    21  }
    22  
    23  func (c *DefaultsUsageCalculator) Calculate(
    24  	ctx context.Context, job model.Job, parsedUsage model.ResourceUsageData) (model.ResourceUsageData, error) {
    25  	return parsedUsage.Intersect(c.defaults), nil
    26  }
    27  
    28  type ChainedUsageCalculatorParams struct {
    29  	Calculators []UsageCalculator
    30  }
    31  
    32  type ChainedUsageCalculator struct {
    33  	calculators []UsageCalculator
    34  }
    35  
    36  func NewChainedUsageCalculator(params ChainedUsageCalculatorParams) *ChainedUsageCalculator {
    37  	return &ChainedUsageCalculator{
    38  		calculators: params.Calculators,
    39  	}
    40  }
    41  
    42  func (c *ChainedUsageCalculator) Calculate(
    43  	ctx context.Context, job model.Job, parsedUsage model.ResourceUsageData) (model.ResourceUsageData, error) {
    44  	aggregatedUsage := parsedUsage
    45  	for _, calculator := range c.calculators {
    46  		calculatedUsage, err := calculator.Calculate(ctx, job, parsedUsage)
    47  		if err != nil {
    48  			return model.ResourceUsageData{}, err
    49  		}
    50  		aggregatedUsage = aggregatedUsage.Max(calculatedUsage)
    51  	}
    52  	return aggregatedUsage, nil
    53  }
    54  
    55  // Compile-time check to ensure UsageCalculator interface implementation
    56  var _ UsageCalculator = (*DefaultsUsageCalculator)(nil)
    57  var _ UsageCalculator = (*ChainedUsageCalculator)(nil)