config

package
v1.0.3 Latest Latest
Warning

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

Go to latest
Published: Aug 21, 2025 License: MIT Imports: 14 Imported by: 0

Documentation

Overview

Package config - Hot Reload Configuration System Migrado de ClubPulse a gopherkit con mejoras significativas

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ValidateConfig

func ValidateConfig(config *BaseConfig) error

ValidateConfig validates the configuration using struct tags

Types

type BaseConfig

type BaseConfig struct {
	Server        ServerConfig        `json:"server" validate:"required"`
	Database      DatabaseConfig      `json:"database" validate:"required"`
	Observability ObservabilityConfig `json:"observability"`
	Security      SecurityConfig      `json:"security"`
	Cache         CacheConfig         `json:"cache"`
	External      ExternalConfig      `json:"external"`
}

BaseConfig holds common configuration for all services

func LoadBaseConfig

func LoadBaseConfig(serviceName string) (*BaseConfig, error)

LoadBaseConfig loads base configuration from environment variables

func (*BaseConfig) IsDevelopment

func (c *BaseConfig) IsDevelopment() bool

IsDevelopment returns true if the environment is development

func (*BaseConfig) IsProduction

func (c *BaseConfig) IsProduction() bool

IsProduction returns true if the environment is production

func (*BaseConfig) IsStaging

func (c *BaseConfig) IsStaging() bool

IsStaging returns true if the environment is staging

type CORSConfig

type CORSConfig struct {
	AllowedOrigins   []string `json:"allowed_origins"`
	AllowedMethods   []string `json:"allowed_methods"`
	AllowedHeaders   []string `json:"allowed_headers"`
	ExposedHeaders   []string `json:"exposed_headers"`
	AllowCredentials bool     `json:"allow_credentials"`
	MaxAge           int      `json:"max_age"`
}

CORSConfig holds CORS configuration

type CacheConfig

type CacheConfig struct {
	Enabled  bool          `json:"enabled"`
	Host     string        `json:"host"`
	Port     string        `json:"port"`
	Password string        `json:"password"`
	DB       int           `json:"db"`
	Prefix   string        `json:"prefix"`
	TTL      time.Duration `json:"ttl"`
}

CacheConfig holds cache-related configuration

type CacheConfigDynamic added in v1.0.2

type CacheConfigDynamic struct {
	Enabled            bool          `json:"enabled"`
	TTL                time.Duration `json:"ttl"`
	Namespace          string        `json:"namespace"`
	MaxSize            int64         `json:"max_size"`
	EvictionPolicy     string        `json:"eviction_policy"`
	CompressionEnabled bool          `json:"compression_enabled"`
	PrefetchEnabled    bool          `json:"prefetch_enabled"`
	CacheWarmupEnabled bool          `json:"cache_warmup_enabled"`
}

CacheConfigDynamic configuración de cache que puede cambiar dinámicamente

type CircuitBreakerConfig

type CircuitBreakerConfig struct {
	Enabled             bool          `json:"enabled"`
	MaxRequests         uint32        `json:"max_requests"`
	Interval            time.Duration `json:"interval"`
	Timeout             time.Duration `json:"timeout"`
	ReadyToTripRequests uint32        `json:"ready_to_trip_requests"`
	ReadyToTripRatio    float64       `json:"ready_to_trip_ratio"`
}

CircuitBreakerConfig holds circuit breaker configuration

type DatabaseConfig

type DatabaseConfig struct {
	URL             string        `json:"url"`
	Host            string        `json:"host"`
	Port            string        `json:"port"`
	Database        string        `json:"database"`
	User            string        `json:"user"`
	Password        string        `json:"password"`
	SSLMode         string        `json:"ssl_mode"`
	MaxOpenConns    int           `json:"max_open_conns"`
	MaxIdleConns    int           `json:"max_idle_conns"`
	ConnMaxLifetime time.Duration `json:"conn_max_lifetime"`
	ConnMaxIdleTime time.Duration `json:"conn_max_idle_time"`
}

DatabaseConfig holds database-related configuration

func (*DatabaseConfig) GetDSN

func (c *DatabaseConfig) GetDSN() string

GetDSN returns the database connection string

type DefaultLogger added in v1.0.2

type DefaultLogger struct{}

DefaultLogger implementación simple de logger

func (*DefaultLogger) Debugf added in v1.0.2

func (dl *DefaultLogger) Debugf(format string, args ...interface{})

func (*DefaultLogger) Error added in v1.0.2

func (dl *DefaultLogger) Error(msg string)

func (*DefaultLogger) Info added in v1.0.2

func (dl *DefaultLogger) Info(msg string)

func (*DefaultLogger) Warn added in v1.0.2

func (dl *DefaultLogger) Warn(msg string)

func (*DefaultLogger) WithField added in v1.0.2

func (dl *DefaultLogger) WithField(key string, value interface{}) Logger

type DynamicConfig added in v1.0.2

