odbclient.go 3.2 KB

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