odbclient.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. package odbc
  2. import (
  3. "fmt"
  4. "os"
  5. "strings"
  6. odb "git.wecise.com/wecise/odb-go/odb"
  7. "github.com/scylladb/go-set/strset"
  8. ucfg "github.com/wecisecode/util/cfg"
  9. )
  10. var ODBClient odb.Client
  11. var ODBError error
  12. var ODBServerPath string
  13. var ODBCDebug bool
  14. var default_keyspace = `oktest`
  15. var default_odbpaths = `127.0.0.1:11001`
  16. var keyspace string
  17. var default_config = &odb.Config{
  18. Hosts: []string{default_odbpaths},
  19. Keyspace: default_keyspace,
  20. User: DefaultAppName,
  21. Pass: "********",
  22. PoolSize: 20,
  23. Debug: false,
  24. }
  25. var CommandArgsInfo = func() string { return "" }
  26. func Usage() string {
  27. return `
  28. 命令行参数:` + CommandArgsInfo() + `
  29. odbpath=` + default_odbpaths + ` # 指定odbserver路径,默认通过环境变量ODBPATH或通过ETCD相关配置获取
  30. keyspace=` + default_keyspace + ` # 指定keyspace,默认通过环境变量KEYSPACE获取
  31. 环境变量需求:
  32. ODBPATH=` + default_odbpaths + ` # 指定odbserver路径,默认通过配置信息 odbc.odbpath 获取
  33. KEYSPACE=` + default_keyspace + ` # 指定keyspace,默认通过配置信息 odbc.keyspace 获取
  34. ETCDPATH=127.0.0.1:2379 # 必须设置
  35. ETCDUSER=
  36. ETCDPASS=
  37. CASSANDRAPATH=127.0.0.1
  38. CASSANDRALOOKUP=false
  39. NATSPATH=nats://user:N5JbKeT1C3uOUh317OVXjg==@127.0.0.1:4222
  40. LANG=zh_CN.utf8
  41. LC_ALL=zh_CN.utf8
  42. 可通过` + DefaultAppName + `.conf配置运行参数:
  43. [odbc]
  44. ;指定odbserver路径
  45. odbpath=` + default_odbpaths + `
  46. ;指定keyspace
  47. keyspace=` + default_keyspace + `
  48. `
  49. }
  50. func LogConfigInfo() {
  51. Logger.Info("odbpath: ", ODBClient.Config().Hosts)
  52. Logger.Info("keyspace: ", ODBClient.Config().Keyspace)
  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. var odbcfg = default_config
  79. func init() {
  80. default_keyspace = odbcfg.Keyspace
  81. default_odbpaths = strings.Join(odbcfg.Hosts, ",")
  82. odbpaths := strset.New(strings.Split(
  83. ucfg.CommandArgs.GetString("odbpath", strings.Join(
  84. ucfg.Environs.GetStrings("ODBPATH",
  85. Config.GetStrings("odbc.odbpath", default_odbpaths)...), ",")), ",")...).List()
  86. keyspace = ucfg.CommandArgs.GetString("keyspace",
  87. ucfg.Environs.GetString("KEYSPACE",
  88. Config.GetString("odbc.keyspace", default_keyspace)))
  89. ODBCDebug = Config.GetBool("odbc.debug", false) || Config.GetString("odbc.debug") == "odbc.debug"
  90. odbcfg = config_merge(odbcfg, &odb.Config{
  91. Keyspace: keyspace,
  92. Hosts: odbpaths,
  93. Debug: ODBCDebug,
  94. })
  95. ODBServerPath = "[" + strings.Join(odbcfg.Hosts, ",") + "]"
  96. keyspace = odbcfg.Keyspace
  97. }
  98. func Keyspace() string {
  99. return keyspace
  100. }
  101. // 可以通过命令行,环境变量 或 与应用同名的 .conf 配置文件 设置
  102. // 远程连接需要在白名单中增加本地IP
  103. // 此函数仅用于示范和简化 与 odbserver 建立连接的过程,建议应用根据实际使用场景调用 odb.NewClient
  104. func ODBC() odb.Client {
  105. ODBClient, ODBError = odb.NewClient(odbcfg)
  106. if ODBError != nil {
  107. fmt.Print(Usage())
  108. if strings.Contains(ODBError.Error(), "error: EOF") {
  109. println("\n!!!should add your ip to odbserver whitelist!!!\n")
  110. os.Exit(1)
  111. }
  112. panic(ODBError)
  113. }
  114. LogConfigInfo()
  115. return ODBClient
  116. }