config

package
v0.8.5 Latest Latest
Warning

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

Go to latest
Published: Nov 5, 2023 License: AGPL-3.0 Imports: 23 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// Config constants.
	Default               = "default"
	EnvPrefix             = "GATEWAYD_"
	TracerName            = "gatewayd"
	GlobalConfigFilename  = "gatewayd.yaml"
	PluginsConfigFilename = "gatewayd_plugins.yaml"

	// Logger constants.
	DefaultLogOutput         = "console"
	DefaultLogFileName       = "gatewayd.log"
	DefaultLogLevel          = "info"
	DefaultNoColor           = false
	DefaultTimeFormat        = "unix"
	DefaultConsoleTimeFormat = "RFC3339"
	DefaultMaxSize           = 500 // megabytes
	DefaultMaxBackups        = 5
	DefaultMaxAge            = 30 // days
	DefaultCompress          = true
	DefaultLocalTime         = false
	DefaultSyslogTag         = "gatewayd"
	DefaultRSyslogNetwork    = "tcp"
	DefaultRSyslogAddress    = "localhost:514"
	DefaultSyslogPriority    = "info"

	// Plugin constants.
	DefaultMinPort                 = 50000
	DefaultMaxPort                 = 60000
	PluginPriorityStart            = 1000
	LoggerName                     = "plugin"
	DefaultPluginAddress           = "http://plugins/metrics"
	DefaultMetricsMergerPeriod     = 5 * time.Second
	DefaultPluginHealthCheckPeriod = 5 * time.Second
	DefaultPluginTimeout           = 30 * time.Second

	// Client constants.
	DefaultNetwork            = "tcp"
	DefaultAddress            = "localhost:5432"
	DefaultChunkSize          = 8192
	DefaultReceiveDeadline    = 0 // 0 means no deadline (timeout)
	DefaultSendDeadline       = 0
	DefaultTCPKeepAlivePeriod = 30 * time.Second
	DefaultTCPKeepAlive       = false
	DefaultReceiveTimeout     = 0

	// Pool constants.
	EmptyPoolCapacity        = 0
	DefaultPoolSize          = 10
	MinimumPoolSize          = 2
	DefaultHealthCheckPeriod = 60 * time.Second // This must match PostgreSQL authentication timeout.

	// Server constants.
	DefaultListenNetwork        = "tcp"
	DefaultListenAddress        = "0.0.0.0:15432"
	DefaultTickInterval         = 5 * time.Second
	DefaultBufferSize           = 1 << 27 // 134217728 bytes
	DefaultTCPKeepAliveDuration = 3 * time.Second
	DefaultLoadBalancer         = "roundrobin"
	DefaultTCPNoDelay           = true
	DefaultEngineStopTimeout    = 5 * time.Second
	DefaultHandshakeTimeout     = 5 * time.Second

	// Utility constants.
	DefaultSeed        = 1000
	ChecksumBufferSize = 65536

	// Metrics constants.
	DefaultMetricsAddress       = "localhost:9090"
	DefaultMetricsPath          = "/metrics"
	DefaultReadHeaderTimeout    = 10 * time.Second
	DefaultMetricsServerTimeout = 10 * time.Second

	// Sentry constants.
	DefaultTraceSampleRate  = 0.2
	DefaultAttachStacktrace = true
	DefaultFlushTimeout     = 2 * time.Second

	// API constants.
	DefaultHTTPAPIAddress = "localhost:18080"
	DefaultGRPCAPINetwork = "tcp"
	DefaultGRPCAPIAddress = "localhost:19090"
)
View Source
const Name = "GatewayD"

Variables

View Source
var (
	// Version is the semantic version of GatewayD.
	Version = "0.0.0"
	// VersionDetails is the build timestamp and the tagged commit hash.
	VersionDetails = ""
)

Functions

func GetDefaultConfigFilePath added in v0.6.5

func GetDefaultConfigFilePath(filename string) string

GetDefaultConfigFilePath returns the path of the default config file.

func VersionInfo added in v0.3.1

func VersionInfo() string

VersionInfo returns the full version and build information for the currently running GatewayD executable.

Types

type API added in v0.5.0

type API struct {
	Enabled     bool   `json:"enabled"`
	HTTPAddress string `json:"httpAddress"`
	GRPCAddress string `json:"grpcAddress"`
	GRPCNetwork string `json:"grpcNetwork" jsonschema:"enum=tcp,enum=udp,enum=unix"`
}

type AcceptancePolicy added in v0.2.4

