main.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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. "github.com/robfig/cron"
  11. "gogs.carducci-dante.gov.it/karmen/core/config"
  12. "gogs.carducci-dante.gov.it/karmen/core/cron/sync"
  13. karmen_handlers "gogs.carducci-dante.gov.it/karmen/core/handlers"
  14. "gogs.carducci-dante.gov.it/karmen/core/orm"
  15. )
  16. const (
  17. MaxNumRetries = 20
  18. RetryTimeInterval = 5
  19. )
  20. func main() {
  21. var (
  22. db *gorm.DB
  23. err error
  24. )
  25. log.Println("Loading config file...")
  26. err = config.ReadFile("config/config.yaml", config.Config)
  27. if err != nil {
  28. panic(err)
  29. }
  30. log.Println(config.Config)
  31. log.Println("Starting karmen and waiting for the DB...")
  32. count := MaxNumRetries
  33. wait := true
  34. for wait && count > 0 {
  35. db, err = orm.New(fmt.Sprintf("%s?%s", config.Config.Orm.Connection, config.Config.Orm.Options))
  36. if err != nil {
  37. count--
  38. log.Println(err)
  39. log.Printf("Remaining retries: %d", count)
  40. time.Sleep(time.Second * RetryTimeInterval)
  41. continue
  42. }
  43. wait = false
  44. }
  45. orm.Use(db)
  46. if config.Config.Orm.AutoMigrate {
  47. log.Print("Automigrating...")
  48. orm.AutoMigrate()
  49. }
  50. log.Println("Starting cron jobs...")
  51. c := cron.New()
  52. syncJob := sync.NewSyncJob(config.Config)
  53. c.AddJob("@every 1m", syncJob)
  54. c.Start()
  55. for _, entry := range c.Entries() {
  56. log.Println(entry)
  57. }
  58. log.Println("karmen is listening to port 3000...")
  59. if err := http.ListenAndServe(":3000", handlers.LoggingHandler(os.Stdout, karmen_handlers.Handlers())); err != nil {
  60. panic(err)
  61. }
  62. }