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