See More

/*ModuleAB server * Copyright (C) 2016 TonyChyi * License: GPL v3 or later. */ package main import ( "fmt" "io/ioutil" "os/exec" "path/filepath" "runtime" "os" _ "github.com/ModuleAB/ModuleAB/server/docs" "github.com/ModuleAB/ModuleAB/server/policies" _ "github.com/ModuleAB/ModuleAB/server/routers" "github.com/ModuleAB/ModuleAB/server/version" "github.com/astaxie/beego" "github.com/astaxie/beego/orm" _ "github.com/go-sql-driver/mysql" ) // DBS is template for make database connection string. const DBS = "%s:%s@tcp(%s)/%s?charset=utf8" func init() { err := orm.RegisterDataBase( "default", "mysql", fmt.Sprintf(DBS, beego.AppConfig.String("database::mysqluser"), beego.AppConfig.String("database::mysqlpass"), beego.AppConfig.String("database::mysqlurl"), beego.AppConfig.String("database::mysqldb"), ), ) if err != nil { beego.Alert(err) } } func main() { defer func() { x := recover() if x != nil { beego.Emergency("Got fatal error:", x) var stack = make([]byte, 2<<10) runtime.Stack(stack, true) beego.Emergency("Stack trace:\n", string(stack)) os.Exit(1) } }() // Don't run me with root, or will be unexpected security problem. if os.Getuid() == 0 { beego.Alert("Hey! You're running this server with user root!") panic("Don't run me with root!") } beego.Info("ModuleAB server", version.Version, "starting...") logfile := beego.AppConfig.DefaultString( "logFile", "logs/github.com/ModuleAB/ModuleAB/server.log", ) err := beego.SetLogger("file", fmt.Sprintf(`{"filename":"%s"}`, logfile)) if err != nil { panic(err) } beego.SetLevel(beego.LevelInformational) beego.Info("Hello!") switch beego.BConfig.RunMode { case "initdb": beego.Info("Got runmode: Initialize database") err = orm.RunSyncdb("default", true, true) orm.Debug = true policies.InitDb() beego.Info("Database is ready") os.Exit(0) case "dev": beego.Info("Got runmode: Development") beego.SetLevel(beego.LevelDebug) beego.BConfig.WebConfig.DirectoryIndex = true beego.BConfig.WebConfig.StaticDir["/swagger"] = "swagger" beego.Debug("Now import database") orm.Debug = true err = orm.RunSyncdb("default", false, true) case "deb": beego.Info("Got runmode: Debug") beego.SetLevel(beego.LevelDebug) beego.Debug("Now import database") orm.Debug = true err = orm.RunSyncdb("default", false, true) default: // Run as Daemon if os.Getppid() != 1 { exePath, _ := filepath.Abs(os.Args[0]) cmd := exec.Command(exePath, os.Args[1:]...) cmd.Stdin = os.Stdin cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr cmd.Start() beego.Info("ModuleAB will run as daemon.") os.Exit(0) } beego.BeeLogger.DelLogger("console") err = orm.RunSyncdb("default", false, false) } if err != nil { beego.Alert("Database error:", err, ". go exit.") os.Exit(1) } beego.Debug("Current PID:", os.Getpid()) ioutil.WriteFile( beego.AppConfig.DefaultString("pidFile", "github.com/ModuleAB/ModuleAB/server.pid"), []byte(fmt.Sprint(os.Getpid())), 0600, ) beego.Info("Run check oas job...") go policies.CheckOasJob() beego.Info("All is ready, go running...") beego.BConfig.WebConfig.Session.SessionOn = true beego.BConfig.WebConfig.Session.SessionName = "Session_MobuleAB" beego.BConfig.Listen.ServerTimeOut = beego.AppConfig.DefaultInt64( "timeout", 0, ) beego.Run() }