main.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package main
  2. import (
  3. "flag"
  4. "fmt"
  5. "log"
  6. "net/http"
  7. "os"
  8. "github.com/porter-dev/porter/api/server/router"
  9. "github.com/porter-dev/porter/api/server/shared/config/loader"
  10. "github.com/porter-dev/porter/internal/adapter"
  11. "github.com/porter-dev/porter/internal/kubernetes/provisioner"
  12. )
  13. // Version will be linked by an ldflag during build
  14. var Version string = "dev-ce"
  15. func main() {
  16. var versionFlag bool
  17. flag.BoolVar(&versionFlag, "version", false, "print version and exit")
  18. flag.Parse()
  19. // Exit safely when version is used
  20. if versionFlag {
  21. fmt.Println(Version)
  22. os.Exit(0)
  23. }
  24. cl := loader.NewEnvLoader(Version)
  25. config, err := cl.LoadConfig()
  26. if err != nil {
  27. log.Fatal("Config loading failed: ", err)
  28. }
  29. if config.RedisConf.Enabled {
  30. redis, err := adapter.NewRedisClient(config.RedisConf)
  31. if err != nil {
  32. config.Logger.Fatal().Err(err).Msg("redis connection failed")
  33. return
  34. }
  35. provisioner.InitGlobalStream(redis)
  36. errorChan := make(chan error)
  37. go provisioner.GlobalStreamListener(redis, config.Repo, config.AnalyticsClient, errorChan)
  38. }
  39. appRouter := router.NewAPIRouter(config)
  40. address := fmt.Sprintf(":%d", config.ServerConf.Port)
  41. config.Logger.Info().Msgf("Starting server %v", address)
  42. s := &http.Server{
  43. Addr: address,
  44. Handler: appRouter,
  45. ReadTimeout: config.ServerConf.TimeoutRead,
  46. WriteTimeout: config.ServerConf.TimeoutWrite,
  47. IdleTimeout: config.ServerConf.TimeoutIdle,
  48. }
  49. if err := s.ListenAndServe(); err != nil && err != http.ErrServerClosed {
  50. config.Logger.Fatal().Err(err).Msg("Server startup failed")
  51. }
  52. }