observability

package
v0.1.0-beta.1 Latest Latest
Warning

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

Go to latest
Published: Aug 31, 2026 License: Apache-2.0 Imports: 15 Imported by: 0

Documentation

Overview

Package observability owns the boundary between collected storage facts and product-facing health signals.

Collection adapters gather facts from providers, chain state, wallet-scoped data sets, local storage metadata, and task state. They should not decide how those facts affect operator attention beyond producing typed state rows.

Interpretation belongs in this package. Status, reason codes, freshness, item signals, summary signals, and readiness/attention policies are computed here so admin APIs and UI surfaces do not duplicate health semantics.

Presentation layers consume observations and policy outputs. They may choose labels, layout, and copy, but must not reimplement provider/data set status, freshness, or readiness rules.

Index

Constants

This section is empty.

Variables

View Source
var ErrChainScannerUnavailable = errString("chain data set scanner unavailable")
View Source
var ErrProviderNotFound = errors.New("provider not found")

Functions

This section is empty.

Types

type ChainDataSet

type ChainDataSet struct {
	DataSetID        types.OnChainID
	ClientDataSetID  *types.OnChainID
	ProviderID       types.OnChainID
	IsLive           bool
	IsManaged        bool
	ActivePieceCount *int64
	HasActivePieces  *bool
	Metadata         map[string]string
}

type Checker

type Checker struct {
	// contains filtered or unexported fields
}

func NewChecker

func NewChecker(opts CheckerOptions) *Checker

func (*Checker) CheckDataSets

func (c *Checker) CheckDataSets(ctx context.Context, checkedAt time.Time, localDataSets []LocalDataSet) ([]DataSetState, error)

func (*Checker) CheckProviders

func (c *Checker) CheckProviders(ctx context.Context, checkedAt time.Time, localDataSets []LocalDataSet) ([]ProviderState, error)

type CheckerOptions

type CheckerOptions struct {
	ProviderSource ProviderSource
	ProviderHealth ProviderHealthFunc
	DataSetScanner DataSetScanner
	Timeout        time.Duration
	Concurrency    int
	Now            func() time.Time
	Logger         *slog.Logger
}

type CollectionState

type CollectionState struct {
	bun.BaseModel `bun:"table:observability_collection_states"`

	CollectionType CollectionType `bun:"collection_type,pk,type:text" json:"collection_type"`
	LastCheckedAt  time.Time      `bun:"last_checked_at,nullzero,notnull" json:"last_checked_at"`
	CreatedAt      time.Time      `bun:"created_at,nullzero,notnull,default:current_timestamp" json:"created_at"`
	UpdatedAt      time.Time      `bun:"updated_at,nullzero,notnull,default:current_timestamp" json:"updated_at"`
}

type CollectionType

type CollectionType string
const (
	CollectionProviders CollectionType = "providers"
	CollectionDataSets  CollectionType = "data_sets"
)

type CopyFacts

type CopyFacts struct {
	Status         model.StorageUploadCopyStatus `json:"status"`
	ProviderID     *types.OnChainID              `json:"provider_id,omitempty"`
	LocalDataSetID *int64                        `json:"local_data_set_id,omitempty"`
	ChainDataSetID *types.OnChainID              `json:"chain_data_set_id,omitempty"`
	PieceID        *types.OnChainID              `json:"piece_id,omitempty"`
	RetrievalURL   *string                       `json:"retrieval_url,omitempty"`
	LastError      *string                       `json:"last_error,omitempty"`
}

type DataSetFacts

type DataSetFacts struct {
	LocalDataSetID   int64                      `json:"local_data_set_id"`
	BucketID         int64                      `json:"bucket_id"`
	BucketName       string                     `json:"bucket_name"`
	CopyIndex        int                        `json:"copy_index"`
	ProviderID       types.OnChainID            `json:"provider_id"`
	ChainDataSetID   *types.OnChainID           `json:"chain_data_set_id,omitempty"`
	ClientDataSetID  *types.OnChainID           `json:"client_data_set_id,omitempty"`
	LocalStatus      model.StorageDataSetStatus `json:"local_status"`
	ActivePieceCount *int64                     `json:"active_piece_count,omitempty"`
	HasActivePieces  *bool                      `json:"has_active_pieces,omitempty"`
}

