main.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package main
  2. import (
  3. "fmt"
  4. "log"
  5. "net/http"
  6. "os"
  7. "time"
  8. "github.com/gorilla/handlers"
  9. "github.com/jinzhu/gorm"
  10. "gogs.carducci-dante.gov.it/karmen/core/config"
  11. karmen_handlers "gogs.carducci-dante.gov.it/karmen/core/handlers"
  12. "gogs.carducci-dante.gov.it/karmen/core/orm"
  13. )
  14. const (
  15. MaxNumRetries = 20
  16. RetryTimeInterval = 2
  17. )
  18. func main() {
  19. var (
  20. db *gorm.DB
  21. err error
  22. )
  23. log.Println("Loading config file...")
  24. err = config.ReadFile("config/config.yaml", config.Config)
  25. if err != nil {
  26. panic(err)
  27. }
  28. log.Println("Starting karmen and waiting for the DB...")
  29. count := MaxNumRetries
  30. wait := true
  31. for wait && count > 0 {
  32. db, err = orm.New(fmt.Sprintf("%s?%s", config.Config.Orm.Connection, config.Config.Orm.Options))
  33. if err != nil {
  34. count--
  35. log.Println(err)
  36. log.Printf("Remaining retries: %d", count)
  37. time.Sleep(time.Second * RetryTimeInterval)
  38. continue
  39. }
  40. wait = false
  41. }
  42. orm.Use(db)
  43. if config.Config.Orm.AutoMigrate {
  44. log.Print("Automigrating...")
  45. orm.AutoMigrate()
  46. }
  47. log.Println("karmen is listening to port 3000...")
  48. if err := http.ListenAndServe(":3000", handlers.LoggingHandler(os.Stdout, karmen_handlers.Handlers())); err != nil {
  49. panic(err)
  50. }
  51. }