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 ODBCDebug bool var default_keyspace = `oktest` var default_odbpaths = `127.0.0.1:11001` var keyspace string var default_config = &odb.Config{ Hosts: []string{default_odbpaths}, Keyspace: default_keyspace, User: DefaultAppName, 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获取 环境变量需求: 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) } 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 } var odbcfg = default_config func init() { 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))) ODBCDebug = Config.GetBool("odbc.debug", false) || Config.GetString("odbc.debug") == "odbc.debug" odbcfg = config_merge(odbcfg, &odb.Config{ Keyspace: keyspace, Hosts: odbpaths, Debug: ODBCDebug, }) ODBServerPath = "[" + strings.Join(odbcfg.Hosts, ",") + "]" keyspace = odbcfg.Keyspace } func Keyspace() string { return keyspace } // 可以通过命令行,环境变量 或 与应用同名的 .conf 配置文件 设置 // 远程连接需要在白名单中增加本地IP // 此函数仅用于示范和简化 与 odbserver 建立连接的过程,建议应用根据实际使用场景调用 odb.NewClient func ODBC() odb.Client { ODBClient, ODBError = odb.NewClient(odbcfg) 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) } LogConfigInfo() return ODBClient }