odbclient.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. package odbc
  2. import (
  3. "fmt"
  4. "os"
  5. "strings"
  6. odb "git.wecise.com/wecise/odb-go/odb"
  7. ucfg "git.wecise.com/wecise/util/cfg"
  8. "github.com/scylladb/go-set/strset"
  9. )
  10. var ODBClient odb.Client
  11. var ODBError error
  12. var Debug bool
  13. var default_keyspace = `oktest`
  14. var default_odbpaths = `127.0.0.1:11001`
  15. var default_config = &odb.Config{
  16. Hosts: []string{"127.0.0.1:11001"}, // 47.92.151.165:11001
  17. Keyspace: "oktest",
  18. User: fmt.Sprint("测试客户端"),
  19. Pass: "********",
  20. PoolSize: 20,
  21. Debug: false,
  22. }
  23. var CommandArgsInfo = func() string { return "" }
  24. func Usage() string {
  25. return `
  26. 命令行参数:` + CommandArgsInfo() + `
  27. odbpath=` + default_odbpaths + ` # 指定odbserver路径,默认通过环境变量ODBPATH或通过ETCD相关配置获取
  28. keyspace=` + default_keyspace + ` # 指定keyspace,默认通过环境变量KEYSPACE获取
  29. debug=true # 开启调试模式,输出更多信息
  30. 环境变量需求:
  31. ODBPATH=` + default_odbpaths + ` # 指定odbserver路径,默认通过配置信息 odbc.odbpath 获取
  32. KEYSPACE=` + default_keyspace + ` # 指定keyspace,默认通过配置信息 odbc.keyspace 获取
  33. ETCDPATH=127.0.0.1:2379 # 必须设置
  34. ETCDUSER=
  35. ETCDPASS=
  36. CASSANDRAPATH=127.0.0.1
  37. CASSANDRALOOKUP=false
  38. NATSPATH=nats://user:N5JbKeT1C3uOUh317OVXjg==@127.0.0.1:4222
  39. LANG=zh_CN.utf8
  40. LC_ALL=zh_CN.utf8
  41. 可通过` + DefaultAppName + `.conf配置运行参数:
  42. [odbc]
  43. ;指定odbserver路径
  44. odbpath=` + default_odbpaths + `
  45. ;指定keyspace
  46. keyspace=` + default_keyspace + `
  47. `
  48. }
  49. func LogConfigInfo() {
  50. Logger.Info("odbpath: ", ODBClient.Config().Hosts, ODBClient.Config().Port)
  51. Logger.Info("keyspace: ", ODBClient.Config().Keyspace)
  52. Logger.Info("debug: ", Debug)
  53. }
  54. func config_merge(a *odb.Config, b *odb.Config) *odb.Config {
  55. if len(b.Hosts) > 0 {
  56. a.Hosts = b.Hosts
  57. }
  58. if b.Port != 0 {
  59. a.Port = b.Port
  60. }
  61. if b.Keyspace != "" {
  62. a.Keyspace = b.Keyspace
  63. }
  64. if b.User != "" {
  65. a.User = b.User
  66. }
  67. if b.Pass != "" {
  68. a.Pass = b.Pass
  69. }
  70. if b.PoolSize != 0 {
  71. a.PoolSize = b.PoolSize
  72. }
  73. if b.Debug {
  74. a.Debug = b.Debug
  75. }
  76. return a
  77. }
  78. // 参数设置为程序默认配置
  79. // 可以通过命令行,环境变量 或 与应用同名的.conf配置文件 设置
  80. // 远程连接需要在白名单中增加本地IP
  81. func ODBC(odbcfgs ...*odb.Config) odb.Client {
  82. odbcfg := config_merge(&odb.Config{}, default_config)
  83. for _, c := range odbcfgs {
  84. odbcfg = config_merge(odbcfg, c)
  85. }
  86. default_keyspace = odbcfg.Keyspace
  87. default_odbpaths = strings.Join(odbcfg.Hosts, ",")
  88. odbpaths := strset.New(strings.Split(ucfg.CommandArgs.GetString("odbpath",
  89. strings.Join(ucfg.Environs.GetStrings("ODBPATH",
  90. Config.GetStrings("odbc.odbpath", default_odbpaths)...), ",")), ",")...).List()
  91. keyspace := ucfg.CommandArgs.GetString("keyspace",
  92. ucfg.Environs.GetString("KEYSPACE", Config.GetString("odbc.keyspace", default_keyspace)))
  93. Debug = ucfg.CommandArgs.GetBool("debug", false)
  94. ODBClient, ODBError = odb.NewClient(config_merge(odbcfg, &odb.Config{
  95. Keyspace: keyspace,
  96. Hosts: odbpaths,
  97. Debug: Debug,
  98. }))
  99. if ODBError != nil {
  100. fmt.Print(Usage())
  101. if strings.Contains(ODBError.Error(), "error: EOF") {
  102. println("\n!!!should add your ip to odbserver whitelist!!!\n")
  103. os.Exit(1)
  104. }
  105. panic(ODBError)
  106. }
  107. LogConfigInfo()
  108. return ODBClient
  109. }