type DataSetObservation

type DataSetObservation struct {
	Facts  DataSetFacts `json:"facts"`
	Signal Signal       `json:"signal"`
}

func DataSetObservationFromState

func DataSetObservationFromState(state DataSetState, interval time.Duration, now time.Time) DataSetObservation

type DataSetObservationPage

type DataSetObservationPage struct {
	Items         []DataSetObservation `json:"items"`
	Summary       Summary              `json:"summary"`
	SummarySignal SummarySignal        `json:"summary_signal"`
	Total         int                  `json:"total"`
	Limit         int                  `json:"limit"`
	Offset        int                  `json:"offset"`
}

type DataSetScanner

type DataSetScanner interface {
	ScanWalletDataSets(context.Context) ([]ChainDataSet, error)
}

type DataSetState

type DataSetState struct {
	bun.BaseModel `bun:"table:observability_data_set_states"`

	LocalDataSetID   int64                      `bun:"local_data_set_id,pk" json:"local_data_set_id"`
	BucketID         int64                      `bun:"bucket_id,notnull" json:"bucket_id"`
	BucketName       string                     `bun:"bucket_name,notnull" json:"bucket_name"`
	CopyIndex        int                        `bun:"copy_index,notnull" json:"copy_index"`
	ProviderID       types.OnChainID            `bun:"provider_id,type:text,notnull" json:"provider_id"`
	ChainDataSetID   *types.OnChainID           `bun:"chain_data_set_id,type:text" json:"chain_data_set_id,omitempty"`
	ClientDataSetID  *types.OnChainID           `bun:"client_data_set_id,type:text" json:"client_data_set_id,omitempty"`
	LocalStatus      model.StorageDataSetStatus `bun:"local_status,notnull" json:"local_status"`
	Status           Status                     `bun:"status,notnull" json:"status"`
	ReasonCodes      []ReasonCode               `bun:"reason_codes,type:jsonb,notnull" json:"reason_codes"`
	ActivePieceCount *int64                     `bun:"active_piece_count,nullzero" json:"active_piece_count,omitempty"`
	LastCheckedAt    time.Time                  `bun:"last_checked_at,nullzero,notnull" json:"last_checked_at"`
	LastError        *string                    `bun:"last_error,nullzero" json:"last_error,omitempty"`
	Evidence         map[string]any             `bun:"evidence_json,type:jsonb,notnull" json:"evidence"`
	CreatedAt        time.Time                  `bun:"created_at,nullzero,notnull,default:current_timestamp" json:"created_at"`
	UpdatedAt        time.Time                  `bun:"updated_at,nullzero,notnull,default:current_timestamp" json:"updated_at"`
}

type DataSetStatePage

type DataSetStatePage struct {
	Items         []DataSetState `json:"items"`
	Summary       Summary        `json:"summary"`
	LastCheckedAt *time.Time     `json:"last_checked_at,omitempty"`
	Total         int            `json:"total"`
	Limit         int            `json:"limit"`
	Offset        int            `json:"offset"`
}

type Freshness

type Freshness struct {
	LastCheckedAt *time.Time         `json:"last_checked_at,omitempty"`
	Stale         bool               `json:"stale"`
	Warnings      []FreshnessWarning `json:"warnings"`
}

func BuildFreshness

func BuildFreshness(lastCheckedAt *time.Time, interval time.Duration, now time.Time) Freshness

type FreshnessWarning

type FreshnessWarning string
const (
	FreshnessNoStateRecorded FreshnessWarning = "no_state_recorded"
	FreshnessStaleState      FreshnessWarning = "stale_state"
)

