redis-shake工具
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

90 lines
1.8 KiB

package config
import (
"bytes"
"fmt"
"github.com/pelletier/go-toml/v2"
"io/ioutil"
"os"
"runtime"
)
type tomlSource struct {
Address string `toml:"address"`
Password string `toml:"password"`
IsTLS bool `toml:"tls"`
}
type tomlTarget struct {
Type string `toml:"type"`
Address string `toml:"address"`
Password string `toml:"password"`
IsTLS bool `toml:"tls"`
}
type tomlAdvanced struct {
Dir string `toml:"dir"`
Ncpu int `toml:"ncpu"`
PprofPort int `toml:"pprof_port"`
// log
LogFile string `toml:"log_file"`
LogLevel string `toml:"log_level"`
LogInterval int `toml:"log_interval"`
// rdb restore
RDBRestoreCommandBehavior string `toml:"rdb_restore_command_behavior"`
// for writer
PipelineCountLimit uint64 `toml:"pipeline_count_limit"`
TargetRedisClientMaxQuerybufLen uint64 `toml:"target_redis_client_max_querybuf_len"`
TargetRedisProtoMaxBulkLen uint64 `toml:"target_redis_proto_max_bulk_len"`
}
type tomlShakeConfig struct {
Source tomlSource
Target tomlTarget
Advanced tomlAdvanced
}
var Config tomlShakeConfig
func LoadFromFile(filename string) {
buf, err := ioutil.ReadFile(filename)
if err != nil {
panic(err.Error())
}
decoder := toml.NewDecoder(bytes.NewReader(buf))
decoder.SetStrict(true)
err = decoder.Decode(&Config)
if err != nil {
missingError, ok := err.(*toml.StrictMissingError)
if ok {
panic(fmt.Sprintf("decode config error:\n%s", missingError.String()))
}
panic(err.Error())
}
// dir
err = os.MkdirAll(Config.Advanced.Dir, os.ModePerm)
if err != nil {
panic(err.Error())
}
err = os.Chdir(Config.Advanced.Dir)
if err != nil {
panic(err.Error())
}
// cpu core
var ncpu int
if Config.Advanced.Ncpu == 0 {
ncpu = runtime.NumCPU()
} else {
ncpu = Config.Advanced.Ncpu
}
runtime.GOMAXPROCS(ncpu)
}