config

package
v1.0.0 Latest Latest
Warning

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

Go to latest
Published: Sep 15, 2025 License: MIT Imports: 2 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type DatabaseConfig

type DatabaseConfig struct {
	// Basic connection settings
	Driver   string `yaml:"driver" json:"driver" validate:"required,oneof=postgres mysql sqlite sqlserver,max=20"`
	Host     string `yaml:"host" json:"host" validate:"required,hostname,max=255"`
	Port     int    `yaml:"port" json:"port" validate:"required,min=1,max=65535"`
	Database string `yaml:"database" json:"database" validate:"required,min=1,max=64"`
	Username string `yaml:"username" json:"username" validate:"required,min=1,max=32"`
	Password string `yaml:"password" json:"password" validate:"required,min=1,max=128"`
	SSLMode  string `yaml:"ssl_mode" json:"ssl_mode" validate:"oneof=disable require verify-ca verify-full,max=20"`

	// Connection Pool Configuration
	MaxConnections     int           `yaml:"max_connections" json:"max_connections" validate:"required,min=1,max=10000"`
	MinConnections     int           `yaml:"min_connections" json:"min_connections" validate:"required,min=0,max=1000"`
	MaxIdleConnections int           `yaml:"max_idle_connections" json:"max_idle_connections" validate:"required,min=0,max=1000"`
	MaxLifetime        time.Duration `yaml:"max_lifetime" json:"max_lifetime" validate:"required,min=1m,max=12h"`
	IdleTimeout        time.Duration `yaml:"idle_timeout" json:"idle_timeout" validate:"required,min=30s,max=1h"`
	AcquireTimeout     time.Duration `yaml:"acquire_timeout" json:"acquire_timeout" validate:"required,min=1s,max=30s"`
	LeakDetection      bool          `yaml:"leak_detection" json:"leak_detection"`
	LeakTimeout        time.Duration `yaml:"leak_timeout" json:"leak_timeout" validate:"omitempty,min=1s,max=5m"`

	// Timeout Configuration
	ConnectionTimeout  time.Duration `yaml:"connection_timeout" json:"connection_timeout" validate:"required,min=1s,max=30s"`
	QueryTimeout       time.Duration `yaml:"query_timeout" json:"query_timeout" validate:"required,min=100ms,max=5m"`
	TransactionTimeout time.Duration `yaml:"transaction_timeout" json:"transaction_timeout" validate:"required,min=1s,max=10m"`
	StatementTimeout   time.Duration `yaml:"statement_timeout" json:"statement_timeout" validate:"required,min=100ms,max=1m"`
	CancelTimeout      time.Duration `yaml:"cancel_timeout" json:"cancel_timeout" validate:"required,min=100ms,max=30s"`

	// Retry Configuration
	Retry RetryConfig `yaml:"retry" json:"retry" validate:"required"`

	// Health Check Configuration
	HealthCheck HealthCheckConfig `yaml:"health_check" json:"health_check" validate:"required"`

	// Logging Configuration
	LogLevel  string            `yaml:"log_level" json:"log_level" validate:"required,oneof=debug info warn error fatal,max=10"`
	LogFormat string            `yaml:"log_format" json:"log_format" validate:"required,oneof=json text,max=1000"`
	LogFields map[string]string `yaml:"log_fields" json:"log_fields" validate:"omitempty,max=500"`

	// Observability Configuration
	Metrics             bool          `yaml:"metrics" json:"metrics"`
	Tracing             bool          `yaml:"tracing" json:"tracing"`
	HealthCheckInterval time.Duration `yaml:"health_check_interval" json:"health_check_interval" validate:"required,min=5s,max=5m"`

	// Security Configuration
	MaxQuerySize       int  `yaml:"max_query_size" json:"max_query_size" validate:"required,min=1024,max=1048576"`
	MaxResultSize      int  `yaml:"max_result_size" json:"max_result_size" validate:"required,min=1000,max=1000000"`
	EnableQueryLogging bool `yaml:"enable_query_logging" json:"enable_query_logging" validate:"required,oneof=true false,default=true"`
	MaskSensitiveData  bool `yaml:"mask_sensitive_data" json:"mask_sensitive_data" validate:"required,oneof=true false,default=true"`

	// Pagination Configuration
	Pagination *PaginationConfig `yaml:"pagination" json:"pagination" validate:"required"`

	// Encryption Configuration
	Encryption *EncryptionConfig `yaml:"encryption" json:"encryption" validate:"omitempty"`

	// Read Replicas Configuration
	ReadReplicas []ReadReplicaConfig `yaml:"read_replicas" json:"read_replicas" validate:"omitempty,dive,max=10"`
}

DatabaseConfig represents comprehensive database configuration with connection pooling and timeout support

func DefaultDatabaseConfig

func DefaultDatabaseConfig() *DatabaseConfig

DefaultDatabaseConfig returns a default database configuration

func (*DatabaseConfig) ConnectionString

func (c *DatabaseConfig) ConnectionString() string

ConnectionString returns the database connection string

func (*DatabaseConfig) GetEnabledReadReplicas

func (c *DatabaseConfig) GetEnabledReadReplicas() []ReadReplicaConfig

GetEnabledReadReplicas returns only the enabled read replicas

func (*DatabaseConfig) HasReadReplicas

func (c *DatabaseConfig) HasReadReplicas() bool

HasReadReplicas returns true if there are any enabled read replicas

func (*DatabaseConfig) ReadReplicaConnectionStrings

func (c *DatabaseConfig) ReadReplicaConnectionStrings() []string

ReadReplicaConnectionStrings returns connection strings for all enabled read replicas

func (*DatabaseConfig) ReadReplicaDSNs

func (c *DatabaseConfig) ReadReplicaDSNs() []string