type ListOptions

type ListOptions struct {
	Limit      int
	Offset     int
	Status     Status
	BucketID   int64
	ProviderID *types.OnChainID
}

type LocalDataSet

type LocalDataSet struct {
	ID              int64
	BucketID        int64
	BucketName      string
	CopyIndex       int
	ProviderID      types.OnChainID
	DataSetID       *types.OnChainID
	ClientDataSetID *types.OnChainID
	Status          model.StorageDataSetStatus
}

type LocalDataSetCountSource

type LocalDataSetCountSource interface {
	CountLocalDataSets(context.Context) (int, error)
}

type LocalDataSetCountSourceFunc

type LocalDataSetCountSourceFunc func(context.Context) (int, error)

func (LocalDataSetCountSourceFunc) CountLocalDataSets

func (f LocalDataSetCountSourceFunc) CountLocalDataSets(ctx context.Context) (int, error)

type LocalDataSetSource

type LocalDataSetSource interface {
	ListLocalDataSets(context.Context) ([]LocalDataSet, error)
}

type LocalDataSetSourceFunc

type LocalDataSetSourceFunc func(context.Context) ([]LocalDataSet, error)

func (LocalDataSetSourceFunc) ListLocalDataSets

func (f LocalDataSetSourceFunc) ListLocalDataSets(ctx context.Context) ([]LocalDataSet, error)

type Provider

type Provider struct {
	ID           types.OnChainID
	Active       bool
	HasPDP       bool
	ServiceURL   string
	HealthStatus string
}

type ProviderFacts

type ProviderFacts struct {
	ProviderID   types.OnChainID `json:"provider_id"`
	Active       *bool           `json:"active,omitempty"`
	HasPDP       *bool           `json:"has_pdp,omitempty"`
	ServiceURL   *string         `json:"service_url,omitempty"`
	HealthStatus *string         `json:"health_status,omitempty"`
}

type ProviderHealthFunc

type ProviderHealthFunc func(context.Context, string, time.Duration) string

type ProviderObservation

type ProviderObservation struct {
	Facts  ProviderFacts `json:"facts"`
	Signal Signal        `json:"signal"`
}

func ProviderObservationFromState

func ProviderObservationFromState(state ProviderState, interval time.Duration, now time.Time) ProviderObservation

type ProviderObservationPage

type ProviderObservationPage struct {
	Items         []ProviderObservation `json:"items"`
	Summary       Summary               `json:"summary"`
	SummarySignal SummarySignal         `json:"summary_signal"`
	Total         int                   `json:"total"`
	Limit         int                   `json:"limit"`
	Offset        int                   `json:"offset"`
}

type ProviderSource

type ProviderSource interface {
	ListActiveProviders(context.Context) ([]Provider, error)
	LookupProvider(context.Context, types.OnChainID) (Provider, error)
}

type ProviderState

type ProviderState struct {
	bun.BaseModel `bun:"table:observability_provider_states"`

	ProviderID    types.OnChainID `bun:"provider_id,pk,type:text" json:"provider_id"`
	Status        Status          `bun:"status,notnull" json:"status"`
	ReasonCodes   []ReasonCode    `bun:"reason_codes,type:jsonb,notnull" json:"reason_codes"`
	Active        *bool           `bun:"active" json:"active,omitempty"`
	HasPDP        *bool           `bun:"has_pdp" json:"has_pdp,omitempty"`
	ServiceURL    *string         `bun:"service_url" json:"service_url,omitempty"`
	HealthStatus  *string         `bun:"health_status" json:"health_status,omitempty"`
	LastCheckedAt time.Time       `bun:"last_checked_at,nullzero,notnull" json:"last_checked_at"`
	LastError     *string         `bun:"last_error,nullzero" json:"last_error,omitempty"`
	Evidence      map[string]any  `bun:"evidence_json,type:jsonb,notnull" json:"evidence"`
	CreatedAt     time.Time       `bun:"created_at,nullzero,notnull,default:current_timestamp" json:"created_at"`
	UpdatedAt     time.Time       `bun:"updated_at,nullzero,notnull,default:current_timestamp" json:"updated_at"`
}