type AcceptancePolicy string
const (
	Accept AcceptancePolicy = "accept" // Accept all custom hooks
	Reject AcceptancePolicy = "reject" // Reject all custom hooks
)

AcceptancePolicy is the acceptance policy for custom hooks.

type Client

type Client struct {
	Network            string        `json:"network" jsonschema:"enum=tcp,enum=udp,enum=unix"`
	Address            string        `json:"address"`
	TCPKeepAlive       bool          `json:"tcpKeepAlive"`
	TCPKeepAlivePeriod time.Duration `json:"tcpKeepAlivePeriod" jsonschema:"oneof_type=string;integer"`
	ReceiveChunkSize   int           `json:"receiveChunkSize"`
	ReceiveDeadline    time.Duration `json:"receiveDeadline" jsonschema:"oneof_type=string;integer"`
	ReceiveTimeout     time.Duration `json:"receiveTimeout" jsonschema:"oneof_type=string;integer"`
	SendDeadline       time.Duration `json:"sendDeadline" jsonschema:"oneof_type=string;integer"`
}

func (Client) GetReceiveChunkSize added in v0.6.7

func (c Client) GetReceiveChunkSize() int

GetReceiveChunkSize returns the receive chunk size from config file or default value.

func (Client) GetReceiveDeadline added in v0.6.7

func (c Client) GetReceiveDeadline() time.Duration

GetReceiveDeadline returns the receive deadline from config file or default value.

func (Client) GetReceiveTimeout added in v0.7.10

func (c Client) GetReceiveTimeout() time.Duration

GetReceiveTimeout returns the receive timeout from config file or default value.

func (Client) GetSendDeadline added in v0.6.7

func (c Client) GetSendDeadline() time.Duration

GetSendDeadline returns the send deadline from config file or default value.

func (Client) GetTCPKeepAlivePeriod added in v0.6.7

func (c Client) GetTCPKeepAlivePeriod() time.Duration

GetTCPKeepAlivePeriod returns the TCP keep alive period from config file or default value.

type CompatibilityPolicy added in v0.2.4

type CompatibilityPolicy string
const (
	Strict CompatibilityPolicy = "strict" // Expect all required plugins to be loaded and present
	Loose  CompatibilityPolicy = "loose"  // Load the plugin, even if the requirements are not met
)

CompatibilityPolicy is the compatibility policy for plugins.

type Config added in v0.3.1

type Config struct {
	GlobalKoanf *koanf.Koanf
	PluginKoanf *koanf.Koanf

	Global GlobalConfig
	Plugin PluginConfig
	// contains filtered or unexported fields
}

func NewConfig added in v0.3.1

func NewConfig(ctx context.Context, globalConfigFile, pluginConfigFile string) *Config

func (*Config) InitConfig added in v0.4.5

func (c *Config) InitConfig(ctx context.Context)

func (*Config) LoadDefaults added in v0.3.1

func (c *Config) LoadDefaults(ctx context.Context)

LoadDefaults loads the default configuration before loading the config files.

func (*Config) LoadGlobalConfigFile added in v0.3.1

func (c *Config) LoadGlobalConfigFile(ctx context.Context)

LoadGlobalConfig loads the plugin configuration file.

func (*Config) LoadGlobalEnvVars added in v0.3.1

func (c *Config) LoadGlobalEnvVars(ctx context.Context)

LoadGlobalEnvVars loads the environment variables into the global configuration with the given prefix, "GATEWAYD_".

func (*Config) LoadPluginConfigFile added in v0.3.1

func (c *Config) LoadPluginConfigFile(ctx context.Context)

LoadPluginConfig loads the plugin configuration file.

func (*Config) LoadPluginEnvVars added in v0.3.1

func (c *Config) LoadPluginEnvVars(ctx context.Context)

LoadPluginEnvVars loads the environment variables into the plugins configuration with the given prefix, "GATEWAYD_".

func (*Config) MergeGlobalConfig added in v0.3.1

func (c *Config) MergeGlobalConfig(
	ctx context.Context, updatedGlobalConfig map[string]interface{},
)

func (*Config) UnmarshalGlobalConfig added in v0.3.1

func (c *Config) UnmarshalGlobalConfig(ctx context.Context)

UnmarshalGlobalConfig unmarshals the global configuration for easier access.

func (*Config) UnmarshalPluginConfig added in v0.3.1

func (c *Config) UnmarshalPluginConfig(ctx context.Context)

UnmarshalPluginConfig unmarshals the plugin configuration for easier access.

