config

package
v1.0.6 Latest Latest
Warning

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

Go to latest
Published: Sep 20, 2020 License: Apache-2.0 Imports: 21 Imported by: 8

Documentation

Overview

Package config holds all Properties of dfget.

Index

Constants

View Source
const (
	BackSourceReasonNone          = 0
	BackSourceReasonRegisterFail  = 1
	BackSourceReasonMd5NotMatch   = 2
	BackSourceReasonDownloadError = 3
	BackSourceReasonNoSpace       = 4
	BackSourceReasonInitError     = 5
	BackSourceReasonWriteError    = 6
	BackSourceReasonHostSysError  = 7
	BackSourceReasonNodeEmpty     = 8
	BackSourceReasonSourceError   = 10
	BackSourceReasonUserSpecified = 100
	ForceNotBackSourceAddition    = 1000
)

the reason of backing to source

View Source
const (
	PatternP2P    = "p2p"
	PatternCDN    = "cdn"
	PatternSource = "source"
)

download pattern

View Source
const (
	DefaultYamlConfigFile  = "/etc/dragonfly/dfget.yml"
	DefaultIniConfigFile   = "/etc/dragonfly.conf"
	DefaultLocalLimit      = 20 * rate.MB
	DefaultMinRate         = 64 * rate.KB
	DefaultClientQueueSize = 6
	DefaultSupernodeWeight = 1
)

properties

View Source
const (
	StrRange         = "Range"
	StrContentLength = "Content-Length"
	StrContentType   = "Content-Type"
	StrUserAgent     = "User-Agent"

	StrTaskFileName = "taskFileName"
	StrClientID     = "cid"
	StrTaskID       = "taskID"
	StrSuperNode    = "superNode"
	StrRateLimit    = "rateLimit"
	StrPieceNum     = "pieceNum"
	StrPieceSize    = "pieceSize"
	StrDataDir      = "dataDir"
	StrTotalLimit   = "totalLimit"
	StrCDNSource    = "cdnSource"

	StrBytes   = "bytes"
	StrPattern = "pattern"
)

http headers

View Source
const (
	// PieceHeadSize every piece starts with a piece head which has 4 bytes,
	// its value is:
	//    real data size | (piece size << 4)
	// And it's written with big-endian into the first four bytes of piece data.
	PieceHeadSize = 4

	// PieceTailSize every piece ends with a piece tail which has 1 byte,
	// its value is: 0x7f
	PieceTailSize = 1

	// PieceMetaSize piece meta is constructed with piece head and tail,
	// its size is 5 bytes.
	PieceMetaSize = PieceHeadSize + PieceTailSize

	// PieceTailChar the value of piece tail
	PieceTailChar = byte(0x7f)
)

piece meta

View Source
const (
	DefaultTimestampFormat = "2006-01-02 15:04:05"
	SchemaHTTP             = "http"

	ServerPortLowerLimit = 15000
	ServerPortUpperLimit = 65000

	RangeNotSatisfiableDesc = "range not satisfiable"
	AddrUsedDesc            = "address already in use"

	PeerHTTPPathPrefix = "/peer/file/"
	CDNPathPrefix      = "/qtdown/"

	LocalHTTPPathCheck  = "/check/"
	LocalHTTPPathClient = "/client/"
	LocalHTTPPathRate   = "/rate/"
	LocalHTTPPing       = "/server/ping"

	DataExpireTime         = 3 * time.Minute
	ServerAliveTime        = 5 * time.Minute
	DefaultDownloadTimeout = 5 * time.Minute

	DefaultSupernodeSchema = "http"
	DefaultSupernodeIP     = "127.0.0.1"
	DefaultSupernodePort   = 8002
)

others

