proxy-pool/internal/controller/provider/ports.go

59 lines
1.4 KiB
Go

package provider
import (
"context"
"time"
"proxy-pool/internal/domain/activitypool"
proxyDomain "proxy-pool/internal/domain/proxy"
"proxy-pool/internal/domain/upstream"
)
type FetchResponse struct {
// Body belongs to the caller until Parse returns and must not be reused earlier.
Body []byte
RetryAfter time.Duration
}
// ProviderAdapter may be called concurrently up to Config.MaxInFlight times.
type ProviderAdapter interface {
Fetch(context.Context) (FetchResponse, error)
}
// RetryableError lets an adapter stop retries for permanent provider failures.
// Plain errors are treated as transient for backward-compatible fail-safe retries.
type RetryableError interface {
error
Retryable() bool
}
// Parser owns any transient resources attached to parsed candidates. It must
// be safe for concurrent calls and must honor context cancellation.
type Parser interface {
Parse(context.Context, []byte) ([]proxyDomain.Proxy, error)
ReleaseCandidates([]proxyDomain.Proxy)
}
type Result struct {
UpstreamID string
Class upstream.FetchClass
ValidCount int
NewCount int
Err error
Attempt int
}
type ResultRecorder interface {
// Record may be called concurrently, must return promptly, and must not
// retain mutable result data.
Record(Result)
}
type Ports struct {
Adapter ProviderAdapter
Parser Parser
Activity activitypool.Upserter
Results ResultRecorder
Capacity upstream.FetchCapacity
}