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 ¶
- Variables
- type ChainDataSet
- type Checker
- type CheckerOptions
- type CollectionState
- type CollectionType
- type CopyFacts
- type DataSetFacts
- type DataSetObservation
- type DataSetObservationPage
- type DataSetScanner
- type DataSetState
- type DataSetStatePage
- type Freshness
- type FreshnessWarning
- type ListOptions
- type LocalDataSet
- type LocalDataSetCountSource
- type LocalDataSetCountSourceFunc
- type LocalDataSetSource
- type LocalDataSetSourceFunc
- type Provider
- type ProviderFacts
- type ProviderHealthFunc
- type ProviderObservation
- type ProviderObservationPage
- type ProviderSource
- type ProviderState
- type ProviderStatePage
- type ReasonCode
- type RefreshChecker
- type RegistryProviderSource
- type Runner
- type Service
- func (s *Service) DataSetObservationsByLocalIDs(ctx context.Context, localIDs []int64) (map[int64]DataSetObservation, error)
- func (s *Service) DataSetStatesByLocalIDs(ctx context.Context, localIDs []int64) (map[int64]DataSetState, error)
- func (s *Service) ListDataSetObservations(ctx context.Context, opts ListOptions) (DataSetObservationPage, error)
- func (s *Service) ListDataSets(ctx context.Context, opts ListOptions) (DataSetStatePage, error)
- func (s *Service) ListProviderObservations(ctx context.Context, opts ListOptions) (ProviderObservationPage, error)
- func (s *Service) ListProviders(ctx context.Context, opts ListOptions) (ProviderStatePage, error)
- func (s *Service) RefreshAll(ctx context.Context) error
- func (s *Service) RefreshDataSetObservations(ctx context.Context, opts ListOptions) (DataSetObservationPage, error)
- func (s *Service) RefreshDataSets(ctx context.Context, opts ListOptions) (DataSetStatePage, error)
- func (s *Service) RefreshInterval() time.Duration
- func (s *Service) RefreshProviderObservations(ctx context.Context, opts ListOptions) (ProviderObservationPage, error)
- func (s *Service) RefreshProviders(ctx context.Context, opts ListOptions) (ProviderStatePage, error)
- func (s *Service) RefreshProvidersWithContext(ctx context.Context, opts ListOptions) (ProviderStatePage, error)
- func (s *Service) RefreshTimeout() time.Duration
- type ServiceOptions
- type Signal
- type SignalLevel
- type StateStore
- type Status
- type StorageDataSetScanner
- type Summary
- type SummarySignal
- type TaskDiagnostic
- type TaskDiagnosticCopyFacts
- type TaskDiagnosticCurrentState
- type TaskDiagnosticDataSetFacts
- type TaskDiagnosticEvidence
- type TaskDiagnosticFacts
- type TaskDiagnosticLiveCheck
- type TaskDiagnosticLiveState
- type TaskDiagnosticNextAction
- type TaskDiagnosticOperation
- type TaskDiagnosticProviderFacts
- type TaskDiagnosticTaskFacts
- type TaskDiagnosticTransactionFacts
- type TaskDiagnosticUploadFacts
Constants ¶
This section is empty.
Variables ¶
var ErrProviderNotFound = errors.New("provider not found")
Functions ¶
This section is empty.
Types ¶
type ChainDataSet ¶
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 Freshness ¶
type Freshness struct {
LastCheckedAt *time.Time `json:"last_checked_at,omitempty"`
Stale bool `json:"stale"`
Warnings []FreshnessWarning `json:"warnings"`
}
type FreshnessWarning ¶
type FreshnessWarning string
const ( FreshnessNoStateRecorded FreshnessWarning = "no_state_recorded" FreshnessStaleState FreshnessWarning = "stale_state" )
type ListOptions ¶
type LocalDataSet ¶
type LocalDataSetCountSource ¶
type LocalDataSetCountSourceFunc ¶
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 ProviderFacts ¶
type ProviderHealthFunc ¶
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 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 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" ReasonTaskChainPending ReasonCode = "task_chain_pending" ReasonTaskChainConfirmed ReasonCode = "task_chain_confirmed" ReasonTaskTransactionRejected ReasonCode = "task_transaction_rejected" ReasonTaskPieceStatusMismatch ReasonCode = "task_piece_status_mismatch" 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 ¶
type Service ¶
type Service struct {
// contains filtered or unexported fields
}
func NewService ¶
func NewService(opts ServiceOptions) *Service
func (*Service) DataSetObservationsByLocalIDs ¶
func (*Service) DataSetStatesByLocalIDs ¶
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) 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 (*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 ¶
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 CopyHealthFromFacts ¶
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 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 SummarySignal ¶
type SummarySignal struct {
Level SignalLevel `json:"level"`
Freshness Freshness `json:"freshness"`
}
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" 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 TaskDiagnosticFacts ¶
type TaskDiagnosticFacts struct {
Task TaskDiagnosticTaskFacts
Upload *TaskDiagnosticUploadFacts
Copy *TaskDiagnosticCopyFacts
DataSet *TaskDiagnosticDataSetFacts
Provider *TaskDiagnosticProviderFacts
Transaction *TaskDiagnosticTransactionFacts
}
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" 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"`
}