Files
2026-07-27 19:31:43 +08:00

82 lines
1.9 KiB
Go

package fusereadcache
import (
"context"
"strconv"
"strings"
"litepan/internal/settings"
)
type Config struct {
Enabled bool
MaxGB int
MaxBytes int64
RetentionDays int
EvictionPolicy string
}
func LoadConfig(ctx context.Context, svc *settings.Service) Config {
if svc == nil {
return Config{
MaxGB: DefaultMaxGB,
MaxBytes: int64(DefaultMaxGB) * 1024 * 1024 * 1024,
RetentionDays: DefaultRetention,
EvictionPolicy: DefaultPolicy,
}
}
maxGB := svc.Int(settings.KeyFuseReadCacheMaxGB)
if maxGB < MinMaxGB {
maxGB = DefaultMaxGB
}
if maxGB > MaxMaxGB {
maxGB = MaxMaxGB
}
retention := svc.Int(settings.KeyFuseReadCacheRetentionDays)
if retention < MinRetentionDays {
retention = DefaultRetention
}
if retention > MaxRetentionDays {
retention = MaxRetentionDays
}
policy := strings.TrimSpace(svc.String(settings.KeyFuseReadCacheEvictionPolicy))
if policy != PolicyLargeFile {
policy = PolicyLRU
}
return Config{
Enabled: svc.Bool(settings.KeyFuseReadCacheEnabled),
MaxGB: maxGB,
MaxBytes: int64(maxGB) * 1024 * 1024 * 1024,
RetentionDays: retention,
EvictionPolicy: policy,
}
}
func ConfigPatch(enabled bool, maxGB, retentionDays int, policy string) map[string]string {
if policy != PolicyLargeFile {
policy = PolicyLRU
}
if maxGB < MinMaxGB {
maxGB = MinMaxGB
}
if maxGB > MaxMaxGB {
maxGB = MaxMaxGB
}
if retentionDays < MinRetentionDays {
retentionDays = MinRetentionDays
}
if retentionDays > MaxRetentionDays {
retentionDays = MaxRetentionDays
}
enabledVal := "false"
if enabled {
enabledVal = "true"
}
return map[string]string{
settings.KeyFuseReadCacheEnabled: enabledVal,
settings.KeyFuseReadCacheMaxGB: strconv.Itoa(maxGB),
settings.KeyFuseReadCacheRetentionDays: strconv.Itoa(retentionDays),
settings.KeyFuseReadCacheEvictionPolicy: policy,
}
}