type DynamicConfig struct {
	// Configuración de base de datos
	DatabaseMode   string `json:"database_mode"`
	DatabaseURL    string `json:"database_url"`
	DatabaseSchema string `json:"database_schema"`

	// Configuraciones específicas
	CacheConfig      CacheConfigDynamic      `json:"cache"`
	FallbackConfig   FallbackConfigDynamic   `json:"fallback"`
	SecurityConfig   SecurityConfigDynamic   `json:"security"`
	MonitoringConfig MonitoringConfigDynamic `json:"monitoring"`

	// Configuraciones adicionales
	FeatureFlags   map[string]bool   `json:"feature_flags"`
	CustomSettings map[string]string `json:"custom_settings"`

	// Metadatos
	LastUpdated time.Time `json:"last_updated"`
	Version     int       `json:"version"`
	LoadedFrom  string    `json:"loaded_from"`
	Environment string    `json:"environment"`
}

DynamicConfig configuración que puede recargarse en caliente mejorada

type ExternalConfig

type ExternalConfig struct {
	AuthAPIURL         string        `json:"auth_api_url"`
	UserAPIURL         string        `json:"user_api_url"`
	NotificationURL    string        `json:"notification_url"`
	CalendarAPIURL     string        `json:"calendar_api_url"`
	ChampionshipAPIURL string        `json:"championship_api_url"`
	Timeout            time.Duration `json:"timeout"`
	RetryAttempts      int           `json:"retry_attempts"`
	RetryDelay         time.Duration `json:"retry_delay"`
}

ExternalConfig holds external service configuration

type FallbackConfigDynamic added in v1.0.2

type FallbackConfigDynamic struct {
	Enabled               bool          `json:"enabled"`
	HealthCheckInterval   time.Duration `json:"health_check_interval"`
	FailureThreshold      int           `json:"failure_threshold"`
	RecoveryCheckInterval time.Duration `json:"recovery_check_interval"`
	AlertWebhookURL       string        `json:"alert_webhook_url"`
	MaxRetryAttempts      int           `json:"max_retry_attempts"`
	AutoRecoveryEnabled   bool          `json:"auto_recovery_enabled"`
	NotificationsEnabled  bool          `json:"notifications_enabled"`
}

FallbackConfigDynamic configuración de fallback que puede cambiar dinámicamente

type HotReloadMetrics added in v1.0.2

type HotReloadMetrics struct {
	TotalReloads       int64            `json:"total_reloads"`
	SuccessfulReloads  int64            `json:"successful_reloads"`
	FailedReloads      int64            `json:"failed_reloads"`
	CallbackExecutions int64            `json:"callback_executions"`
	WatchedFilesCount  int              `json:"watched_files_count"`
	AverageReloadTime  time.Duration    `json:"average_reload_time"`
	LastReloadTime     time.Time        `json:"last_reload_time"`
	ReloadHistory      []ReloadEvent    `json:"reload_history"`
	FileChangeEvents   map[string]int64 `json:"file_change_events"`
	CallbackErrors     map[string]int64 `json:"callback_errors"`
	// contains filtered or unexported fields
}

HotReloadMetrics métricas del sistema de hot reload

type HotReloader added in v1.0.2

type HotReloader struct {
	// contains filtered or unexported fields
}

HotReloader gestiona la recarga en caliente de configuraciones mejorado

func NewHotReloader added in v1.0.2

func NewHotReloader(configFile string, baseConfig *BaseConfig, logger Logger) (*HotReloader, error)

NewHotReloader crea un nuevo sistema de hot-reload mejorado

func (*HotReloader) GetConfig added in v1.0.2

func (hr *HotReloader) GetConfig() *DynamicConfig

GetConfig obtiene la configuración actual de forma thread-safe

func (*HotReloader) GetLastReloadTime added in v1.0.2

func (hr *HotReloader) GetLastReloadTime() time.Time

GetLastReloadTime obtiene el tiempo de la última recarga

func (*HotReloader) GetMetrics added in v1.0.2

func (hr *HotReloader) GetMetrics() *HotReloadMetrics

GetMetrics retorna las métricas del hot reloader

func (*HotReloader) GetWatchedFiles added in v1.0.2

func (hr *HotReloader) GetWatchedFiles() []string

GetWatchedFiles obtiene la lista de archivos observados

func (*HotReloader) IsFeatureEnabled added in v1.0.2

func (hr *HotReloader) IsFeatureEnabled(featureName string) bool

IsFeatureEnabled verifica si una feature flag está habilitada

func (*HotReloader) IsRunning added in v1.0.2

func (hr *HotReloader) IsRunning() bool

IsRunning verifica si el sistema está corriendo

func (*HotReloader) RegisterCallback added in v1.0.2

func (hr *HotReloader) RegisterCallback(name string, callback ReloadCallback)

RegisterCallback registra un callback para cambios de configuración

func (*HotReloader) SaveConfig added in v1.0.2

func (hr *HotReloader) SaveConfig() error

SaveConfig guarda la configuración actual al archivo

func (*HotReloader) Start added in v1.0.2

func (hr *HotReloader) Start() error

Start inicia el sistema de hot-reload mejorado

func (*HotReloader) Stop added in v1.0.2

func (hr *HotReloader) Stop() error

Stop detiene el sistema de hot-reload con limpieza mejorada

func (*HotReloader) UpdateConfig added in v1.0.2

