123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- package services
- import (
- "encoding/json"
- "fmt"
- "github.com/gin-gonic/gin"
- "github.com/pkg/errors"
- "gorm.io/driver/mysql"
- "gorm.io/gorm"
- "gorm.io/gorm/logger"
- "ngcat/domain/po"
- "os"
- )
- type DbConfig struct {
- DbAddr string `json:"dbAddr"`
- DbPort int `json:"dbPort"`
- DbSchema string `json:"dbSchema"`
- UserName string `json:"userName"`
- Password string `json:"password"`
- }
- type AppConfig struct {
- LocalPort int `json:"localPort"`
- LogFilePath string `json:"logFilePath,omitempty"`
- DbCfg *DbConfig `json:"dbCfg"`
- }
- var (
- appCfgInstance *AppConfig
- dbInstance *gorm.DB
- )
- func LoadAppConfig(cfgFilePath string) error {
- if data, err := os.ReadFile(cfgFilePath); err != nil {
- return errors.Wrapf(err, "try open config file '%s' fail", cfgFilePath)
- } else {
- appCfg := &AppConfig{}
- if err = json.Unmarshal(data, appCfg); err != nil {
- return errors.Wrapf(err, "try parse config file '%s' fail", cfgFilePath)
- } else {
- if appCfg.LogFilePath == "" {
- appCfg.LogFilePath = "/var/log/nginx/access.log"
- }
- if err = initDb(appCfg.DbCfg); err != nil {
- return errors.Wrapf(err, "try init db fail")
- }
- appCfgInstance = appCfg
- }
- }
- return nil
- }
- func StartCliService() {
- go TailFile(appCfgInstance.LogFilePath, 5)
- g := gin.Default()
- g.GET("/", func(c *gin.Context) {
- c.JSON(200, gin.H{
- "code": 0,
- "msg": "ok",
- })
- })
- if err := g.Run(fmt.Sprintf(":%d", appCfgInstance.LocalPort)); err != nil {
- panic(err)
- }
- }
- func GetDb() *gorm.DB {
- return dbInstance
- }
- func initDb(cfg *DbConfig) error {
- if cfg == nil {
- return errors.New("can not init db by nil config")
- }
- dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local",
- cfg.UserName, cfg.Password, cfg.DbAddr, cfg.DbPort, cfg.DbSchema)
- if db, err := gorm.Open(mysql.Open(dsn),
- &gorm.Config{Logger: logger.Default.LogMode(logger.Warn)}); err != nil {
- return errors.Wrap(err, "try open db fail")
- } else {
- if err = autoMigrateObjects(db); err != nil {
- return errors.Wrap(err, "try auto migrate objects fail")
- }
- dbInstance = db
- }
- return nil
- }
- func autoMigrateObjects(db *gorm.DB) error {
- return db.AutoMigrate(&po.NginxAccessLog{})
- }
|