type ProviderStatePage

type ProviderStatePage struct {
	Items         []ProviderState `json:"items"`
	Summary       Summary         `json:"summary"`
	LastCheckedAt *time.Time      `json:"last_checked_at,omitempty"`
	Total         int             `json:"total"`
	Limit         int             `json:"limit"`
	Offset        int             `json:"offset"`
}

type ReasonCode

type ReasonCode string
const (
	ReasonRegistryLookupFailed      ReasonCode = "registry_lookup_failed"
	ReasonProviderInactive          ReasonCode = "provider_inactive"
	ReasonProviderMissingPDP        ReasonCode = "provider_missing_pdp"
	ReasonProviderHTTPUnreachable   ReasonCode = "provider_http_unreachable"
	ReasonChainLookupFailed         ReasonCode = "chain_lookup_failed"
	ReasonChainDataSetMissing       ReasonCode = "chain_data_set_missing"
	ReasonChainDataSetInactive      ReasonCode = "chain_data_set_inactive"
	ReasonChainDataSetUnmanaged     ReasonCode = "chain_data_set_unmanaged"
	ReasonLocalStatusNotReady       ReasonCode = "local_status_not_ready"
	ReasonProviderMismatch          ReasonCode = "provider_mismatch"
	ReasonMetadataMismatch          ReasonCode = "metadata_mismatch"
	ReasonCopyUnderReplicated       ReasonCode = "copy_under_replicated"
	ReasonCopyPending               ReasonCode = "copy_pending"
	ReasonCopyCommitting            ReasonCode = "copy_committing"
	ReasonCopyFailed                ReasonCode = "copy_failed"
	ReasonCopyMissingProvider       ReasonCode = "copy_missing_provider"
	ReasonCopyMissingDataSet        ReasonCode = "copy_missing_data_set"
	ReasonCopyMissingPiece          ReasonCode = "copy_missing_piece"
	ReasonCopyMissingRetrievalURL   ReasonCode = "copy_missing_retrieval_url"
	ReasonCopyObservationMissing    ReasonCode = "copy_observation_missing"
	ReasonTaskNotApplicable         ReasonCode = "task_not_applicable"
	ReasonTaskMissingEvidence       ReasonCode = "task_missing_evidence"
	ReasonTaskInsufficientFunds     ReasonCode = "task_insufficient_funds"
	ReasonTaskMissingApproval       ReasonCode = "task_missing_approval"
	ReasonTaskRPCUnavailable        ReasonCode = "task_rpc_unavailable"
	ReasonTaskChainPending          ReasonCode = "task_chain_pending"
	ReasonTaskChainConfirmed        ReasonCode = "task_chain_confirmed"
	ReasonTaskTransactionRejected   ReasonCode = "task_transaction_rejected"
	ReasonTaskPieceStatusMismatch   ReasonCode = "task_piece_status_mismatch"
	ReasonTaskDiagnosticUnavailable ReasonCode = "task_diagnostic_unavailable"
	ReasonTaskUnknownStatus         ReasonCode = "task_unknown_status"
)

func AppendReasonCode

func AppendReasonCode(reasons []ReasonCode, reason ReasonCode) []ReasonCode

AppendReasonCode appends a non-empty reason code if it is not already present.

func (ReasonCode) String

func (r ReasonCode) String() string

type RefreshChecker

type RefreshChecker interface {
	CheckProviders(context.Context, time.Time, []LocalDataSet) ([]ProviderState, error)
	CheckDataSets(context.Context, time.Time, []LocalDataSet) ([]DataSetState, error)
}

type RegistryProviderSource

type RegistryProviderSource struct {
	// contains filtered or unexported fields
}

func NewRegistryProviderSource

func NewRegistryProviderSource(registry *provider.RegistryService) *RegistryProviderSource

