schedule

package
v0.5.14 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 29, 2024 License: Apache-2.0, MIT Imports: 17 Imported by: 1

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type CreateRequest

type CreateRequest struct {
	Preparation           string   `json:"preparation"           validation:"required"`  // Preparation ID or name
	Provider              string   `json:"provider"              validation:"required"`  // Provider
	HTTPHeaders           []string `json:"httpHeaders"`                                  // http headers to be passed with the request (i.e. key=value)
	URLTemplate           string   `json:"urlTemplate"`                                  // URL template with PIECE_CID placeholder for boost to fetch the CAR file, i.e. http://127.0.0.1/piece/{PIECE_CID}.car
	PricePerGBEpoch       float64  `default:"0"                  json:"pricePerGbEpoch"` // Price in FIL per GiB per epoch
	PricePerGB            float64  `default:"0"                  json:"pricePerGb"`      // Price in FIL  per GiB
	PricePerDeal          float64  `default:"0"                  json:"pricePerDeal"`    // Price in FIL per deal
	Verified              bool     `default:"true"               json:"verified"`        // Whether the deal should be verified
	IPNI                  bool     `default:"true"               json:"ipni"`            // Whether the deal should be IPNI
	KeepUnsealed          bool     `default:"true"               json:"keepUnsealed"`    // Whether the deal should be kept unsealed
	StartDelay            string   `default:"72h"                json:"startDelay"`      // Deal start delay in epoch or in duration format, i.e. 1000, 72h
	Duration              string   `default:"12840h"             json:"duration"`        // Duration in epoch or in duration format, i.e. 1500000, 2400h
	ScheduleCron          string   `json:"scheduleCron"`                                 // Schedule cron pattern
	ScheduleCronPerpetual bool     `json:"scheduleCronPerpetual"`                        // Whether a cron schedule should run in definitely
	ScheduleDealNumber    int      `json:"scheduleDealNumber"`                           // Number of deals per scheduled time
	TotalDealNumber       int      `json:"totalDealNumber"`                              // Total number of deals
	ScheduleDealSize      string   `json:"scheduleDealSize"`                             // Size of deals per schedule trigger in human readable format, i.e. 100 TiB
	TotalDealSize         string   `json:"totalDealSize"`                                // Total size of deals in human readable format, i.e. 100 TiB
	Notes                 string   `json:"notes"`                                        // Notes
	MaxPendingDealSize    string   `json:"maxPendingDealSize"`                           // Max pending deal size in human readable format, i.e. 100 TiB
	MaxPendingDealNumber  int      `json:"maxPendingDealNumber"`                         // Max pending deal number
	//nolint:tagliatelle
	AllowedPieceCIDs []string `json:"allowedPieceCids"` // Allowed piece CIDs in this schedule
	Force            bool     `json:"force"`            // Force to send out deals regardless of replication restriction
}

type DefaultHandler added in v0.4.0

type DefaultHandler struct{}

func (DefaultHandler) CreateHandler added in v0.4.0

func (DefaultHandler) CreateHandler(
	ctx context.Context,
	db *gorm.DB,
	lotusClient jsonrpc.RPCClient,
	request CreateRequest,
) (*model.Schedule, error)

CreateHandler creates a new schedule based on the provided CreateRequest.

The function performs the following steps:

  1. Associates the provided context with the database connection.
  2. Retrieves the preparation from the database using the ID from the request.
  3. Parses the provided start delay and duration to ensure valid durations.
  4. If a ScheduleCron string is provided, it validates its correctness.
  5. Parses and validates the provided sizes: TotalDealSize, ScheduleDealSize, and MaxPendingDealSize.
  6. Verifies all provided piece CIDs in AllowedPieceCIDs to ensure their correctness.
  7. Checks for the presence of wallets attached to the preparation.
  8. Uses the lotusClient to retrieve the provider actor.
  9. Constructs a new model.Schedule instance from the provided and parsed data.
  10. Inserts the newly created schedule into the database.
  11. Returns the newly created schedule.