func (*Config) ValidateGlobalConfig added in v0.6.6

func (c *Config) ValidateGlobalConfig(ctx context.Context)

type GlobalConfig

type GlobalConfig struct {
	API     API                 `json:"api"`
	Loggers map[string]*Logger  `json:"loggers"`
	Clients map[string]*Client  `json:"clients"`
	Pools   map[string]*Pool    `json:"pools"`
	Proxies map[string]*Proxy   `json:"proxies"`
	Servers map[string]*Server  `json:"servers"`
	Metrics map[string]*Metrics `json:"metrics"`
}

type IConfig added in v0.3.1

type IConfig interface {
	InitConfig(ctx context.Context)
	LoadDefaults(ctx context.Context)
	LoadPluginEnvVars(ctx context.Context)
	LoadGlobalEnvVars(ctx context.Context)
	LoadGlobalConfigFile(ctx context.Context)
	LoadPluginConfigFile(ctx context.Context)
	MergeGlobalConfig(ctx context.Context, updatedGlobalConfig map[string]interface{})
}

type LogOutput

type LogOutput uint
const (
	Console LogOutput = iota
	Stdout
	Stderr
	File
	Syslog
	RSyslog
)

LogOutput is the output type for the logger.

type Logger

type Logger struct {
	Output            []string `json:"output"`
	TimeFormat        string   `json:"timeFormat" jsonschema:"enum=unix,enum=unixms,enum=unixmicro,enum=unixnano"`
	Level             string   `json:"level" jsonschema:"enum=trace,enum=debug,enum=info,enum=warn,enum=error,enum=fatal,enum=panic,enum=disabled"`
	ConsoleTimeFormat string   `` /* 253-byte string literal not displayed */
	NoColor           bool     `json:"noColor"`

	FileName   string `json:"fileName"`
	MaxSize    int    `json:"maxSize"`
	MaxBackups int    `json:"maxBackups"`
	MaxAge     int    `json:"maxAge"`
	Compress   bool   `json:"compress"`
	LocalTime  bool   `json:"localTime"`

	RSyslogNetwork string `json:"rsyslogNetwork" jsonschema:"enum=tcp,enum=udp,enum=unix"`
	RSyslogAddress string `json:"rsyslogAddress"`
	SyslogPriority string `json:"syslogPriority" jsonschema:"enum=debug,enum=info,enum=notice,enum=warning,enum=err,enum=crit,enum=alert,enum=emerg"`
}

func (Logger) GetConsoleTimeFormat added in v0.3.2

func (l Logger) GetConsoleTimeFormat() string

GetConsoleTimeFormat returns the console logger's time format from config file.

func (Logger) GetLevel

func (l Logger) GetLevel() zerolog.Level

GetLevel returns the logger level from config file.

func (Logger) GetOutput

func (l Logger) GetOutput() []LogOutput

GetOutput returns the logger output from config file.

func (Logger) GetSyslogPriority added in v0.3.2

func (l Logger) GetSyslogPriority() syslog.Priority

GetSyslogPriority returns the rsyslog facility from config file.

func (Logger) GetTimeFormat

func (l Logger) GetTimeFormat() string

GetTimeFormat returns the logger time format from config file.

type Metrics added in v0.3.0

type Metrics struct {
	Enabled           bool          `json:"enabled"`
	Address           string        `json:"address"`
	Path              string        `json:"path"`
	ReadHeaderTimeout time.Duration `json:"readHeaderTimeout" jsonschema:"oneof_type=string;integer"`
	Timeout           time.Duration `json:"timeout" jsonschema:"oneof_type=string;integer"`
	CertFile          string        `json:"certFile"`
	KeyFile           string        `json:"keyFile"`
}

func (Metrics) GetReadHeaderTimeout added in v0.8.1

func (m Metrics) GetReadHeaderTimeout() time.Duration

func (Metrics) GetTimeout added in v0.8.1

func (m Metrics) GetTimeout() time.Duration

type Plugin

type Plugin struct {
	Name      string   `json:"name" jsonschema:"required"`
	Enabled   bool     `json:"enabled"`
	LocalPath string   `json:"localPath" jsonschema:"required"`
	Args      []string `json:"args"`
	Env       []string `json:"env" jsonschema:"required"`
	Checksum  string   `json:"checksum" jsonschema:"required"`
}

type PluginConfig

