package app import ( "log" "s-ui/config" "s-ui/core" "s-ui/cronjob" "s-ui/database" "s-ui/logger" "s-ui/service" "s-ui/sub" "s-ui/web" "github.com/op/go-logging" ) type APP struct { service.SettingService configService *service.ConfigService webServer *web.Server subServer *sub.Server cronJob *cronjob.CronJob logger *logging.Logger core *core.Core } func NewApp() *APP { return &APP{} } func (a *APP) Init() error { log.Printf("%v %v", config.GetName(), config.GetVersion()) a.initLog() err := database.InitDB(config.GetDBPath()) if err != nil { return err } // Init Setting a.SettingService.GetAllSetting() a.core = core.NewCore() a.cronJob = cronjob.NewCronJob() a.webServer = web.NewServer() a.subServer = sub.NewServer() a.configService = service.NewConfigService(a.core) err = a.configService.InitConfig() if err != nil { return err } return nil } func (a *APP) Start() error { loc, err := a.SettingService.GetTimeLocation() if err != nil { return err } trafficAge, err := a.SettingService.GetTrafficAge() if err != nil { return err } err = a.cronJob.Start(loc, trafficAge) if err != nil { return err } err = a.webServer.Start() if err != nil { return err } err = a.subServer.Start() if err != nil { return err } err = a.configService.StartCore("") if err != nil { logger.Error(err) } return nil } func (a *APP) Stop() { a.cronJob.Stop() err := a.subServer.Stop() if err != nil { logger.Warning("stop Sub Server err:", err) } err = a.webServer.Stop() if err != nil { logger.Warning("stop Web Server err:", err) } err = a.configService.StopCore() if err != nil { logger.Warning("stop Core err:", err) } } func (a *APP) initLog() { switch config.GetLogLevel() { case config.Debug: logger.InitLogger(logging.DEBUG) case config.Info: logger.InitLogger(logging.INFO) case config.Warn: logger.InitLogger(logging.WARNING) case config.Error: logger.InitLogger(logging.ERROR) default: log.Fatal("unknown log level:", config.GetLogLevel()) } } func (a *APP) RestartApp() { a.Stop() a.Start() } func (a *APP) GetCore() *core.Core { return a.core }