View Source
const (
	// CodeLaunchServerError represents failed to launch a peer server.
	CodeLaunchServerError = 1100 + iota

	// CodePrepareError represents failed to prepare before downloading.
	CodePrepareError

	// CodeGetUserError represents failed to get current user.
	CodeGetUserError

	// CodeRegisterError represents failed to register to supernode.
	CodeRegisterError

	// CodeDownloadError represents failed to download file.
	CodeDownloadError
)

errors code

View Source
const (
	RangeSeparator = "-"
)

Variables

This section is empty.

Functions

func AssertConfig added in v0.3.0

func AssertConfig(cfg *Config) (err error)

AssertConfig checks the config and return errors.

func NodeWeightSlice2StringSlice added in v1.0.1

func NodeWeightSlice2StringSlice(supernodes []*NodeWeight) []string

NodeWeightSlice2StringSlice parses nodeWeight slice to string slice. It takes the NodeWeight.Node as the value and every value will be appended the corresponding NodeWeight.Weight times.

Types

type Config added in v0.3.0

type Config struct {
	// URL download URL.
	URL string `json:"url"`

	// Output full output path.
	Output string `json:"output"`

	// Timeout download timeout(second).
	Timeout time.Duration `json:"timeout,omitempty"`

	// Md5 expected file md5.
	Md5 string `json:"md5,omitempty"`

	// Identifier identify download task, it is available merely when md5 param not exist.
	Identifier string `json:"identifier,omitempty"`

	// CallSystem system name that executes dfget.
	CallSystem string `json:"callSystem,omitempty"`

	// Pattern download pattern, must be 'p2p' or 'cdn' or 'source',
	// default:`p2p`.
	Pattern string `json:"pattern,omitempty"`

	// CA certificate to verify when supernode interact with the source.
	Cacerts []string `json:"cacert,omitempty"`

	// Filter filter some query params of url, use char '&' to separate different params.
	// eg: -f 'key&sign' will filter 'key' and 'sign' query param.
	// in this way, different urls correspond one same download task that can use p2p mode.
	Filter []string `json:"filter,omitempty"`

	// Header of http request.
	// eg: --header='Accept: *' --header='Host: abc'.
	Header []string `json:"header,omitempty"`

	// Notbs indicates whether to not back source to download when p2p fails.
	Notbs bool `json:"notbs,omitempty"`

	// DFDaemon indicates whether the caller is from dfdaemon
	DFDaemon bool `json:"dfdaemon,omitempty"`

	// Insecure indicates whether skip secure verify when supernode interact with the source.
	Insecure bool `json:"insecure,omitempty"`

	// ShowBar shows progress bar, it's conflict with `--console`.
	ShowBar bool `json:"showBar,omitempty"`

	// Console shows log on console, it's conflict with `--showbar`.
	Console bool `json:"console,omitempty"`

	// Verbose indicates whether to be verbose.
	// If set true, log level will be 'debug'.
	Verbose bool `json:"verbose,omitempty"`

	// Nodes specify supernodes.
	Nodes []string `json:"-"`

	// Start time.
	StartTime time.Time `json:"-"`

	// Sign the value is 'Pid + float64(time.Now().UnixNano())/float64(time.Second) format: "%d-%.3f"'.
	// It is unique for downloading task, and is used for debugging.
	Sign string `json:"-"`

	// Username of the system currently logged in.
	User string `json:"-"`

	// Config file paths,
	// default:["/etc/dragonfly/dfget.yml","/etc/dragonfly.conf"].
	//
	// NOTE: It is recommended to use `/etc/dragonfly/dfget.yml` as default,
	// and the `/etc/dragonfly.conf` is just to ensure compatibility with previous versions.
	ConfigFiles []string `json:"-"`

	// RV stores the variables that are initialized and used at downloading task executing.
	RV RuntimeVariable `json:"-"`

	// The reason of backing to source.
	BackSourceReason int `json:"-"`

	// Embedded Properties holds all configurable properties.
	Properties
}

Config holds all the runtime config information.

func NewConfig added in v0.3.0

func NewConfig() *Config

