odbclient.go 3.9 KB

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