func (*RegistryProviderSource) ListActiveProviders

func (s *RegistryProviderSource) ListActiveProviders(ctx context.Context) ([]Provider, error)

func (*RegistryProviderSource) LookupProvider

func (s *RegistryProviderSource) LookupProvider(ctx context.Context, id idtypes.OnChainID) (Provider, error)

type Runner

type Runner struct {
	// contains filtered or unexported fields
}

func NewRunner

func NewRunner(service *Service, logger *slog.Logger) *Runner

func (*Runner) Run

func (r *Runner) Run(ctx context.Context)

type Service

type Service struct {
	// contains filtered or unexported fields
}

func NewService

func NewService(opts ServiceOptions) *Service

func (*Service) DataSetObservationsByLocalIDs

func (s *Service) DataSetObservationsByLocalIDs(ctx context.Context, localIDs []int64) (map[int64]DataSetObservation, error)

func (*Service) DataSetStatesByLocalIDs

func (s *Service) DataSetStatesByLocalIDs(ctx context.Context, localIDs []int64) (map[int64]DataSetState, error)

func (*Service) ListDataSetObservations

func (s *Service) ListDataSetObservations(ctx context.Context, opts ListOptions) (DataSetObservationPage, error)

func (*Service) ListDataSets

func (s *Service) ListDataSets(ctx context.Context, opts ListOptions) (DataSetStatePage, error)

func (*Service) ListProviderObservations

func (s *Service) ListProviderObservations(ctx context.Context, opts ListOptions) (ProviderObservationPage, error)

func (*Service) ListProviders

func (s *Service) ListProviders(ctx context.Context, opts ListOptions) (ProviderStatePage, error)

func (*Service) RefreshAll

func (s *Service) RefreshAll(ctx context.Context) error

func (*Service) RefreshDataSetObservations

func (s *Service) RefreshDataSetObservations(ctx context.Context, opts ListOptions) (DataSetObservationPage, error)

func (*Service) RefreshDataSets

func (s *Service) RefreshDataSets(ctx context.Context, opts ListOptions) (DataSetStatePage, error)

func (*Service) RefreshInterval

func (s *Service) RefreshInterval() time.Duration

func (*Service) RefreshProviderObservations

func (s *Service) RefreshProviderObservations(ctx context.Context, opts ListOptions) (ProviderObservationPage, error)

func (*Service) RefreshProviders

func (s *Service) RefreshProviders(ctx context.Context, opts ListOptions) (ProviderStatePage, error)

func (*Service) RefreshProvidersWithContext

func (s *Service) RefreshProvidersWithContext(ctx context.Context, opts ListOptions) (ProviderStatePage, error)

RefreshProvidersWithContext refreshes provider state using the caller context.

func (*Service) RefreshTimeout

func (s *Service) RefreshTimeout() time.Duration

type ServiceOptions

type ServiceOptions struct {
	Checker           RefreshChecker
	LocalDataSets     LocalDataSetSource
	LocalDataSetCount LocalDataSetCountSource
	Store             StateStore
	RefreshInterval   time.Duration
	RefreshTimeout    time.Duration
	Now               func() time.Time
}

type Signal

type Signal struct {
	Status      Status       `json:"status"`
	Level       SignalLevel  `json:"level"`
	ReasonCodes []ReasonCode `json:"reason_codes"`
	LastError   *string      `json:"last_error,omitempty"`
	Freshness   Freshness    `json:"freshness"`
}

func BuildSignal

func BuildSignal(status Status, reasons []ReasonCode, lastError *string, lastCheckedAt *time.Time, interval time.Duration, now time.Time) Signal

func CopyHealthFromFacts

func CopyHealthFromFacts(facts CopyFacts, dataSetObservation *DataSetObservation, interval time.Duration, now time.Time) Signal

type SignalLevel