NewConfig creates and initializes a Config.

func (*Config) String added in v0.3.0

func (cfg *Config) String() string

type MetaData added in v0.3.0

type MetaData struct {
	// ServicePort the TCP port on which the file upload service listens.
	ServicePort int `json:"servicePort"`

	// MetaPath the path of meta file.
	MetaPath string `json:"-"`
}

MetaData stores meta information that should be persisted.

func NewMetaData added in v0.3.0

func NewMetaData(metaPath string) *MetaData

NewMetaData creates a MetaData instance.

func (*MetaData) Load added in v0.3.0

func (md *MetaData) Load() error

Load loads meta information from storage.

func (*MetaData) Persist added in v0.3.0

func (md *MetaData) Persist() error

Persist writes meta information into storage.

type NodeWeight added in v1.0.1

type NodeWeight struct {
	Node   string
	Weight int
}

func GetDefaultSupernodesValue added in v1.0.0

func GetDefaultSupernodesValue() []*NodeWeight

GetDefaultSupernodesValue returns the default value of supernodes. default: ["127.0.0.1:8002=1"]

func ParseNodesSlice added in v1.0.0

func ParseNodesSlice(value []string) ([]*NodeWeight, error)

ParseNodesSlice parses the value in string slice type to []*NodeWeight.

func ParseNodesString added in v1.0.0

func ParseNodesString(value string) ([]*NodeWeight, error)

ParseNodesString parses the value in string type to []*NodeWeight.

func (*NodeWeight) MarshalJSON added in v1.0.1

func (nw *NodeWeight) MarshalJSON() ([]byte, error)

MarshalJSON implements the json.Marshaler interface.

func (*NodeWeight) MarshalYAML added in v1.0.1

func (nw *NodeWeight) MarshalYAML() (interface{}, error)

MarshalYAML implements the yaml.Marshaler interface.

func (*NodeWeight) UnmarshalJSON added in v1.0.1

func (nw *NodeWeight) UnmarshalJSON(b []byte) error

UnmarshalJSON implements the json.Unmarshaler interface.

func (*NodeWeight) UnmarshalYAML added in v1.0.1

func (nw *NodeWeight) UnmarshalYAML(unmarshal func(interface{}) error) error

UnmarshalYAML implements the yaml.Unmarshaler interface.

type Properties

type Properties struct {
	// Supernodes specify supernodes with weight.
	// The type of weight must be integer.
	// All weights will be divided by the greatest common divisor in the end.
	//
	// E.g. ["192.168.33.21=1", "192.168.33.22=2"]
	Supernodes []*NodeWeight `yaml:"nodes,omitempty" json:"nodes,omitempty"`

	// LocalLimit rate limit about a single download task, format: G(B)/g/M(B)/m/K(B)/k/B
	// pure number will also be parsed as Byte.
	LocalLimit rate.Rate `yaml:"localLimit,omitempty" json:"localLimit,omitempty"`

	// Minimal rate about a single download task, format: G(B)/g/M(B)/m/K(B)/k/B
	// pure number will also be parsed as Byte.
	MinRate rate.Rate `yaml:"minRate,omitempty" json:"minRate,omitempty"`

	// TotalLimit rate limit about the whole host, format: G(B)/g/M(B)/m/K(B)/k/B
	// pure number will also be parsed as Byte.
	TotalLimit rate.Rate `yaml:"totalLimit,omitempty" json:"totalLimit,omitempty"`

	// ClientQueueSize is the size of client queue
	// which controls the number of pieces that can be processed simultaneously.
	// It is only useful when the Pattern equals "source".
	// The default value is 6.
	ClientQueueSize int `yaml:"clientQueueSize" json:"clientQueueSize,omitempty"`

	// WorkHome work home path,
	// default: `$HOME/.small-dragonfly`.
	WorkHome string `yaml:"workHome" json:"workHome,omitempty"`

	LogConfig dflog.LogConfig `yaml:"logConfig" json:"logConfig"`
}

