package odbc import ( "fmt" "os" "strings" odb "git.wecise.com/wecise/odb-go/odb" "github.com/scylladb/go-set/strset" ucfg "github.com/wecisecode/util/cfg" ) var ODBClient odb.Client var ODBError error var ODBServerPath string var Keyspace string var Debug bool var default_keyspace = `oktest` var default_odbpaths = `127.0.0.1:11001` var default_config = &odb.Config{ Hosts: []string{"127.0.0.1:11001"}, // 47.92.151.165:11001 Keyspace: "oktest", User: fmt.Sprint("测试客户端"), Pass: "********", PoolSize: 20, Debug: false, } var CommandArgsInfo = func() string { return "" } func Usage() string { return ` 命令行参数:` + CommandArgsInfo() + ` odbpath=` + default_odbpaths + ` # 指定odbserver路径,默认通过环境变量ODBPATH或通过ETCD相关配置获取 keyspace=` + default_keyspace + ` # 指定keyspace,默认通过环境变量KEYSPACE获取 debug=true # 开启调试模式,输出更多信息 环境变量需求: ODBPATH=` + default_odbpaths + ` # 指定odbserver路径,默认通过配置信息 odbc.odbpath 获取 KEYSPACE=` + default_keyspace + ` # 指定keyspace,默认通过配置信息 odbc.keyspace 获取 ETCDPATH=127.0.0.1:2379 # 必须设置 ETCDUSER= ETCDPASS= CASSANDRAPATH=127.0.0.1 CASSANDRALOOKUP=false NATSPATH=nats://user:N5JbKeT1C3uOUh317OVXjg==@127.0.0.1:4222 LANG=zh_CN.utf8 LC_ALL=zh_CN.utf8 可通过` + DefaultAppName + `.conf配置运行参数: [odbc] ;指定odbserver路径 odbpath=` + default_odbpaths + ` ;指定keyspace keyspace=` + default_keyspace + ` ` } func LogConfigInfo() { Logger.Info("odbpath: ", ODBClient.Config().Hosts) Logger.Info("keyspace: ", ODBClient.Config().Keyspace) Logger.Info("debug: ", Debug) } func config_merge(a *odb.Config, b *odb.Config) *odb.Config { if len(b.Hosts) > 0 { a.Hosts = b.Hosts } if b.Port != 0 { a.Port = b.Port } if b.Keyspace != "" { a.Keyspace = b.Keyspace } if b.User != "" { a.User = b.User } if b.Pass != "" { a.Pass = b.Pass } if b.PoolSize != 0 { a.PoolSize = b.PoolSize } if b.Debug { a.Debug = b.Debug } return a } // 参数设置为程序默认配置 // 可以通过命令行,环境变量 或 与应用同名的.conf配置文件 设置 // 远程连接需要在白名单中增加本地IP func ODBC(odbcfgs ...*odb.Config) odb.Client { odbcfg := config_merge(&odb.Config{}, default_config) for _, c := range odbcfgs { odbcfg = config_merge(odbcfg, c) } default_keyspace = odbcfg.Keyspace default_odbpaths = strings.Join(odbcfg.Hosts, ",") odbpaths := strset.New(strings.Split( ucfg.CommandArgs.GetString("odbpath", strings.Join( ucfg.Environs.GetStrings("ODBPATH", Config.GetStrings("odbc.odbpath", default_odbpaths)...), ",")), ",")...).List() Keyspace = ucfg.CommandArgs.GetString("keyspace", ucfg.Environs.GetString("KEYSPACE", Config.GetString("odbc.keyspace", default_keyspace))) Debug = ucfg.CommandArgs.GetBool("debug", false) ODBClient, ODBError = odb.NewClient(config_merge(odbcfg, &odb.Config{ Keyspace: Keyspace, Hosts: odbpaths, Debug: Debug, })) if ODBError != nil { fmt.Print(Usage()) if strings.Contains(ODBError.Error(), "error: EOF") { println("\n!!!should add your ip to odbserver whitelist!!!\n") os.Exit(1) } panic(ODBError) } ODBServerPath = "[" + strings.Join(ODBClient.Config().Hosts, ",") + "]" Keyspace = ODBClient.Config().Keyspace LogConfigInfo() return ODBClient }