odbclient.go 3.7 KB

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