type PluginConfig struct {
	VerificationPolicy  string        `json:"verificationPolicy" jsonschema:"enum=passdown,enum=ignore,enum=abort,enum=remove"`
	CompatibilityPolicy string        `json:"compatibilityPolicy" jsonschema:"enum=strict,enum=loose"`
	AcceptancePolicy    string        `json:"acceptancePolicy" jsonschema:"enum=accept,enum=reject"`
	TerminationPolicy   string        `json:"terminationPolicy" jsonschema:"enum=continue,enum=stop"`
	EnableMetricsMerger bool          `json:"enableMetricsMerger"`
	MetricsMergerPeriod time.Duration `json:"metricsMergerPeriod" jsonschema:"oneof_type=string;integer"`
	HealthCheckPeriod   time.Duration `json:"healthCheckPeriod" jsonschema:"oneof_type=string;integer"`
	ReloadOnCrash       bool          `json:"reloadOnCrash"`
	Timeout             time.Duration `json:"timeout" jsonschema:"oneof_type=string;integer"`
	Plugins             []Plugin      `json:"plugins"`
}

func (PluginConfig) GetAcceptancePolicy added in v0.2.4

func (p PluginConfig) GetAcceptancePolicy() AcceptancePolicy

GetAcceptancePolicy returns the acceptance policy from plugin config file.

func (PluginConfig) GetPluginCompatibilityPolicy added in v0.2.4

func (p PluginConfig) GetPluginCompatibilityPolicy() CompatibilityPolicy

GetPluginCompatibilityPolicy returns the plugin compatibility policy from plugin config file.

func (PluginConfig) GetPlugins added in v0.5.2

func (p PluginConfig) GetPlugins(name ...string) []Plugin

GetPlugins returns the plugins from config file.

func (PluginConfig) GetTerminationPolicy added in v0.6.6

func (p PluginConfig) GetTerminationPolicy() TerminationPolicy

GetTerminationPolicy returns the termination policy from plugin config file.

func (PluginConfig) GetVerificationPolicy

func (p PluginConfig) GetVerificationPolicy() VerificationPolicy

GetVerificationPolicy returns the hook verification policy from plugin config file.

type Pool

type Pool struct {
	Size int `json:"size"`
}

func (Pool) GetSize

func (p Pool) GetSize() int

GetSize returns the pool size from config file.

type Proxy

type Proxy struct {
	Elastic             bool          `json:"elastic"`
	ReuseElasticClients bool          `json:"reuseElasticClients"`
	HealthCheckPeriod   time.Duration `json:"healthCheckPeriod" jsonschema:"oneof_type=string;integer"`
}

func (Proxy) GetHealthCheckPeriod added in v0.6.7

func (pr Proxy) GetHealthCheckPeriod() time.Duration

GetHealthCheckPeriod returns the health check period from config file or default value.

type Server

type Server struct {
	EnableTicker     bool          `json:"enableTicker"`
	TickInterval     time.Duration `json:"tickInterval" jsonschema:"oneof_type=string;integer"`
	Network          string        `json:"network" jsonschema:"enum=tcp,enum=udp,enum=unix"`
	Address          string        `json:"address"`
	EnableTLS        bool          `json:"enableTLS"` //nolint:tagliatelle
	CertFile         string        `json:"certFile"`
	KeyFile          string        `json:"keyFile"`
	HandshakeTimeout time.Duration `json:"handshakeTimeout" jsonschema:"oneof_type=string;integer"`
}

func (Server) GetTickInterval added in v0.6.7

func (s Server) GetTickInterval() time.Duration

GetTickInterval returns the tick interval from config file or default value.

type Status

type Status uint
const (
	Running Status = iota
	Stopped
)

Status is the status of the server.

type TerminationPolicy added in v0.6.4

type TerminationPolicy string
const (
	Continue TerminationPolicy = "continue" // Continue to the next function
	Stop     TerminationPolicy = "stop"     // Stop the execution of the functions
)

TerminationPolicy is the termination policy for the functions registered to the OnTrafficFromClient hook.

type VerificationPolicy added in v0.2.4

type VerificationPolicy string
const (
	// Non-strict (permissive) mode.
	PassDown VerificationPolicy = "passdown" // Pass down the extra keys/values in result to the next plugins
	// Strict mode.
	Ignore VerificationPolicy = "ignore" // Ignore errors and continue
	Abort  VerificationPolicy = "abort"  // Abort on first error and return results
	Remove VerificationPolicy = "remove" // Remove the hook from the list on error and continue
)

VerificationPolicy is the policy for hook verification.

Jump to

Keyboard shortcuts

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