ReadReplicaDSNs returns DSN strings for all enabled read replicas (GORM format)

func (*DatabaseConfig) Validate

func (c *DatabaseConfig) Validate() error

Validate validates the DatabaseConfig

func (*DatabaseConfig) ValidateReadReplicas

func (c *DatabaseConfig) ValidateReadReplicas() error

ValidateReadReplicas validates the read replica configuration

type EncryptionConfig

type EncryptionConfig struct {
	// Global encryption settings
	Enabled   bool   `yaml:"enabled" json:"enabled"`
	Algorithm string `yaml:"algorithm" json:"algorithm" validate:"required_if=Enabled true,oneof=aes-256-gcm aes-256-cbc chacha20-poly1305,max=32"`
}

EncryptionConfig represents encryption configuration

type HealthCheckConfig

type HealthCheckConfig struct {
	Enabled      bool          `yaml:"enabled" json:"enabled"`
	Interval     time.Duration `yaml:"interval" json:"interval" validate:"required_if=Enabled true,min=5s,max=5m"`
	Timeout      time.Duration `yaml:"timeout" json:"timeout" validate:"required_if=Enabled true,min=1s,max=30s"`
	Query        string        `yaml:"query" json:"query" validate:"required_if=Enabled true,min=1,max=1000"`
	MaxFailures  int           `yaml:"max_failures" json:"max_failures" validate:"required_if=Enabled true,min=1,max=10"`
	RecoveryTime time.Duration `yaml:"recovery_time" json:"recovery_time" validate:"required_if=Enabled true,min=1s,max=10m"`
}

HealthCheckConfig represents health check configuration

type ObservabilityConfig

type ObservabilityConfig struct {
	EnableMetrics bool   `yaml:"enable_metrics" json:"enable_metrics"`
	EnableTracing bool   `yaml:"enable_tracing" json:"enable_tracing"`
	EnableLogging bool   `yaml:"enable_logging" json:"enable_logging"`
	LogLevel      string `yaml:"log_level" json:"log_level" validate:"omitempty,oneof=debug info warn error fatal,max=10"`
}

ObservabilityConfig represents observability configuration

type PaginationConfig

type PaginationConfig struct {
	DefaultLimit int `yaml:"default_limit" json:"default_limit" validate:"required,min=1,max=1000"`
	MaxLimit     int `yaml:"max_limit" json:"max_limit" validate:"required,min=1,max=1000"`
	MinLimit     int `yaml:"min_limit" json:"min_limit" validate:"required,min=1,max=1000"`
}

PaginationConfig represents pagination configuration

type ReadReplicaConfig

type ReadReplicaConfig struct {
	// Basic connection settings for read replica
	Host     string `yaml:"host" json:"host" validate:"required,hostname,max=255"`
	Port     int    `yaml:"port" json:"port" validate:"required,min=1,max=65535"`
	Database string `yaml:"database" json:"database" validate:"omitempty,min=1,max=64"`
	Username string `yaml:"username" json:"username" validate:"omitempty,min=1,max=32"`
	Password string `yaml:"password" json:"password" validate:"omitempty,min=1,max=128"`
	SSLMode  string `yaml:"ssl_mode" json:"ssl_mode" validate:"omitempty,oneof=disable require verify-ca verify-full,max=20"`

	// Read replica specific settings
	Weight     int           `yaml:"weight" json:"weight" validate:"omitempty,min=1,max=100"`            // Load balancing weight
	MaxLatency time.Duration `yaml:"max_latency" json:"max_latency" validate:"omitempty,min=1ms,max=5s"` // Maximum acceptable latency
	Enabled    bool          `yaml:"enabled" json:"enabled" validate:"omitempty,default=true"`           // Whether this replica is enabled

	// Connection pool settings for read replica (can override main config)
	MaxConnections     int           `yaml:"max_connections" json:"max_connections" validate:"omitempty,min=1,max=1000"`
	MinConnections     int           `yaml:"min_connections" json:"min_connections" validate:"omitempty,min=0,max=100"`
	MaxIdleConnections int           `yaml:"max_idle_connections" json:"max_idle_connections" validate:"omitempty,min=0,max=100"`
	MaxLifetime        time.Duration `yaml:"max_lifetime" json:"max_lifetime" validate:"omitempty,min=1m,max=12h"`
	IdleTimeout        time.Duration `yaml:"idle_timeout" json:"idle_timeout" validate:"omitempty,min=30s,max=1h"`
}

ReadReplicaConfig represents read replica configuration

type RetryConfig

type RetryConfig struct {
	Enabled            bool          `yaml:"enabled" json:"enabled"`
	MaxAttempts        int           `yaml:"max_attempts" json:"max_attempts" validate:"required_if=Enabled true,min=1,max=10"`
	InitialDelay       time.Duration `yaml:"initial_delay" json:"initial_delay" validate:"required_if=Enabled true,min=100ms,max=30s"`
	MaxDelay           time.Duration `yaml:"max_delay" json:"max_delay" validate:"required_if=Enabled true,min=1s,max=5m"`
	BackoffMultiplier  float64       `yaml:"backoff_multiplier" json:"backoff_multiplier" validate:"required_if=Enabled true,min=1.0,max=5.0"`
	Jitter             bool          `yaml:"jitter" json:"jitter"`
	RetryableErrors    []string      `yaml:"retryable_errors" json:"retryable_errors" validate:"omitempty,dive,min=1,max=50,max=20"`
	NonRetryableErrors []string      `yaml:"non_retryable_errors" json:"non_retryable_errors" validate:"omitempty,dive,min=1,max=50,max=20"`
}

RetryConfig represents retry configuration

Jump to

Keyboard shortcuts

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