cli_servcie.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. package services
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "github.com/gin-gonic/gin"
  6. "github.com/pkg/errors"
  7. "gorm.io/driver/mysql"
  8. "gorm.io/gorm"
  9. "gorm.io/gorm/logger"
  10. "ngcat/domain/po"
  11. "os"
  12. )
  13. type DbConfig struct {
  14. DbAddr string `json:"dbAddr"`
  15. DbPort int `json:"dbPort"`
  16. DbSchema string `json:"dbSchema"`
  17. UserName string `json:"userName"`
  18. Password string `json:"password"`
  19. }
  20. type AppConfig struct {
  21. LocalPort int `json:"localPort"`
  22. LogFilePath string `json:"logFilePath,omitempty"`
  23. DbCfg *DbConfig `json:"dbCfg"`
  24. }
  25. var (
  26. appCfgInstance *AppConfig
  27. dbInstance *gorm.DB
  28. )
  29. func LoadAppConfig(cfgFilePath string) error {
  30. if data, err := os.ReadFile(cfgFilePath); err != nil {
  31. return errors.Wrapf(err, "try open config file '%s' fail", cfgFilePath)
  32. } else {
  33. appCfg := &AppConfig{}
  34. if err = json.Unmarshal(data, appCfg); err != nil {
  35. return errors.Wrapf(err, "try parse config file '%s' fail", cfgFilePath)
  36. } else {
  37. if appCfg.LogFilePath == "" {
  38. appCfg.LogFilePath = "/var/log/nginx/access.log"
  39. }
  40. if err = initDb(appCfg.DbCfg); err != nil {
  41. return errors.Wrapf(err, "try init db fail")
  42. }
  43. appCfgInstance = appCfg
  44. }
  45. }
  46. return nil
  47. }
  48. func StartCliService() {
  49. go TailFile(appCfgInstance.LogFilePath, 5)
  50. g := gin.Default()
  51. g.GET("/", func(c *gin.Context) {
  52. c.JSON(200, gin.H{
  53. "code": 0,
  54. "msg": "ok",
  55. })
  56. })
  57. if err := g.Run(fmt.Sprintf(":%d", appCfgInstance.LocalPort)); err != nil {
  58. panic(err)
  59. }
  60. }
  61. func GetDb() *gorm.DB {
  62. return dbInstance
  63. }
  64. func initDb(cfg *DbConfig) error {
  65. if cfg == nil {
  66. return errors.New("can not init db by nil config")
  67. }
  68. dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local",
  69. cfg.UserName, cfg.Password, cfg.DbAddr, cfg.DbPort, cfg.DbSchema)
  70. if db, err := gorm.Open(mysql.Open(dsn),
  71. &gorm.Config{Logger: logger.Default.LogMode(logger.Warn)}); err != nil {
  72. return errors.Wrap(err, "try open db fail")
  73. } else {
  74. if err = autoMigrateObjects(db); err != nil {
  75. return errors.Wrap(err, "try auto migrate objects fail")
  76. }
  77. dbInstance = db
  78. }
  79. return nil
  80. }
  81. func autoMigrateObjects(db *gorm.DB) error {
  82. return db.AutoMigrate(&po.NginxAccessLog{})
  83. }