tunasync.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. package main
  2. import (
  3. "os"
  4. "github.com/codegangsta/cli"
  5. "github.com/gin-gonic/gin"
  6. "gopkg.in/op/go-logging.v1"
  7. tunasync "github.com/tuna/tunasync/internal"
  8. "github.com/tuna/tunasync/manager"
  9. "github.com/tuna/tunasync/worker"
  10. )
  11. var logger = logging.MustGetLogger("tunasync-cmd")
  12. func startManager(c *cli.Context) {
  13. tunasync.InitLogger(c.Bool("verbose"), c.Bool("debug"), c.Bool("with-systemd"))
  14. cfg, err := manager.LoadConfig(c.String("config"), c)
  15. if err != nil {
  16. logger.Errorf("Error loading config: %s", err.Error())
  17. os.Exit(1)
  18. }
  19. if !cfg.Debug {
  20. gin.SetMode(gin.ReleaseMode)
  21. }
  22. m := manager.GetTUNASyncManager(cfg)
  23. if m == nil {
  24. logger.Errorf("Error intializing TUNA sync worker.")
  25. os.Exit(1)
  26. }
  27. logger.Info("Run tunasync manager server.")
  28. m.Run()
  29. }
  30. func startWorker(c *cli.Context) {
  31. tunasync.InitLogger(c.Bool("verbose"), c.Bool("debug"), c.Bool("with-systemd"))
  32. if !c.Bool("debug") {
  33. gin.SetMode(gin.ReleaseMode)
  34. }
  35. cfg, err := worker.LoadConfig(c.String("config"))
  36. if err != nil {
  37. logger.Errorf("Error loading config: %s", err.Error())
  38. os.Exit(1)
  39. }
  40. w := worker.GetTUNASyncWorker(cfg)
  41. if w == nil {
  42. logger.Errorf("Error intializing TUNA sync worker.")
  43. os.Exit(1)
  44. }
  45. logger.Info("Run tunasync worker.")
  46. w.Run()
  47. }
  48. func main() {
  49. app := cli.NewApp()
  50. app.EnableBashCompletion = true
  51. app.Version = "0.1"
  52. app.Commands = []cli.Command{
  53. {
  54. Name: "manager",
  55. Aliases: []string{"m"},
  56. Usage: "start the tunasync manager",
  57. Action: startManager,
  58. Flags: []cli.Flag{
  59. cli.StringFlag{
  60. Name: "config, c",
  61. Usage: "Load manager configurations from `FILE`",
  62. },
  63. cli.StringFlag{
  64. Name: "addr",
  65. Usage: "The manager will listen on `ADDR`",
  66. },
  67. cli.StringFlag{
  68. Name: "port",
  69. Usage: "The manager will bind to `PORT`",
  70. },
  71. cli.StringFlag{
  72. Name: "cert",
  73. Usage: "Use SSL certificate from `FILE`",
  74. },
  75. cli.StringFlag{
  76. Name: "key",
  77. Usage: "Use SSL key from `FILE`",
  78. },
  79. cli.StringFlag{
  80. Name: "status-file",
  81. Usage: "Write status file to `FILE`",
  82. },
  83. cli.StringFlag{
  84. Name: "db-file",
  85. Usage: "Use `FILE` as the database file",
  86. },
  87. cli.StringFlag{
  88. Name: "db-type",
  89. Usage: "Use database type `TYPE`",
  90. },
  91. cli.BoolFlag{
  92. Name: "verbose, v",
  93. Usage: "Enable verbose logging",
  94. },
  95. cli.BoolFlag{
  96. Name: "debug",
  97. Usage: "Run manager in debug mode",
  98. },
  99. cli.BoolFlag{
  100. Name: "with-systemd",
  101. Usage: "Enable systemd-compatible logging",
  102. },
  103. cli.StringFlag{
  104. Name: "pidfile",
  105. Value: "/run/tunasync/tunasync.manager.pid",
  106. Usage: "The pid file of the manager process",
  107. },
  108. },
  109. },
  110. {
  111. Name: "worker",
  112. Aliases: []string{"w"},
  113. Usage: "start the tunasync worker",
  114. Action: startWorker,
  115. Flags: []cli.Flag{
  116. cli.StringFlag{
  117. Name: "config, c",
  118. Usage: "Load worker configurations from `FILE`",
  119. },
  120. cli.BoolFlag{
  121. Name: "verbose, v",
  122. Usage: "Enable verbose logging",
  123. },
  124. cli.BoolFlag{
  125. Name: "debug",
  126. Usage: "Run manager in debug mode",
  127. },
  128. cli.BoolFlag{
  129. Name: "with-systemd",
  130. Usage: "Enable systemd-compatible logging",
  131. },
  132. cli.StringFlag{
  133. Name: "pidfile",
  134. Value: "/run/tunasync/tunasync.worker.pid",
  135. Usage: "The pid file of the worker process",
  136. },
  137. },
  138. },
  139. }
  140. app.Run(os.Args)
  141. }