type SignalLevel string
const (
	SignalOK       SignalLevel = "ok"
	SignalWarning  SignalLevel = "warning"
	SignalBlocking SignalLevel = "blocking"
)

func WorstSignalLevel

func WorstSignalLevel(current SignalLevel, candidate SignalLevel) SignalLevel

type StateStore

type StateStore interface {
	ReplaceProviderStates(context.Context, time.Time, []ProviderState) error
	ListProviderStates(context.Context, ListOptions) (ProviderStatePage, error)
	ReplaceDataSetStates(context.Context, time.Time, []DataSetState) error
	ListDataSetStates(context.Context, ListOptions) (DataSetStatePage, error)
	GetDataSetStatesByLocalIDs(context.Context, []int64) (map[int64]DataSetState, error)
}

type Status

type Status string
const (
	StatusAvailable   Status = "available"
	StatusDegraded    Status = "degraded"
	StatusUnavailable Status = "unavailable"
	StatusUnknown     Status = "unknown"
)

type StorageDataSetScanner

type StorageDataSetScanner struct {
	// contains filtered or unexported fields
}

func NewStorageDataSetScanner

func NewStorageDataSetScanner(storage dataSetFinder) *StorageDataSetScanner

func (*StorageDataSetScanner) ScanWalletDataSets

func (s *StorageDataSetScanner) ScanWalletDataSets(ctx context.Context) ([]ChainDataSet, error)

type Summary

type Summary struct {
	Total       int `json:"total"`
	Available   int `json:"available"`
	Degraded    int `json:"degraded"`
	Unavailable int `json:"unavailable"`
	Unknown     int `json:"unknown"`
}

type SummarySignal

type SummarySignal struct {
	Level     SignalLevel `json:"level"`
	Freshness Freshness   `json:"freshness"`
}

func DefaultAttentionSummarySignal

func DefaultAttentionSummarySignal(summary Summary, lastCheckedAt *time.Time, interval time.Duration, now time.Time) SummarySignal

type TaskDiagnostic

type TaskDiagnostic struct {
	CheckedAt    time.Time                  `json:"checked_at"`
	CurrentState TaskDiagnosticCurrentState `json:"current_state"`
	Signal       Signal                     `json:"signal"`
	ReasonCodes  []ReasonCode               `json:"reason_codes"`
	NextAction   TaskDiagnosticNextAction   `json:"next_action"`
	Evidence     TaskDiagnosticEvidence     `json:"evidence"`
}

func TaskDiagnosticFromFacts

func TaskDiagnosticFromFacts(facts TaskDiagnosticFacts, live *TaskDiagnosticLiveCheck, now time.Time) TaskDiagnostic

type TaskDiagnosticCopyFacts

type TaskDiagnosticCopyFacts struct {
	UploadID            int64                           `json:"upload_id,omitempty"`
	CopyIndex           int                             `json:"copy_index,omitempty"`
	Status              model.StorageUploadCopyStatus   `json:"status,omitempty"`
	ProviderID          *types.OnChainID                `json:"provider_id,omitempty"`
	StorageDataSetID    *int64                          `json:"storage_data_set_id,omitempty"`
	ChainDataSetID      *types.OnChainID                `json:"chain_data_set_id,omitempty"`
	PieceID             *types.OnChainID                `json:"piece_id,omitempty"`
	TransferMethod      model.StorageCopyTransferMethod `json:"transfer_method,omitempty"`
	CommitTransactionID *string                         `json:"commit_transaction_id,omitempty"`
	LastError           *string                         `json:"last_error,omitempty"`
}

type TaskDiagnosticCurrentState

