Documentation ¶
Index ¶
- Constants
- Variables
- func CanonicalHeaderKey(s string) string
- func CheckResponseCode(respCode int, allowed []int) error
- func DefaultTransport() *http.Transport
- func GetContentLength(request *Request) (int64, error)
- func GetLastModified(request *Request) (int64, error)
- func InitSourceClients(opts map[string]any) error
- func IsExpired(request *Request, info *ExpireInfo) (bool, error)
- func IsNoClientFoundError(err error) bool
- func IsResourceNotReachableError(err error) bool
- func IsSupportRange(request *Request) (bool, error)
- func ListClients() []string
- func ParseToHTTPClient(optionYaml []byte) (*http.Client, error)
- func Register(scheme string, resourceClient ResourceClient, adaptor RequestAdapter, ...) error
- func RegisterBuilder(scheme string, builder ResourceClientBuilder, opts ...RegisterOption)
- func RequestEq(url string) gomock.Matcher
- func UnRegister(scheme string)
- func UnRegisterBuilder(scheme string)
- func UpdatePluginDir(pluginDir string)
- func UpdateTransportOption(transport *http.Transport, optionYaml []byte) error
- func WithContentLength(length int64) func(*Response)
- func WithExpireInfo(info ExpireInfo) func(*Response)
- func WithHeader(header map[string]string) func(*Response)
- func WithStatus(code int, status string) func(*Response)
- func WithTemporary(temporary bool) func(*Response)
- func WithValidate(validate func() error) func(*Response)
- type ClientManager
- type Director
- type ExpireInfo
- type Header
- type Hook
- type ListMetadata
- type ListMetadataClient
- func (lm *ListMetadataClient) Download(request *Request) (*Response, error)
- func (lm *ListMetadataClient) GetContentLength(request *Request) (int64, error)
- func (lm *ListMetadataClient) GetLastModified(request *Request) (int64, error)
- func (lm *ListMetadataClient) IsExpired(request *Request, info *ExpireInfo) (bool, error)
- func (lm *ListMetadataClient) IsSupportRange(request *Request) (bool, error)
- type Metadata
- type Option
- type RegisterOption
- type Request
- type RequestAdapter
- type ResourceClient
- type ResourceClientBuilder
- type ResourceLister
- type ResourceMetadataGetter
- type Response
- type URLEntry
- type UnexpectedStatusCodeError
Constants ¶
const ( LastModifiedLayout = http.TimeFormat ExpireLayout = http.TimeFormat )
const ( // Range is different with HTTP Range, it's without "bytes=" prefix Range = "X-Dragonfly-Range" // startIndex-endIndex )
const (
TimeFormat = "Mon, 02 Jan 2006 15:04:05 GMT"
)
const (
UnknownSourceFileLen = -2
)
Variables ¶
var ( ListMetadataScheme = "d7ylist" ListMetadataOriginScheme = "X-Dragonfly-List-Origin-Scheme" ListMetadataExpire = "X-Dragonfly-List-Expire" )
var ( // ErrResourceNotReachable represents the url resource is a not reachable. ErrResourceNotReachable = errors.New("resource is not reachable") // ErrNoClientFound represents no source client to resolve url ErrNoClientFound = errors.New("no source client found") // ErrClientNotSupportList represents the source client not support list action ErrClientNotSupportList = errors.New("source client not support list") // ErrClientNotSupportContentLength represents the source client not support get content length action ErrClientNotSupportContentLength = errors.New("source client not support get content length") // ErrClientNotSupportGetMetadata represents the source client not support get metadata ErrClientNotSupportGetMetadata = errors.New("source client not support get metadata") )
var ProxyEnv = "D7Y_SOURCE_PROXY"
Functions ¶
func CanonicalHeaderKey ¶ added in v2.0.2
func CheckResponseCode ¶ added in v2.0.2
CheckResponseCode returns UnexpectedStatusError if the given response code is not one of the allowed status codes; otherwise nil.
func DefaultTransport ¶ added in v2.0.9
func GetContentLength ¶
func GetLastModified ¶ added in v2.0.2
func InitSourceClients ¶ added in v2.0.9
InitSourceClients will initialize all resource clients which registered by RegisterBuilder.
func IsNoClientFoundError ¶ added in v2.0.2
func IsResourceNotReachableError ¶ added in v2.0.2
func IsSupportRange ¶
func ListClients ¶ added in v2.0.3
func ListClients() []string
func ParseToHTTPClient ¶ added in v2.0.9
func Register ¶
func Register(scheme string, resourceClient ResourceClient, adaptor RequestAdapter, hooks ...Hook) error
func RegisterBuilder ¶ added in v2.0.9
func RegisterBuilder(scheme string, builder ResourceClientBuilder, opts ...RegisterOption)
RegisterBuilder register ResourceClientBuilder into global resourceClientBuilder, the InitSourceClients will use it.
func UnRegister ¶
func UnRegister(scheme string)
func UnRegisterBuilder ¶ added in v2.0.9
func UnRegisterBuilder(scheme string)
func UpdatePluginDir ¶ added in v2.0.2
func UpdatePluginDir(pluginDir string)
func UpdateTransportOption ¶ added in v2.0.9
func WithContentLength ¶ added in v2.0.2
func WithExpireInfo ¶ added in v2.0.2
func WithExpireInfo(info ExpireInfo) func(*Response)
WithExpireInfo is used for no-http resource client to set expire info
func WithHeader ¶ added in v2.0.2
func WithStatus ¶ added in v2.0.2
func WithTemporary ¶ added in v2.0.5
func WithValidate ¶ added in v2.0.3
Types ¶
type ClientManager ¶
type ClientManager interface { // Register registers a source client with scheme Register(scheme string, resourceClient ResourceClient, adapter RequestAdapter, hook ...Hook) error // UnRegister revoke a source client from manager UnRegister(scheme string) // GetClient gets a source client by scheme GetClient(scheme string, options ...Option) (ResourceClient, bool) // ListClients lists all supported client scheme ListClients() []string }
func NewManager ¶
func NewManager() ClientManager
type Director ¶ added in v2.0.10
Director will handle request with some actions, like: 1. inject auth information for target url and metadata, eg: fetch docker config for different users 2. rewrite a common request into an unique request, eg: oras://harbor/user:latest to oras://harbor/user:lastest?digest=sha256:12345
func HasDirector ¶ added in v2.0.10
type ExpireInfo ¶ added in v2.0.2
type Header ¶ added in v2.0.2
A Header represents the key-value pairs in a Dragonfly source header.
The keys should be in canonical form, as returned by CanonicalHeaderKey.
func (Header) Add ¶ added in v2.0.2
Add adds the key, value pair to the header. It appends to any existing values associated with key. The key is case insensitive; it is canonicalized by CanonicalHeaderKey.
func (Header) Del ¶ added in v2.0.2
Del deletes the values associated with key. The key is case insensitive; it is canonicalized by CanonicalHeaderKey.
func (Header) Get ¶ added in v2.0.2
Get gets the first value associated with the given key. If there are no values associated with the key, Get returns "". It is case insensitive; textproto.CanonicalMIMEHeaderKey is used to canonicalize the provided key. To use non-canonical keys, access the map directly.
func (Header) Set ¶ added in v2.0.2
Set sets the header entries associated with key to the single element value. It replaces any existing values associated with key. The key is case insensitive; it is canonicalized by textproto.CanonicalMIMEHeaderKey. To use non-canonical keys, assign to the map directly.
type Hook ¶ added in v2.0.2
type Hook interface { BeforeRequest(request *Request) error AfterResponse(response *Response) error }
Hook TODO hook
type ListMetadata ¶ added in v2.0.8
type ListMetadata struct {
URLEntries []URLEntry
}
type ListMetadataClient ¶ added in v2.0.8
type ListMetadataClient struct { }
func (*ListMetadataClient) Download ¶ added in v2.0.8
func (lm *ListMetadataClient) Download(request *Request) (*Response, error)
func (*ListMetadataClient) GetContentLength ¶ added in v2.0.8
func (lm *ListMetadataClient) GetContentLength(request *Request) (int64, error)
func (*ListMetadataClient) GetLastModified ¶ added in v2.0.8
func (lm *ListMetadataClient) GetLastModified(request *Request) (int64, error)
func (*ListMetadataClient) IsExpired ¶ added in v2.0.8
func (lm *ListMetadataClient) IsExpired(request *Request, info *ExpireInfo) (bool, error)
func (*ListMetadataClient) IsSupportRange ¶ added in v2.0.8
func (lm *ListMetadataClient) IsSupportRange(request *Request) (bool, error)
type Metadata ¶ added in v2.0.5
type Metadata struct { Status string StatusCode int Header Header // SupportRange indicates source supports partial download, like Range in http request SupportRange bool // ContentLength indicates the current content length for the target request // ContentLength int64 // TotalContentLength indicates the total content length for the target request // eg, for http response header: // Content-Range: bytes 0-9/2443 // 2443 is the TotalContentLength, 10 is the ContentLength TotalContentLength int64 Validate func() error Temporary bool }
func GetMetadata ¶ added in v2.0.5
type RegisterOption ¶ added in v2.0.10
type RegisterOption func(scheme string)
RegisterOption is used for extra options when registering, like mark target scheme protocol should inject auth information
func WithDirector ¶ added in v2.0.10
func WithDirector(director Director) RegisterOption
type Request ¶ added in v2.0.2
func NewListMetadataRequest ¶ added in v2.0.8
func NewRequest ¶ added in v2.0.2
func NewRequestWithContext ¶ added in v2.0.2
func NewRequestWithHeader ¶ added in v2.0.2
func (*Request) Clone ¶ added in v2.0.2
Clone returns a deep copy of r with its context changed to ctx. The provided ctx must be non-nil.
For an outgoing client request, the context controls the entire lifetime of a request and its response: obtaining a connection, sending the request, and reading the response headers and body.
func (*Request) Context ¶ added in v2.0.2
Context returns the request's context. To change the context, use WithContext.
The returned context is always non-nil; it defaults to the background context.
For outgoing client requests, the context controls cancellation.
For incoming server requests, the context is canceled when the client's connection closes, the request is canceled (with HTTP/2), or when the ServeHTTP method returns.
func (*Request) WithContext ¶ added in v2.0.2
WithContext returns a shallow copy of r with its context changed to ctx. The provided ctx must be non-nil.
For outgoing client request, the context controls the entire lifetime of a request and its response: obtaining a connection, sending the request, and reading the response headers and body.
To create a new request with a context, use NewRequestWithContext. To change the context of a request, such as an incoming request you want to modify before sending back out, use Request.Clone. Between those two uses, it's rare to need WithContext.
type RequestAdapter ¶ added in v2.0.4
type ResourceClient ¶
type ResourceClient interface { // GetContentLength get length of resource content // return source.UnknownSourceFileLen if response status is not StatusOK and StatusPartialContent GetContentLength(request *Request) (int64, error) // IsSupportRange checks if resource supports breakpoint continuation // return false if response status is not StatusPartialContent IsSupportRange(request *Request) (bool, error) // IsExpired checks if a resource received or stored is the same. // return false and non-nil err to prevent the source from exploding if // fails to get the result, it is considered that the source has not expired IsExpired(request *Request, info *ExpireInfo) (bool, error) // Download downloads from source Download(request *Request) (*Response, error) // GetLastModified gets last modified timestamp milliseconds of resource GetLastModified(request *Request) (int64, error) }
ResourceClient defines the API interface to interact with source.
func LoadPlugin ¶
func LoadPlugin(dir, scheme string) (ResourceClient, error)
type ResourceClientBuilder ¶ added in v2.0.9
type ResourceClientBuilder interface { // Build return the target resource with custom option Build(optionYaml []byte) (resourceClient ResourceClient, adaptor RequestAdapter, hooks []Hook, err error) }
ResourceClientBuilder is used to build resource client with custom option
func NewPlainResourceClientBuilder ¶ added in v2.0.9
func NewPlainResourceClientBuilder( build func(optionYaml []byte) (resourceClient ResourceClient, adaptor RequestAdapter, hooks []Hook, err error)) ResourceClientBuilder
type ResourceLister ¶ added in v2.0.2
type ResourceLister interface { // List only list current level resources in request url // the request may represent a single file or a directory // if the request represent a directory, the result should return all file entries and subdirectory entries below the request directory // if the request represent a single file, the result should return a single file entry or empty slice List(request *Request) (urls []URLEntry, err error) }
ResourceLister defines the interface to list all downloadable resources in request url
type ResourceMetadataGetter ¶ added in v2.0.5
ResourceMetadataGetter defines the API interface to get metadata for special resource The metadata will be used for concurrent multiple pieces downloading
type Response ¶ added in v2.0.2
type Response struct { Status string StatusCode int Header Header Body io.ReadCloser ContentLength int64 // Validate this response is okay to transfer in p2p network, like status 200 or 206 in http is valid to do this, // otherwise return status code to original client Validate func() error // Temporary indecates the error whether the error is temporary, if is true, we can retry it later Temporary bool }
func NewResponse ¶ added in v2.0.2
func NewResponse(rc io.ReadCloser, opts ...func(*Response)) *Response
func (*Response) ExpireInfo ¶ added in v2.0.2
func (resp *Response) ExpireInfo() ExpireInfo
type URLEntry ¶ added in v2.0.5
type URLEntry struct { //URL download url URL *url.URL // Name returns the name of the file (or subdirectory) described by the entry. // Name will be used in recursive downloading as file name or subdirectory name // This name is only the final element of the path (the commonv1 name), not the entire path. // For example, Name would return "hello.go" not "home/gopher/hello.go". Name string // IsDir reports whether the entry describes a directory. IsDir bool // Entry attribute, like oss md5 and expire time Attribute map[string]string }
URLEntry is an entry which read from url with specific protocol It is used in recursive downloading
type UnexpectedStatusCodeError ¶ added in v2.0.2
type UnexpectedStatusCodeError struct {
// contains filtered or unexported fields
}
UnexpectedStatusCodeError is returned when a source responds with neither an error nor with a status code indicating success.
func (UnexpectedStatusCodeError) Error ¶ added in v2.0.2
func (e UnexpectedStatusCodeError) Error() string
Error implements interface error
func (UnexpectedStatusCodeError) Got ¶ added in v2.0.2
func (e UnexpectedStatusCodeError) Got() int
Got is the actual status code returned by source.
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
clients
|
|
Package mocks is a generated GoMock package.
|
Package mocks is a generated GoMock package. |