package treeconfig import ( "fmt" "time" "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-node/config" "github.com/nspcc-dev/neo-go/pkg/crypto/keys" ) const ( subsection = "tree" ) // TreeConfig is a wrapper over "tree" config section // which provides access to the configuration of the tree service. type TreeConfig struct { cfg *config.Config } // Tree returns structure that provides access to a "tree" // configuration subsection. func Tree(c *config.Config) TreeConfig { return TreeConfig{ c.Sub(subsection), } } // Enabled returns the value of "enabled" config parameter // from the "tree" section. // // Returns `false` if config value is not specified. func (c TreeConfig) Enabled() bool { return config.BoolSafe(c.cfg, "enabled") } // CacheSize returns the value of "cache_size" config parameter // from the "tree" section. // // Returns `0` if config value is not specified. func (c TreeConfig) CacheSize() int { return int(config.IntSafe(c.cfg, "cache_size")) } // ReplicationTimeout returns the value of "replication_timeout" // config parameter from the "tree" section. // // Returns `0` if config value is not specified. func (c TreeConfig) ReplicationTimeout() time.Duration { return config.DurationSafe(c.cfg, "replication_timeout") } // ReplicationChannelCapacity returns the value of "replication_channel_capacity" // config parameter from the "tree" section. // // Returns `0` if config value is not specified. func (c TreeConfig) ReplicationChannelCapacity() int { return int(config.IntSafe(c.cfg, "replication_channel_capacity")) } // ReplicationWorkerCount returns the value of "replication_worker_count" // config parameter from the "tree" section. // // Returns `0` if config value is not specified. func (c TreeConfig) ReplicationWorkerCount() int { return int(config.IntSafe(c.cfg, "replication_worker_count")) } // SyncInterval returns the value of "sync_interval" // config parameter from the "tree" section. // // Returns 0 if config value is not specified. func (c TreeConfig) SyncInterval() time.Duration { return config.DurationSafe(c.cfg, "sync_interval") } // AuthorizedKeys parses and returns an array of "authorized_keys" config // parameter from "tree" section. // // Returns an empty list if not set. func (c TreeConfig) AuthorizedKeys() keys.PublicKeys { authorizedKeysStr := config.StringSliceSafe(c.cfg, "authorized_keys") authorizedKeys := make(keys.PublicKeys, 0, len(authorizedKeysStr)) for i := range authorizedKeysStr { pub, err := keys.NewPublicKeyFromString(authorizedKeysStr[i]) if err != nil { panic(fmt.Errorf("could not parse Tree authorized key %s: %w", authorizedKeysStr[i], err)) } authorizedKeys = append(authorizedKeys, pub) } return authorizedKeys }