Documentation
¶
Index ¶
- type DatabaseConfig
- func (c *DatabaseConfig) ConnectionString() string
- func (c *DatabaseConfig) GetEnabledReadReplicas() []ReadReplicaConfig
- func (c *DatabaseConfig) HasReadReplicas() bool
- func (c *DatabaseConfig) ReadReplicaConnectionStrings() []string
- func (c *DatabaseConfig) ReadReplicaDSNs() []string
- func (c *DatabaseConfig) Validate() error
- func (c *DatabaseConfig) ValidateReadReplicas() error
- type EncryptionConfig
- type HealthCheckConfig
- type ObservabilityConfig
- type PaginationConfig
- type ReadReplicaConfig
- type RetryConfig
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