Parameters:

  • ctx: The context for the operation, used for timeouts and cancellation.
  • db: The database connection, used for CRUD operations related to schedules.
  • lotusClient: The Lotus client, used for Filecoin RPC calls.
  • request: The request object containing the data for the new schedule.

Returns:

  • A pointer to the created model.Schedule if successful.
  • An error indicating the reason for any failure during the operation.

func (DefaultHandler) ListHandler added in v0.4.0

func (DefaultHandler) ListHandler(
	ctx context.Context,
	db *gorm.DB,
) ([]model.Schedule, error)

ListHandler retrieves all the schedules from the database.

Parameters:

  • ctx: The context for the operation, which can include cancellation signals, timeout details, etc.
  • db: The database connection used for CRUD operations.

Returns:

  • A slice of Schedule models if successful.
  • An error if there are issues during the operation.

func (DefaultHandler) PauseHandler added in v0.4.0

func (DefaultHandler) PauseHandler(
	ctx context.Context,
	db *gorm.DB,
	scheduleID uint32,
) (*model.Schedule, error)

PauseHandler attempts to pause an active schedule based on the provided scheduleID. If the schedule is already completed, an error will be returned.

Parameters:

  • ctx: The context for the operation, which can include cancellation signals, timeout details, etc.
  • db: The database connection used for CRUD operations.
  • scheduleID: The ID of the schedule to be paused.

Returns:

  • A pointer to the updated Schedule if successful.
  • An error if there are issues during the operation, e.g., if the schedule is not found or already completed.

func (DefaultHandler) RemoveHandler added in v0.5.2

func (DefaultHandler) RemoveHandler(
	ctx context.Context,
	db *gorm.DB,
	scheduleID uint32,
) error

func (DefaultHandler) ResumeHandler added in v0.4.0

func (DefaultHandler) ResumeHandler(
	ctx context.Context,
	db *gorm.DB,
	scheduleID uint32,
) (*model.Schedule, error)

ResumeHandler attempts to resume a previously paused schedule based on the provided scheduleID.

Parameters:

  • ctx: The context for the operation, allowing for cancellation and timeouts.
  • db: The database connection used for operations.
  • scheduleID: The ID of the schedule to be resumed.

Returns:

  • A pointer to the updated Schedule if successful.
  • An error if any issues occur, e.g., if the schedule is not found or not in a paused state.

func (DefaultHandler) UpdateHandler added in v0.5.0

func (DefaultHandler) UpdateHandler(
	ctx context.Context,
	db *gorm.DB,
	id uint32,
	request UpdateRequest,
) (*model.Schedule, error)

UpdateHandler modifies an existing schedule record based on the provided update request.

It looks for the schedule record by the given schedule ID. If found, it processes the provided UpdateRequest to determine which fields should be updated. Once the desired changes are captured, the function commits these updates to the database.

Parameters:

  • ctx: The context for managing timeouts and cancellation.
  • db: The gorm.DB instance for database operations.
  • id: The ID of the schedule to be updated.
  • request: The UpdateRequest containing the desired changes.

Returns:

  • The updated model.Schedule if the operation is successful.
  • An error if any issues occur during the operation, including invalid parameters or database errors.

type Handler added in v0.4.0

type Handler interface {
	CreateHandler(
		ctx context.Context,
		db *gorm.DB,
		lotusClient jsonrpc.RPCClient,
		request CreateRequest,
	) (*model.Schedule, error)
	UpdateHandler(
		ctx context.Context,
		db *gorm.DB,
		scheduleID uint32,
		request UpdateRequest,
	) (*model.Schedule, error)
	ListHandler(
		ctx context.Context,
		db *gorm.DB,
	) ([]model.Schedule, error)
	PauseHandler(
		ctx context.Context,
		db *gorm.DB,
		scheduleID uint32,
	) (*model.Schedule, error)
	RemoveHandler(
		ctx context.Context,
		db *gorm.DB,
		scheduleID uint32,
	) error
	ResumeHandler(
		ctx context.Context,
		db *gorm.DB,
		scheduleID uint32,
	) (*model.Schedule, error)
}
var Default Handler = &DefaultHandler{}