type TaskDiagnosticCurrentState string
const (
	TaskDiagnosticStateNotApplicable   TaskDiagnosticCurrentState = "not_applicable"
	TaskDiagnosticStatePreparing       TaskDiagnosticCurrentState = "preparing"
	TaskDiagnosticStateTransferring    TaskDiagnosticCurrentState = "transferring"
	TaskDiagnosticStateWaitingForChain TaskDiagnosticCurrentState = "waiting_for_chain"
	TaskDiagnosticStateConfirmed       TaskDiagnosticCurrentState = "confirmed"
	TaskDiagnosticStateRejected        TaskDiagnosticCurrentState = "rejected"
	TaskDiagnosticStateMismatch        TaskDiagnosticCurrentState = "mismatch"
	TaskDiagnosticStateUnavailable     TaskDiagnosticCurrentState = "unavailable"
	TaskDiagnosticStateUnknown         TaskDiagnosticCurrentState = "unknown"
)

type TaskDiagnosticDataSetFacts

type TaskDiagnosticDataSetFacts struct {
	ID                  int64                      `json:"id,omitempty"`
	Status              model.StorageDataSetStatus `json:"status,omitempty"`
	ProviderID          types.OnChainID            `json:"provider_id,omitempty"`
	CopyIndex           int                        `json:"copy_index,omitempty"`
	ChainDataSetID      *types.OnChainID           `json:"chain_data_set_id,omitempty"`
	ClientDataSetID     *types.OnChainID           `json:"client_data_set_id,omitempty"`
	CreateTransactionID *string                    `json:"create_transaction_id,omitempty"`
	CreateStatusURL     *string                    `json:"create_status_url,omitempty"`
	LastError           *string                    `json:"last_error,omitempty"`
}

type TaskDiagnosticEvidence

type TaskDiagnosticEvidence struct {
	Task        TaskDiagnosticTaskFacts         `json:"task"`
	Upload      *TaskDiagnosticUploadFacts      `json:"upload,omitempty"`
	Copy        *TaskDiagnosticCopyFacts        `json:"copy,omitempty"`
	DataSet     *TaskDiagnosticDataSetFacts     `json:"data_set,omitempty"`
	Provider    *TaskDiagnosticProviderFacts    `json:"provider,omitempty"`
	Transaction *TaskDiagnosticTransactionFacts `json:"transaction,omitempty"`
	LiveCheck   *TaskDiagnosticLiveCheck        `json:"live_check,omitempty"`
	Operation   TaskDiagnosticOperation         `json:"operation"`
}

type TaskDiagnosticLiveCheck

type TaskDiagnosticLiveCheck struct {
	State             TaskDiagnosticLiveState `json:"state"`
	StatusURL         string                  `json:"status_url,omitempty"`
	TxStatus          string                  `json:"tx_status,omitempty"`
	DataSetID         string                  `json:"data_set_id,omitempty"`
	DataSetCreated    *bool                   `json:"data_set_created,omitempty"`
	PiecesAdded       *bool                   `json:"pieces_added,omitempty"`
	PieceCount        *int                    `json:"piece_count,omitempty"`
	ConfirmedPieceIDs []string                `json:"confirmed_piece_ids,omitempty"`
	Error             string                  `json:"error,omitempty"`
	// contains filtered or unexported fields
}

func (TaskDiagnosticLiveCheck) MarshalJSON

func (live TaskDiagnosticLiveCheck) MarshalJSON() ([]byte, error)

func (*TaskDiagnosticLiveCheck) SetConfirmedPieceIDs

func (live *TaskDiagnosticLiveCheck) SetConfirmedPieceIDs(ids []string)

SetConfirmedPieceIDs records provider evidence even when the provider returns an empty list.

type TaskDiagnosticLiveState

type TaskDiagnosticLiveState string
const (
	TaskDiagnosticLiveSkipped     TaskDiagnosticLiveState = "skipped"
	TaskDiagnosticLivePending     TaskDiagnosticLiveState = "pending"
	TaskDiagnosticLiveConfirmed   TaskDiagnosticLiveState = "confirmed"
	TaskDiagnosticLiveRejected    TaskDiagnosticLiveState = "rejected"
	TaskDiagnosticLiveMismatch    TaskDiagnosticLiveState = "mismatch"
	TaskDiagnosticLiveUnavailable TaskDiagnosticLiveState = "unavailable"
	TaskDiagnosticLiveUnknown     TaskDiagnosticLiveState = "unknown"
)

