Documentation
¶
Index ¶
- Constants
- func ErrCacheMiss(key string) error
- func ErrForbidden(operation string) error
- func ErrHTTPError(statusCode int, message string) error
- func ErrInvalidArgument(arg, message string) error
- func ErrInvalidConfig(message string) error
- func ErrNotFound(resource string) error
- func ErrNotImplemented(feature string) error
- func ErrRateLimit(limit float64) error
- func ErrServiceUnavailable(service string) error
- func ErrTimeout(operation string) error
- func ErrUnauthorized(operation string) error
- func ExecWithDefaultTimeout(ctx context.Context, name string, args ...string) *exec.Cmd
- func ExecWithTimeout(ctx context.Context, timeout time.Duration, name string, args ...string) *exec.Cmd
- func GetEnvBool(key string, defaultValue bool) bool
- func GetEnvDuration(key string, defaultValue time.Duration) time.Duration
- func GetEnvInt(key string, defaultValue int) int
- func GetEnvWithDefault(key, defaultValue string) string
- type AppSettings
- type CacheManager
- func (cm *CacheManager) Clear()
- func (cm *CacheManager) Delete(key string)
- func (cm *CacheManager) FlushExpired()
- func (cm *CacheManager) Get(key string) (any, bool)
- func (cm *CacheManager) GetWithExpiration(key string) (any, time.Time, bool)
- func (cm *CacheManager) ItemCount() int
- func (cm *CacheManager) Set(key string, value any, expiration time.Duration)
- func (cm *CacheManager) Stats() CacheStats
- type CacheSettings
- type CacheStats
- type DiskSettings
- type EnvironmentConfig
- type EnvironmentConfigView
- type FilesystemSettings
- type HTTPClient
- func (hc *HTTPClient) Delete(ctx context.Context, url string) (*HTTPResponse, error)
- func (hc *HTTPClient) Get(ctx context.Context, url string) (*HTTPResponse, error)
- func (hc *HTTPClient) Post(ctx context.Context, url string, body any) (*HTTPResponse, error)
- func (hc *HTTPClient) Put(ctx context.Context, url string, body any) (*HTTPResponse, error)
- func (hc *HTTPClient) WithAuth(authType, token string) *HTTPClient
- func (hc *HTTPClient) WithHeader(key, value string) *HTTPClient
- func (hc *HTTPClient) WithRetry(count int, waitTime, maxWaitTime time.Duration) *HTTPClient
- func (hc *HTTPClient) WithTimeout(timeout time.Duration) *HTTPClient
- type HTTPResponse
- type HTTPSettings
- type MonitoringSettings
- type NixAdapter
- func (n *NixAdapter) CollectGarbage(ctx context.Context) result.Result[domain.CleanResult]
- func (n *NixAdapter) GetStoreSize(ctx context.Context) result.Result[int64]
- func (n *NixAdapter) IsAvailable(ctx context.Context) bool
- func (n *NixAdapter) ListGenerations(ctx context.Context) result.Result[[]domain.NixGeneration]
- func (n *NixAdapter) ParseGeneration(line string) (domain.NixGeneration, error)
- func (n *NixAdapter) RemoveGeneration(ctx context.Context, genID domain.NixGenerationID) result.Result[domain.CleanResult]
- func (n *NixAdapter) SetDryRun(dryRun bool)
- type NixSettings
- type PerformanceSettings
- type RateLimitStats
- type RateLimiter
- type SecuritySettings
Constants ¶
const ( // DefaultCacheMaximumSize is the default maximum number of items in the cache. DefaultCacheMaximumSize = 10_000 // DefaultCacheExpiry is the default expiration time for cache entries. DefaultCacheExpiry = 24 * time.Hour )
Cache configuration constants.
const ( // HTTPDefaultTimeout is the default request timeout. HTTPDefaultTimeout = 30 * time.Second // HTTPDefaultRetryCount is the default number of retry attempts. HTTPDefaultRetryCount = 3 // HTTPDefaultRetryWaitTime is the default wait time between retries. HTTPDefaultRetryWaitTime = 1 * time.Second // HTTPDefaultRetryMaxWaitTime is the default maximum wait time between retries. HTTPDefaultRetryMaxWaitTime = 10 * time.Second // HTTPClientErrorMinStatus is the minimum status code for client errors (4xx). HTTPClientErrorMinStatus = 400 // HTTPServerErrorMinStatus is the minimum status code for server errors (5xx). HTTPServerErrorMinStatus = 500 )
const ( // NixDryRunStoreSizeGB is the estimated Nix store size for dry-run mode. NixDryRunStoreSizeGB = 50 // NixGCPostDelay is the delay after garbage collection to allow async operations. NixGCPostDelay = 500 * time.Millisecond // NixDryRunGenerationSizeMB is the estimated size per generation in dry-run mode. NixDryRunGenerationSizeMB = 50 // NixDryRunGCSizeMB is the estimated size freed from GC in dry-run mode. NixDryRunGCSizeMB = 100 // NixGenerationMinFields is the minimum number of fields expected in generation output. NixGenerationMinFields = 3 )
const DefaultTimeout = 5 * time.Minute
DefaultTimeout is the default timeout for external commands.
Variables ¶
This section is empty.
Functions ¶
func ErrForbidden ¶
ErrForbidden creates a forbidden error.
func ErrHTTPError ¶
ErrHTTPError creates an HTTP error.
func ErrInvalidArgument ¶
ErrInvalidArgument creates an argument validation error.
func ErrInvalidConfig ¶
ErrInvalidConfig creates a configuration validation error.
func ErrNotImplemented ¶
ErrNotImplemented creates a not implemented error.
func ErrServiceUnavailable ¶
ErrServiceUnavailable creates a service unavailable error.
func ErrUnauthorized ¶
ErrUnauthorized creates an unauthorized error.
func ExecWithDefaultTimeout ¶
ExecWithDefaultTimeout creates a command with the default 5-minute timeout. If the context already has a deadline, respects the existing deadline.
func ExecWithTimeout ¶
func ExecWithTimeout( ctx context.Context, timeout time.Duration, name string, args ...string, ) *exec.Cmd
ExecWithTimeout creates a command with the specified timeout. If the context already has a deadline, respects the earlier deadline.
func GetEnvBool ¶
GetEnvBool returns boolean environment variable with default.
func GetEnvDuration ¶
GetEnvDuration returns duration environment variable with default.
func GetEnvWithDefault ¶
GetEnvWithDefault returns environment variable with default value.
Types ¶
type AppSettings ¶
type AppSettings struct {
Debug bool `env:"DEBUG" envDefault:"false"`
Environment string `env:"ENV" envDefault:"development"`
LogLevel string `env:"LOG_LEVEL" envDefault:"info"`
Version string `env:"VERSION" envDefault:"dev"`
}
AppSettings holds application-level configuration.
type CacheManager ¶
type CacheManager struct {
// contains filtered or unexported fields
}
CacheManager provides in-memory caching functionality.
func NewCacheManager ¶
func NewCacheManager(defaultExpiration, cleanupInterval time.Duration) *CacheManager
NewCacheManager creates a new cache manager defaultExpiration: default TTL for cache entries cleanupInterval: interval for cleaning expired entries.
func (*CacheManager) Delete ¶
func (cm *CacheManager) Delete(key string)
Delete removes an item from cache.
func (*CacheManager) FlushExpired ¶
func (cm *CacheManager) FlushExpired()
FlushExpired removes all expired items by iterating and checking.
func (*CacheManager) Get ¶
func (cm *CacheManager) Get(key string) (any, bool)
Get retrieves a value from cache.
func (*CacheManager) GetWithExpiration ¶
GetWithExpiration retrieves a value with its expiration time.
func (*CacheManager) ItemCount ¶
func (cm *CacheManager) ItemCount() int
ItemCount returns the number of items in cache.
func (*CacheManager) Set ¶
func (cm *CacheManager) Set(key string, value any, expiration time.Duration)
Set stores a value in cache with expiration.
func (*CacheManager) Stats ¶
func (cm *CacheManager) Stats() CacheStats
Stats returns cache performance statistics.
type CacheSettings ¶
type CacheSettings struct {
Enabled bool `env:"CACHE_ENABLED" envDefault:"true"`
TTL time.Duration `env:"CACHE_TTL" envDefault:"5m"`
CleanupInterval time.Duration `env:"CACHE_CLEANUP_INTERVAL" envDefault:"10m"`
}
CacheSettings holds cache-related configuration.
type CacheStats ¶
type CacheStats struct {
Items int `json:"items"`
HitCount uint64 `json:"hitCount"`
MissCount uint64 `json:"missCount"`
HitRate float64 `json:"hitRate"`
}
CacheStats provides cache statistics.
type DiskSettings ¶
type DiskSettings struct {
MaxUsagePercent int `env:"MAX_DISK_USAGE_PERCENT" envDefault:"50"`
MinUsagePercent int `env:"MIN_DISK_USAGE_PERCENT" envDefault:"10"`
RoundingIncrement int `env:"ROUNDING_INCREMENT" envDefault:"10"`
}
DiskSettings holds disk usage configuration.
type EnvironmentConfig ¶
type EnvironmentConfig struct {
App AppSettings
Performance PerformanceSettings
Cache CacheSettings
HTTP HTTPSettings
Nix NixSettings
Disk DiskSettings
Security SecuritySettings
Filesystem FilesystemSettings
Monitoring MonitoringSettings
}
EnvironmentConfig holds environment-based configuration using composition.
func LoadEnvironmentConfig ¶
func LoadEnvironmentConfig() (*EnvironmentConfig, error)
LoadEnvironmentConfig loads configuration from environment variables.
func LoadEnvironmentConfigWithPrefix ¶
func LoadEnvironmentConfigWithPrefix(prefix string) (*EnvironmentConfig, error)
LoadEnvironmentConfigWithPrefix loads configuration with custom prefix.
func (*EnvironmentConfig) ToMap ¶
func (cfg *EnvironmentConfig) ToMap() map[string]any
ToMap converts config to map for legacy compatibility (deprecated).
func (*EnvironmentConfig) ToView ¶
func (cfg *EnvironmentConfig) ToView() EnvironmentConfigView
ToView converts config to strongly-typed view for logging/debugging.
func (*EnvironmentConfig) ValidateEnvironmentConfig ¶
func (cfg *EnvironmentConfig) ValidateEnvironmentConfig() error
ValidateEnvironmentConfig validates the loaded configuration.
type EnvironmentConfigView ¶
type EnvironmentConfigView struct {
Debug bool `json:"debug"`
Environment string `json:"environment"`
LogLevel string `json:"logLevel"`
Version string `json:"version"`
MaxConcurrency int `json:"maxConcurrency"`
Timeout time.Duration `json:"timeout"`
RateLimitRPS float64 `json:"rateLimitRps"`
CacheEnabled bool `json:"cacheEnabled"`
CacheTTL time.Duration `json:"cacheTtl"`
HTTPTimeout time.Duration `json:"httpTimeout"`
NixPath string `json:"nixPath"`
MaxNixGenerations int `json:"maxNixGenerations"`
SafeMode bool `json:"safeMode"`
RequireConfirmation bool `json:"requireConfirmation"`
TempDir string `json:"tempDir"`
ConfigFile string `json:"configFile"`
StateDirectory string `json:"stateDirectory"`
}
EnvironmentConfigView provides strongly-typed config representation for logging/debugging.
type FilesystemSettings ¶
type FilesystemSettings struct {
TempDir string `env:"TEMP_DIR" envDefault:"/tmp"`
ConfigFile string `env:"CONFIG_FILE" envDefault:"clean-wizard.yaml"`
StateDirectory string `env:"STATE_DIRECTORY" envDefault:"~/.clean-wizard"`
}
FilesystemSettings holds filesystem paths configuration.
type HTTPClient ¶
type HTTPClient struct {
// contains filtered or unexported fields
}
HTTPClient provides a modern HTTP client with built-in features.
func NewHTTPClient ¶
func NewHTTPClient() *HTTPClient
NewHTTPClient creates a new HTTP client with sensible defaults.
func (*HTTPClient) Delete ¶
func (hc *HTTPClient) Delete(ctx context.Context, url string) (*HTTPResponse, error)
Delete performs HTTP DELETE request.
func (*HTTPClient) Get ¶
func (hc *HTTPClient) Get(ctx context.Context, url string) (*HTTPResponse, error)
Get performs HTTP GET request.
func (*HTTPClient) Post ¶
func (hc *HTTPClient) Post(ctx context.Context, url string, body any) (*HTTPResponse, error)
Post performs HTTP POST request.
func (*HTTPClient) Put ¶
func (hc *HTTPClient) Put(ctx context.Context, url string, body any) (*HTTPResponse, error)
Put performs HTTP PUT request.
func (*HTTPClient) WithAuth ¶
func (hc *HTTPClient) WithAuth(authType, token string) *HTTPClient
WithAuth sets authentication header.
func (*HTTPClient) WithHeader ¶
func (hc *HTTPClient) WithHeader(key, value string) *HTTPClient
WithHeader adds a default header.
func (*HTTPClient) WithRetry ¶
func (hc *HTTPClient) WithRetry(count int, waitTime, maxWaitTime time.Duration) *HTTPClient
WithRetry configures retry behavior.
func (*HTTPClient) WithTimeout ¶
func (hc *HTTPClient) WithTimeout(timeout time.Duration) *HTTPClient
WithTimeout sets the request timeout.
type HTTPResponse ¶
type HTTPResponse struct {
StatusCode int `json:"statusCode"`
Body string `json:"body"`
Headers map[string][]string `json:"headers"`
Request *resty.Request `json:"request"`
}
HTTPResponse wraps resty response.
func (*HTTPResponse) IsClientError ¶
func (hr *HTTPResponse) IsClientError() bool
IsClientError returns true if status code indicates client error (4xx).
func (*HTTPResponse) IsError ¶
func (hr *HTTPResponse) IsError() bool
IsError returns true if status code indicates error (4xx, 5xx).
func (*HTTPResponse) IsServerError ¶
func (hr *HTTPResponse) IsServerError() bool
IsServerError returns true if status code indicates server error (5xx).
func (*HTTPResponse) IsSuccess ¶
func (hr *HTTPResponse) IsSuccess() bool
IsSuccess returns true if status code indicates success (2xx).
type HTTPSettings ¶
type HTTPSettings struct {
Timeout time.Duration `env:"HTTP_TIMEOUT" envDefault:"30s"`
RetryCount int `env:"HTTP_RETRY_COUNT" envDefault:"3"`
RetryWaitTime time.Duration `env:"HTTP_RETRY_WAIT_TIME" envDefault:"1s"`
RetryMaxWait time.Duration `env:"HTTP_RETRY_MAX_WAIT" envDefault:"10s"`
}
HTTPSettings holds HTTP client configuration.
type MonitoringSettings ¶
type MonitoringSettings struct {
MetricsEnabled bool `env:"METRICS_ENABLED" envDefault:"false"`
MetricsPort int `env:"METRICS_PORT" envDefault:"8080"`
MetricsPath string `env:"METRICS_PATH" envDefault:"/metrics"`
TracingEnabled bool `env:"TRACING_ENABLED" envDefault:"false"`
TracingEndpoint string `env:"TRACING_ENDPOINT" envDefault:""`
}
MonitoringSettings holds monitoring and observability configuration.
type NixAdapter ¶
type NixAdapter struct {
// contains filtered or unexported fields
}
NixAdapter wraps Nix package manager operations.
func NewNixAdapter ¶
func NewNixAdapter(timeout time.Duration, retries int) *NixAdapter
NewNixAdapter creates Nix adapter with configuration.
func (*NixAdapter) CollectGarbage ¶
func (n *NixAdapter) CollectGarbage(ctx context.Context) result.Result[domain.CleanResult]
CollectGarbage removes old Nix generations. In dry-run mode, returns a success result without actually running garbage collection.
func (*NixAdapter) GetStoreSize ¶
GetStoreSize returns Nix store size with dry-run isolation.
func (*NixAdapter) IsAvailable ¶
func (n *NixAdapter) IsAvailable(ctx context.Context) bool
IsAvailable checks if Nix is available and accessible.
func (*NixAdapter) ListGenerations ¶
func (n *NixAdapter) ListGenerations(ctx context.Context) result.Result[[]domain.NixGeneration]
ListGenerations lists Nix generations. In dry-run mode, still lists real generations but won't actually delete them.
func (*NixAdapter) ParseGeneration ¶
func (n *NixAdapter) ParseGeneration(line string) (domain.NixGeneration, error)
ParseGeneration parses generation line from nix-env output. Expected format when using --list-generations (without --profile):
"32 2026-01-12 08:03:14" "33 2026-01-15 21:14:05 (current)"
func (*NixAdapter) RemoveGeneration ¶
func (n *NixAdapter) RemoveGeneration( ctx context.Context, genID domain.NixGenerationID, ) result.Result[domain.CleanResult]
RemoveGeneration removes specific Nix generation. In dry-run mode, returns a success result without actually deleting.
func (*NixAdapter) SetDryRun ¶
func (n *NixAdapter) SetDryRun(dryRun bool)
SetDryRun configures dry-run mode for the adapter.
type NixSettings ¶
type NixSettings struct {
Path string `env:"NIX_PATH" envDefault:"/nix/var/nix"`
MaxGenerations int `env:"MAX_NIX_GENERATIONS" envDefault:"10"`
DefaultGenerations int `env:"DEFAULT_NIX_GENERATIONS" envDefault:"3"`
StoreSizeGB int `env:"NIX_STORE_SIZE_GB" envDefault:"300"`
}
NixSettings holds Nix-specific configuration.
type PerformanceSettings ¶
type PerformanceSettings struct {
MaxConcurrency int `env:"MAX_CONCURRENCY" envDefault:"4"`
Timeout time.Duration `env:"TIMEOUT" envDefault:"30s"`
RateLimitRPS float64 `env:"RATE_LIMIT_RPS" envDefault:"10"`
}
PerformanceSettings holds performance-related configuration.
type RateLimitStats ¶
type RateLimitStats struct {
Limit rate.Limit `json:"limit"`
Burst int `json:"burst"`
Tokens float64 `json:"tokens"`
}
RateLimitStats provides rate limiting statistics.
type RateLimiter ¶
type RateLimiter struct {
// contains filtered or unexported fields
}
RateLimiter provides rate limiting functionality for cleaning operations.
func NewRateLimiter ¶
func NewRateLimiter(rps float64, burst int) *RateLimiter
NewRateLimiter creates a new rate limiter rps: requests per second limit burst: maximum burst size
func (*RateLimiter) Allow ¶
func (rl *RateLimiter) Allow() bool
Allow returns true if the operation is allowed immediately.
func (*RateLimiter) Reservation ¶
func (rl *RateLimiter) Reservation() *rate.Reservation
Reservation returns a reservation for a future operation.
func (*RateLimiter) Stats ¶
func (rl *RateLimiter) Stats() RateLimitStats
Stats returns current rate limiter statistics.
type SecuritySettings ¶
type SecuritySettings struct {
SafeMode bool `env:"SAFE_MODE" envDefault:"true"`
RequireConfirmation bool `env:"REQUIRE_CONFIRMATION" envDefault:"true"`
}
SecuritySettings holds security-related configuration.