Properties holds all configurable Properties. Support INI(or conf) and YAML(since 0.3.0). Before 0.3.0, only support INI config and only have one property(node):

[node]
address=127.0.0.1,10.10.10.1

Since 0.2.0, the INI config is just to be compatible with previous versions. The YAML config will have more properties:

nodes:
    - 127.0.0.1=1
    - 10.10.10.1:8002=2
localLimit: 20M
totalLimit: 20M
clientQueueSize: 6

func NewProperties

func NewProperties() *Properties

NewProperties creates a new properties with default values.

func (*Properties) Load

func (p *Properties) Load(path string) error

Load loads properties from config file.

func (*Properties) String

func (p *Properties) String() string

type RuntimeVariable added in v0.3.0

type RuntimeVariable struct {
	// MetaPath specify the path of meta file which store the meta info of the peer that should be persisted.
	// �Only server port information is stored currently.
	MetaPath string

	// SystemDataDir specifies a default directory to store temporary files.
	SystemDataDir string

	// DataDir specifies a directory to store temporary files.
	// For now, the value of `DataDir` always equals `SystemDataDir`,
	// and there is no difference between them.
	// TODO: If there is insufficient disk space, we should set it to the `TargetDir`.
	DataDir string

	// RealTarget specifies the full target path whose value is equal to the `Output`.
	RealTarget string

	// StreamMode specifies that all pieces will be wrote to a Pipe, currently only support cdn mode.
	// when StreamMode is true, all data will write directly.
	// the mode is prepared for this issue https://github.com/dragonflyoss/Dragonfly/issues/1164
	// TODO: support p2p mode
	StreamMode bool

	// TargetDir is the directory of the RealTarget path.
	TargetDir string

	// TempTarget is a temp file path that try to determine
	// whether the `TargetDir` and the `DataDir` belong to the same disk by making a hard link.
	TempTarget string

	// Cid means the client ID which is a string composed of `localIP + "-" + sign` which represents a peer node.
	// NOTE: Multiple dfget processes on the same peer have different CIDs.
	Cid string

	// TaskURL is generated from rawURL which may contains some queries or parameter.
	// Dfget will filter some volatile queries such as timestamps via --filter parameter of dfget.
	TaskURL string

	// TaskFileName is a string composed of `the last element of RealTarget path + "-" + sign`.
	TaskFileName string

	// LocalIP is the native IP which can connect supernode successfully.
	LocalIP string

	// PeerPort is the TCP port on which the file upload service listens as a peer node.
	PeerPort int

	// FileLength the length of the file to download.
	FileLength int64

	// DataExpireTime specifies the caching duration for which
	// cached files keep no accessed by any process.
	// After this period, the cached files will be deleted.
	DataExpireTime time.Duration

	// ServerAliveTime specifies the alive duration for which
	// uploader keeps no accessing by any uploading requests.
	// After this period, the uploader will automatically exit.
	ServerAliveTime time.Duration
}

RuntimeVariable stores the variables that are initialized and used at downloading task executing.

func (*RuntimeVariable) String added in v0.3.0

func (rv *RuntimeVariable) String() string

type SupernodesValue added in v1.0.0

type SupernodesValue struct {
	Nodes *[]*NodeWeight
}

func NewSupernodesValue added in v1.0.0

func NewSupernodesValue(p *[]*NodeWeight, val []*NodeWeight) *SupernodesValue

func (*SupernodesValue) Set added in v1.0.0

func (sv *SupernodesValue) Set(value string) error

Set implements the pflag.Value interface.

func (*SupernodesValue) String added in v1.0.0

func (sv *SupernodesValue) String() string

String implements the pflag.Value interface.

func (*SupernodesValue) Type added in v1.0.0

func (sv *SupernodesValue) Type() string

Type implements the pflag.Value interface.

Jump to

Keyboard shortcuts

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