type TaskDiagnosticNextAction

type TaskDiagnosticNextAction string
const (
	TaskDiagnosticActionNone                TaskDiagnosticNextAction = "none"
	TaskDiagnosticActionWait                TaskDiagnosticNextAction = "wait"
	TaskDiagnosticActionRetryTask           TaskDiagnosticNextAction = "retry_task"
	TaskDiagnosticActionCheckWalletFunds    TaskDiagnosticNextAction = "check_wallet_funds"
	TaskDiagnosticActionCheckWalletApproval TaskDiagnosticNextAction = "check_wallet_approval"
	TaskDiagnosticActionInspectProvider     TaskDiagnosticNextAction = "inspect_provider"
	TaskDiagnosticActionInspectTask         TaskDiagnosticNextAction = "inspect_task"
)

type TaskDiagnosticOperation

type TaskDiagnosticOperation string
const (
	TaskDiagnosticOperationNone          TaskDiagnosticOperation = "none"
	TaskDiagnosticOperationPrepareUpload TaskDiagnosticOperation = "prepare_upload"
	TaskDiagnosticOperationTransferPiece TaskDiagnosticOperation = "transfer_piece"
	TaskDiagnosticOperationCreateDataSet TaskDiagnosticOperation = "create_data_set"
	TaskDiagnosticOperationAddPieces     TaskDiagnosticOperation = "add_pieces"
)

func TaskDiagnosticOperationForTask

func TaskDiagnosticOperationForTask(taskType model.TaskType, stage string) TaskDiagnosticOperation

TaskDiagnosticOperationForTask returns the diagnostic operation represented by a task type and stage.

type TaskDiagnosticProviderFacts

type TaskDiagnosticProviderFacts struct {
	ProviderID   types.OnChainID `json:"provider_id,omitempty"`
	Status       Status          `json:"status,omitempty"`
	ReasonCodes  []ReasonCode    `json:"reason_codes,omitempty"`
	ServiceURL   *string         `json:"service_url,omitempty"`
	HealthStatus *string         `json:"health_status,omitempty"`
	LastError    *string         `json:"last_error,omitempty"`
}

type TaskDiagnosticTaskFacts

type TaskDiagnosticTaskFacts struct {
	ID            int64                 `json:"id,omitempty"`
	Type          model.TaskType        `json:"type"`
	Stage         string                `json:"stage,omitempty"`
	Status        model.TaskStatus      `json:"status"`
	RetryCount    int                   `json:"retry_count"`
	MaxRetries    int                   `json:"max_retries"`
	LastError     *string               `json:"last_error,omitempty"`
	StatusMessage *string               `json:"status_message,omitempty"`
	WaitReason    *model.TaskWaitReason `json:"wait_reason,omitempty"`
	ScheduledAt   *time.Time            `json:"scheduled_at,omitempty"`
}

type TaskDiagnosticTransactionFacts

type TaskDiagnosticTransactionFacts struct {
	Kind          TaskDiagnosticOperation `json:"kind"`
	StatusURL     string                  `json:"status_url,omitempty"`
	ServiceURL    string                  `json:"service_url,omitempty"`
	DataSetID     string                  `json:"data_set_id,omitempty"`
	TransactionID string                  `json:"transaction_id,omitempty"`
	PieceCount    int                     `json:"piece_count,omitempty"`
}

type TaskDiagnosticUploadFacts

type TaskDiagnosticUploadFacts struct {
	ID              int64                     `json:"id,omitempty"`
	Status          model.StorageUploadStatus `json:"status,omitempty"`
	RequestedCopies int                       `json:"requested_copies,omitempty"`
	ErrorMessage    *string                   `json:"error_message,omitempty"`
	AcceptError     *string                   `json:"accept_error,omitempty"`
}

Jump to

Keyboard shortcuts

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