odbclient.go 3.8 KB

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