func (hr *HotReloader) UpdateConfig(updates map[string]interface{}) error

UpdateConfig actualiza la configuración programáticamente mejorado

type JWTConfig

type JWTConfig struct {
	Secret          string        `json:"secret" validate:"required,min=32"`
	RefreshSecret   string        `json:"refresh_secret"`
	AccessDuration  time.Duration `json:"access_duration"`
	RefreshDuration time.Duration `json:"refresh_duration"`
	Issuer          string        `json:"issuer"`
}

JWTConfig holds JWT-related configuration

type Logger added in v1.0.2

type Logger interface {
	Info(msg string)
	Warn(msg string)
	Error(msg string)
	Debugf(format string, args ...interface{})
	WithField(key string, value interface{}) Logger
}

Logger interface para logging

type MonitoringConfigDynamic added in v1.0.2

type MonitoringConfigDynamic struct {
	Enabled          bool    `json:"enabled"`
	MetricsEnabled   bool    `json:"metrics_enabled"`
	MetricsPort      int     `json:"metrics_port"`
	HealthCheckPort  int     `json:"health_check_port"`
	LogLevel         string  `json:"log_level"`
	SamplingRate     float64 `json:"sampling_rate"`
	AlertsEnabled    bool    `json:"alerts_enabled"`
	DashboardEnabled bool    `json:"dashboard_enabled"`
	TracingEnabled   bool    `json:"tracing_enabled"`
	ProfilerEnabled  bool    `json:"profiler_enabled"`
}

MonitoringConfigDynamic configuración de monitoreo que puede cambiar dinámicamente

type ObservabilityConfig

type ObservabilityConfig struct {
	TracingEnabled bool   `json:"tracing_enabled"`
	MetricsEnabled bool   `json:"metrics_enabled"`
	LogLevel       string `json:"log_level" validate:"oneof=debug info warn error"`
	ServiceName    string `json:"service_name" validate:"required"`
	ServiceVersion string `json:"service_version"`
	JaegerEndpoint string `json:"jaeger_endpoint"`
	OTLPEndpoint   string `json:"otlp_endpoint"`
}

ObservabilityConfig holds observability-related configuration

type RateLimitConfig

type RateLimitConfig struct {
	Enabled           bool          `json:"enabled"`
	RequestsPerMinute int           `json:"requests_per_minute"`
	BurstSize         int           `json:"burst_size"`
	WindowSize        time.Duration `json:"window_size"`
	RedisEnabled      bool          `json:"redis_enabled"`
}

RateLimitConfig holds rate limiting configuration

type ReloadCallback added in v1.0.2

type ReloadCallback func(oldConfig, newConfig *DynamicConfig) error

ReloadCallback función que se ejecuta cuando cambia la configuración

type ReloadEvent added in v1.0.2

type ReloadEvent struct {
	File        string        `json:"file"`
	Type        string        `json:"type"`
	Timestamp   time.Time     `json:"timestamp"`
	Success     bool          `json:"success"`
	Error       string        `json:"error,omitempty"`
	Duration    time.Duration `json:"duration"`
	OldVersion  int           `json:"old_version"`
	NewVersion  int           `json:"new_version"`
	ChangedKeys []string      `json:"changed_keys,omitempty"`
}

ReloadEvent evento de recarga mejorado

type SecurityConfig

type SecurityConfig struct {
	RateLimit      RateLimitConfig      `json:"rate_limit"`
	CircuitBreaker CircuitBreakerConfig `json:"circuit_breaker"`
	CORS           CORSConfig           `json:"cors"`
	JWT            JWTConfig            `json:"jwt"`
}

SecurityConfig holds security-related configuration

type SecurityConfigDynamic added in v1.0.2

type SecurityConfigDynamic struct {
	RLSEnabled        bool          `json:"rls_enabled"`
	JWTSecret         string        `json:"jwt_secret"`
	TokenTTL          time.Duration `json:"token_ttl"`
	RateLimitEnabled  bool          `json:"rate_limit_enabled"`
	RateLimitRPS      int           `json:"rate_limit_rps"`
	CORSOrigins       []string      `json:"cors_origins"`
	SecurityHeaders   bool          `json:"security_headers"`
	EncryptionEnabled bool          `json:"encryption_enabled"`
	AuditLogEnabled   bool          `json:"audit_log_enabled"`
}

SecurityConfigDynamic configuración de seguridad que puede cambiar dinámicamente

type ServerConfig

type ServerConfig struct {
	Port            string        `json:"port" validate:"required,min=4,max=5"`
	Environment     string        `json:"environment" validate:"required,oneof=development staging production"`
	MetricsPort     string        `json:"metrics_port" validate:"required,min=4,max=5"`
	ReadTimeout     time.Duration `json:"read_timeout"`
	WriteTimeout    time.Duration `json:"write_timeout"`
	IdleTimeout     time.Duration `json:"idle_timeout"`
	ShutdownTimeout time.Duration `json:"shutdown_timeout"`
	MaxRequestSize  int64         `json:"max_request_size"`
}

ServerConfig holds server-related configuration

Jump to

Keyboard shortcuts

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