/conf/conf.go

https://github.com/zer0131/RedisFox · Go · 117 lines · 107 code · 9 blank · 1 comment · 14 complexity · 224819177eeb1ada721f2156c6d8a0f7 MD5 · raw file

  1. package conf
  2. import (
  3. "github.com/go-yaml/yaml"
  4. "github.com/jinzhu/gorm"
  5. _ "github.com/jinzhu/gorm/dialects/sqlite"
  6. "io/ioutil"
  7. "time"
  8. )
  9. var ConfigVal = &Config{}
  10. type autoBase struct {
  11. Servers []map[string]string
  12. Sleeptime int
  13. Maxidle int
  14. Maxactive int
  15. Idletimeout int
  16. Datatype string
  17. Datapath string
  18. Datamaxopenconn int
  19. Datamaxidleconn int
  20. Datamaxconnlifetime int64
  21. Datalogmode int
  22. Logpath string
  23. Logname string
  24. Loglevel string
  25. Logexpire int
  26. Serverip string
  27. Serverport int
  28. Staticdir string
  29. Tpldir string
  30. Debugmode int
  31. }
  32. type Config struct {
  33. BaseVal autoBase
  34. MysqlServiceOrm *gorm.DB
  35. }
  36. func NewConfig(path string) error {
  37. data, err := ioutil.ReadFile(path)
  38. if err != nil {
  39. return err
  40. }
  41. autoBaseVal := autoBase{}
  42. if err := yaml.Unmarshal(data, &autoBaseVal); err != nil {
  43. return err
  44. }
  45. ConfigVal.BaseVal = autoBaseVal
  46. //gorm初始化
  47. db, err := gorm.Open(autoBaseVal.Datatype, autoBaseVal.Datapath)
  48. if err != nil {
  49. return err
  50. }
  51. db.DB().SetMaxOpenConns(autoBaseVal.Datamaxopenconn)
  52. db.DB().SetMaxIdleConns(autoBaseVal.Datamaxidleconn)
  53. liftTime := time.Duration(autoBaseVal.Datamaxconnlifetime) * time.Millisecond
  54. db.DB().SetConnMaxLifetime(liftTime)
  55. logMode := false
  56. if autoBaseVal.Datalogmode == 1 {
  57. logMode = true
  58. }
  59. db.LogMode(logMode)
  60. if err := db.DB().Ping(); err != nil {
  61. return err
  62. }
  63. ConfigVal.MysqlServiceOrm = db
  64. err = initDBTable()
  65. if err != nil {
  66. return err
  67. }
  68. return nil
  69. }
  70. func initDBTable() error {
  71. sqlData := `
  72. CREATE TABLE IF NOT EXISTS info(
  73. id INTEGER PRIMARY KEY AUTOINCREMENT,
  74. info TEXT NOT NULL,
  75. server TEXT NOT NULL,
  76. datetime TEXT NOT NULL
  77. );
  78. CREATE TABLE IF NOT EXISTS memory(
  79. id INTEGER PRIMARY KEY AUTOINCREMENT,
  80. used INTEGER NOT NULL,
  81. peak INTEGER NOT NULL,
  82. server TEXT NOT NULL,
  83. datetime TEXT NOT NULL
  84. );
  85. CREATE TABLE IF NOT EXISTS monitor(
  86. id INTEGER PRIMARY KEY AUTOINCREMENT,
  87. command TEXT NOT NULL,
  88. arguments TEXT NOT NULL,
  89. keyname TEXT NOT NULL,
  90. server TEXT NOT NULL,
  91. datetime TEXT NOT NULL
  92. );
  93. CREATE TABLE IF NOT EXISTS keys(
  94. id INTEGER PRIMARY KEY AUTOINCREMENT,
  95. expire NUMBER NOT NULL,
  96. persist NUMBER NOT NULL,
  97. server TEXT NOT NULL,
  98. datetime TEXT NOT NULL
  99. );
  100. CREATE INDEX IF NOT EXISTS monitor_datedime_index ON monitor (datetime DESC);
  101. CREATE INDEX IF NOT EXISTS server_index ON monitor(server ASC);
  102. `
  103. err := ConfigVal.MysqlServiceOrm.Exec(sqlData).Error
  104. if err != nil {
  105. return err
  106. }
  107. return nil
  108. }