123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- 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
- }
|