type MockSchedule added in v0.5.0

type MockSchedule struct {
	mock.Mock
}

func (*MockSchedule) CreateHandler added in v0.5.0

func (m *MockSchedule) CreateHandler(ctx context.Context, db *gorm.DB, lotusClient jsonrpc.RPCClient, request CreateRequest) (*model.Schedule, error)

func (*MockSchedule) ListHandler added in v0.5.0

func (m *MockSchedule) ListHandler(ctx context.Context, db *gorm.DB) ([]model.Schedule, error)

func (*MockSchedule) PauseHandler added in v0.5.0

func (m *MockSchedule) PauseHandler(ctx context.Context, db *gorm.DB, scheduleID uint32) (*model.Schedule, error)

func (*MockSchedule) RemoveHandler added in v0.5.2

func (m *MockSchedule) RemoveHandler(ctx context.Context, db *gorm.DB, scheduleID uint32) error

func (*MockSchedule) ResumeHandler added in v0.5.0

func (m *MockSchedule) ResumeHandler(ctx context.Context, db *gorm.DB, scheduleID uint32) (*model.Schedule, error)

func (*MockSchedule) UpdateHandler added in v0.5.0

func (m *MockSchedule) UpdateHandler(ctx context.Context, db *gorm.DB, scheduleID uint32, request UpdateRequest) (*model.Schedule, error)

type UpdateRequest added in v0.5.0

type UpdateRequest struct {
	HTTPHeaders           []string `json:"httpHeaders"`                                  // http headers to be passed with the request (i.e. key=value)
	URLTemplate           *string  `json:"urlTemplate"`                                  // URL template with PIECE_CID placeholder for boost to fetch the CAR file, i.e. http://127.0.0.1/piece/{PIECE_CID}.car
	PricePerGBEpoch       *float64 `default:"0"                  json:"pricePerGbEpoch"` // Price in FIL per GiB per epoch
	PricePerGB            *float64 `default:"0"                  json:"pricePerGb"`      // Price in FIL  per GiB
	PricePerDeal          *float64 `default:"0"                  json:"pricePerDeal"`    // Price in FIL per deal
	Verified              *bool    `default:"true"               json:"verified"`        // Whether the deal should be verified
	IPNI                  *bool    `default:"true"               json:"ipni"`            // Whether the deal should be IPNI
	KeepUnsealed          *bool    `default:"true"               json:"keepUnsealed"`    // Whether the deal should be kept unsealed
	StartDelay            *string  `default:"72h"                json:"startDelay"`      // Deal start delay in epoch or in duration format, i.e. 1000, 72h
	Duration              *string  `default:"12840h"             json:"duration"`        // Duration in epoch or in duration format, i.e. 1500000, 2400h
	ScheduleCron          *string  `json:"scheduleCron"`                                 // Schedule cron pattern
	ScheduleCronPerpetual *bool    `json:"scheduleCronPerpetual"`                        // Whether a cron schedule should run in definitely
	ScheduleDealNumber    *int     `json:"scheduleDealNumber"`                           // Number of deals per scheduled time
	TotalDealNumber       *int     `json:"totalDealNumber"`                              // Total number of deals
	ScheduleDealSize      *string  `json:"scheduleDealSize"`                             // Size of deals per schedule trigger in human readable format, i.e. 100 TiB
	TotalDealSize         *string  `json:"totalDealSize"`                                // Total size of deals in human readable format, i.e. 100 TiB
	Notes                 *string  `json:"notes"`                                        // Notes
	MaxPendingDealSize    *string  `json:"maxPendingDealSize"`                           // Max pending deal size in human readable format, i.e. 100 TiB
	MaxPendingDealNumber  *int     `json:"maxPendingDealNumber"`                         // Max pending deal number
	//nolint:tagliatelle
	AllowedPieceCIDs []string `json:"allowedPieceCids"` // Allowed piece CIDs in this schedule
	Force            *bool    `json:"force"`            // Force to send out deals regardless of replication restriction
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL