Documentation ¶
Overview ¶
Package config provides interfaces and utilities for different Cluster components to register, read, write and validate configuration sections stored in a central configuration file.
Index ¶
- Constants
- Variables
- func DefaultJSONMarshal(v interface{}) ([]byte, error)
- func DisplayJSON(cfg interface{}) ([]byte, error)
- func GetClusterConfig(configPath string) ([]byte, error)
- func IsErrFetchingSource(err error) bool
- func ParseDurations(component string, args ...*DurationOpt) error
- func SetIfNotDefault(src interface{}, dest interface{})
- type ComponentConfig
- type DurationOpt
- type Identity
- func (ident *Identity) ApplyEnvVars() error
- func (ident *Identity) ConfigKey() string
- func (ident *Identity) Default() error
- func (ident *Identity) Equals(i *Identity) bool
- func (ident *Identity) LoadJSON(raw []byte) error
- func (ident *Identity) LoadJSONFromFile(path string) error
- func (ident *Identity) SaveJSON(path string) error
- func (ident *Identity) ToJSON() (raw []byte, err error)
- func (ident *Identity) Validate() error
- type Manager
- func (cfg *Manager) ApplyEnvVars() error
- func (cfg *Manager) Default() error
- func (cfg *Manager) IsLoadedFromJSON(t SectionType, name string) bool
- func (cfg *Manager) LoadJSON(bs []byte) error
- func (cfg *Manager) LoadJSONFileAndEnv(path string) error
- func (cfg *Manager) LoadJSONFromFile(path string) error
- func (cfg *Manager) LoadJSONFromHTTPSource(url string) error
- func (cfg *Manager) RegisterComponent(t SectionType, ccfg ComponentConfig)
- func (cfg *Manager) SaveJSON(path string) error
- func (cfg *Manager) Shutdown()
- func (cfg *Manager) ToDisplayJSON() ([]byte, error)
- func (cfg *Manager) ToJSON() ([]byte, error)
- func (cfg *Manager) Validate() error
- type Saver
- type Section
- type SectionType
- type Strings
Constants ¶
const ( DefaultConfigCrypto = crypto.Ed25519 DefaultConfigKeyLength = -1 )
Identity defaults
Variables ¶
var ConfigSaveInterval = time.Second
ConfigSaveInterval specifies how often to save the configuration file if it needs saving.
Functions ¶
func DefaultJSONMarshal ¶
DefaultJSONMarshal produces pretty JSON with 2-space indentation
func DisplayJSON ¶
DisplayJSON takes pointer to a JSON-friendly configuration struct and returns the JSON-encoded representation of it filtering out any struct fields marked with the tag `hidden:"true"`, but keeping fields marked with `"json:omitempty"`.
func GetClusterConfig ¶
GetClusterConfig extracts cluster config from the configuration file and returns bytes of it
func IsErrFetchingSource ¶
IsErrFetchingSource reports whether this error happened when trying to fetch a remote configuration source (as opposed to an error parsing the config).
func ParseDurations ¶
func ParseDurations(component string, args ...*DurationOpt) error
ParseDurations takes a time.Duration src and saves it to the given dst.
func SetIfNotDefault ¶
func SetIfNotDefault(src interface{}, dest interface{})
SetIfNotDefault sets dest to the value of src if src is not the default value of the type. dest must be a pointer.
Types ¶
type ComponentConfig ¶
type ComponentConfig interface { // Returns a string identifying the section name for this configuration ConfigKey() string // Parses a JSON representation of this configuration LoadJSON([]byte) error // Provides a JSON representation of this configuration ToJSON() ([]byte, error) // Sets default working values Default() error // Sets values from environment variables ApplyEnvVars() error // Allows this component to work under a subfolder SetBaseDir(string) // Checks that the configuration is valid Validate() error // Provides a channel to signal the Manager that the configuration // should be persisted. SaveCh() <-chan struct{} // ToDisplayJSON returns a string representing the config excluding hidden fields. ToDisplayJSON() ([]byte, error) }
The ComponentConfig interface allows components to define configurations which can be managed as part of the rep-mgr configuration file by the Manager.
type DurationOpt ¶
type DurationOpt struct { // The duration we need to parse Duration string // Where to store the result Dst *time.Duration // A variable name associated to it for helpful errors. Name string }
DurationOpt provides a datatype to use with ParseDurations
type Identity ¶
Identity represents identity of a cluster peer for communication, including the Consensus component.
func (*Identity) ApplyEnvVars ¶
ApplyEnvVars fills in any Config fields found as environment variables.
func (*Identity) ConfigKey ¶
ConfigKey returns a human-readable string to identify a cluster Identity.
func (*Identity) LoadJSON ¶
LoadJSON receives a raw json-formatted identity and sets the Config fields from it. Note that it should be JSON as generated by ToJSON().
func (*Identity) LoadJSONFromFile ¶
LoadJSONFromFile reads an Identity file from disk and parses it and return Identity.
func (*Identity) SaveJSON ¶
SaveJSON saves the JSON representation of the Identity to the given path.
type Manager ¶
type Manager struct { // stores original source if any Source string // contains filtered or unexported fields }
Manager represents an rep-mgr configuration which bundles different ComponentConfigs object together. Use RegisterComponent() to add a component configurations to the object. Once registered, configurations will be parsed from the central configuration file when doing LoadJSON(), and saved to it when doing SaveJSON().
func NewManager ¶
func NewManager() *Manager
NewManager returns a correctly initialized Manager which is ready to accept component configurations.
func (*Manager) ApplyEnvVars ¶
ApplyEnvVars overrides configuration fields with any values found in environment variables.
func (*Manager) Default ¶
Default generates a default configuration by generating defaults for all registered components.
func (*Manager) IsLoadedFromJSON ¶
func (cfg *Manager) IsLoadedFromJSON(t SectionType, name string) bool
IsLoadedFromJSON tells whether the given component belonging to the given section type is present in the cluster JSON config or not.
func (*Manager) LoadJSON ¶
LoadJSON parses configurations for all registered components, In order to work, component configurations must have been registered beforehand with RegisterComponent.
func (*Manager) LoadJSONFileAndEnv ¶
LoadJSONFileAndEnv calls LoadJSONFromFile followed by ApplyEnvVars, reading and parsing a Configuration file and then overriding fields with any values found in environment variables.
func (*Manager) LoadJSONFromFile ¶
LoadJSONFromFile reads a Configuration file from disk and parses it. See LoadJSON too.
func (*Manager) LoadJSONFromHTTPSource ¶
LoadJSONFromHTTPSource reads a Configuration file from a URL and parses it.
func (*Manager) RegisterComponent ¶
func (cfg *Manager) RegisterComponent(t SectionType, ccfg ComponentConfig)
RegisterComponent lets the Manager load and save component configurations
func (*Manager) Shutdown ¶
func (cfg *Manager) Shutdown()
Shutdown makes sure all configuration save operations are finished before returning.
func (*Manager) ToDisplayJSON ¶
ToDisplayJSON returns a printable cluster configuration.
type Saver ¶
type Saver struct { BaseDir string // contains filtered or unexported fields }
Saver implements common functionality useful for ComponentConfigs
func (*Saver) NotifySave ¶
func (sv *Saver) NotifySave()
NotifySave signals the SaveCh() channel in a non-blocking fashion.
func (*Saver) SaveCh ¶
func (sv *Saver) SaveCh() <-chan struct{}
SaveCh returns a channel which is signaled when a component wants to persist its configuration
func (*Saver) SetBaseDir ¶
SetBaseDir is a setter for BaseDir and implements part of the ComponentConfig interface.
type Section ¶
type Section map[string]ComponentConfig
Section is a section of which stores component-specific configurations.
type SectionType ¶
type SectionType int
SectionType specifies to which section a component configuration belongs.
const ( Cluster SectionType = iota Consensus API IPFSConn State PinTracker Monitor Allocator Informer Observations Datastore Kepler )
These are the component configuration types supported by the Manager.
func SectionTypes ¶
func SectionTypes() []SectionType
SectionTypes returns the list of supported SectionTypes
type Strings ¶
type Strings []string
Strings is a helper type that (un)marshals a single string to/from a single JSON string and a slice of strings to/from a JSON array of strings.
func (Strings) MarshalJSON ¶
MarshalJSON conforms to the json.Marshaler interface.
func (*Strings) UnmarshalJSON ¶
UnmarshalJSON conforms to the json.Unmarshaler interface.