main.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. package main
  2. import (
  3. "flag"
  4. "fmt"
  5. "github.com/op/go-logging"
  6. "log"
  7. "os"
  8. "os/signal"
  9. "syscall"
  10. _ "unsafe"
  11. "x-ui/config"
  12. "x-ui/database"
  13. "x-ui/logger"
  14. "x-ui/web"
  15. "x-ui/web/global"
  16. )
  17. // this function call global.setWebServer
  18. func setWebServer(server global.WebServer)
  19. func runWebServer() {
  20. log.Printf("%v %v", config.GetName(), config.GetVersion())
  21. switch config.GetLogLevel() {
  22. case config.Debug:
  23. logger.InitLogger(logging.DEBUG)
  24. case config.Info:
  25. logger.InitLogger(logging.INFO)
  26. case config.Warn:
  27. logger.InitLogger(logging.WARNING)
  28. case config.Error:
  29. logger.InitLogger(logging.ERROR)
  30. default:
  31. log.Fatal("unknown log level:", config.GetLogLevel())
  32. }
  33. err := database.InitDB(config.GetDBPath())
  34. if err != nil {
  35. log.Fatal(err)
  36. }
  37. var server *web.Server
  38. server = web.NewServer()
  39. setWebServer(server)
  40. err = server.Start()
  41. if err != nil {
  42. panic(err)
  43. }
  44. sigCh := make(chan os.Signal, 1)
  45. signal.Notify(sigCh, syscall.SIGHUP)
  46. for {
  47. sig := <-sigCh
  48. if sig == syscall.SIGHUP {
  49. server.Stop()
  50. server = web.NewServer()
  51. setWebServer(server)
  52. err = server.Start()
  53. if err != nil {
  54. panic(err)
  55. }
  56. } else {
  57. continue
  58. }
  59. }
  60. }
  61. func v2ui(dbPath string) {
  62. // migrate from v2-ui
  63. }
  64. func main() {
  65. if len(os.Args) < 2 {
  66. runWebServer()
  67. return
  68. }
  69. runCmd := flag.NewFlagSet("run", flag.ExitOnError)
  70. v2uiCmd := flag.NewFlagSet("v2-ui", flag.ExitOnError)
  71. var dbPath string
  72. v2uiCmd.StringVar(&dbPath, "db", "/etc/v2-ui/v2-ui.db", "set v2-ui db file path")
  73. switch flag.Arg(0) {
  74. case "run":
  75. runCmd.Parse(os.Args[2:])
  76. runWebServer()
  77. case "v2-ui":
  78. v2uiCmd.Parse(os.Args[2:])
  79. v2ui(dbPath)
  80. default:
  81. fmt.Println("excepted 'run' or 'v2-ui' subcommands")
  82. fmt.Println()
  83. runCmd.Usage()
  84. fmt.Println()
  85. v2uiCmd.Usage()
  86. }
  87. }