odbclient.go 3.4 KB

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