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

     1  package bidstrategy
     2  
     3  import (
     4  	"context"
     5  
     6  	"github.com/filecoin-project/bacalhau/pkg/model"
     7  )
     8  
     9  type BidStrategyRequest struct {
    10  	NodeID string
    11  	Job    model.Job
    12  }
    13  
    14  type BidStrategyResponse struct {
    15  	ShouldBid bool
    16  	Reason    string
    17  }
    18  
    19  func newShouldBidResponse() BidStrategyResponse {
    20  	return BidStrategyResponse{
    21  		ShouldBid: true,
    22  	}
    23  }
    24  
    25  type BidStrategy interface {
    26  	ShouldBid(ctx context.Context, request BidStrategyRequest) (BidStrategyResponse, error)
    27  	ShouldBidBasedOnUsage(ctx context.Context, request BidStrategyRequest, resourceUsage model.ResourceUsageData) (BidStrategyResponse, error)
    28  }
    29  
    30  // the JSON data we send to http or exec probes
    31  // TODO: can we just use the BidStrategyRequest struct?
    32  type JobSelectionPolicyProbeData struct {
    33  	NodeID        string                 `json:"node_id"`
    34  	JobID         string                 `json:"job_id"`
    35  	Spec          model.Spec             `json:"spec"`
    36  	ExecutionPlan model.JobExecutionPlan `json:"execution_plan"`
    37  }
    38  
    39  // Return JobSelectionPolicyProbeData for the given request
    40  func getJobSelectionPolicyProbeData(request BidStrategyRequest) JobSelectionPolicyProbeData {
    41  	return JobSelectionPolicyProbeData{
    42  		NodeID:        request.NodeID,
    43  		JobID:         request.Job.Metadata.ID,
    44  		Spec:          request.Job.Spec,
    45  		ExecutionPlan: request.Job.Spec.ExecutionPlan,
    46  	}
    47  }