main.go 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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. "gogs.carducci-dante.gov.it/karmen/core/documents"
  14. "gogs.carducci-dante.gov.it/karmen/core/documents/generators/list"
  15. karmen_handlers "gogs.carducci-dante.gov.it/karmen/core/handlers"
  16. "gogs.carducci-dante.gov.it/karmen/core/orm"
  17. )
  18. const (
  19. MaxNumRetries = 20
  20. RetryTimeInterval = 5
  21. )
  22. func main() {
  23. var (
  24. db *gorm.DB
  25. err error
  26. )
  27. log.Println("Loading config file...")
  28. err = config.ReadFile("config/config.yaml", config.Config)
  29. if err != nil {
  30. panic(err)
  31. }
  32. log.Println("Starting karmen and waiting for the DB...")
  33. count := MaxNumRetries
  34. wait := true
  35. for wait && count > 0 {
  36. db, err = orm.New(fmt.Sprintf("%s?%s", config.Config.Orm.Connection, config.Config.Orm.Options))
  37. if err != nil {
  38. count--
  39. log.Println(err)
  40. log.Printf("Remaining retries: %d", count)
  41. time.Sleep(time.Second * RetryTimeInterval)
  42. continue
  43. }
  44. wait = false
  45. }
  46. orm.Use(db)
  47. if config.Config.Orm.AutoMigrate {
  48. log.Print("Automigrating...")
  49. orm.AutoMigrate()
  50. }
  51. log.Println("Initialize ListGenerator")
  52. documents.Generators = make(map[string]documents.Generator)
  53. documents.Generators["list"] = list.NewListGenerator()
  54. log.Println("Starting cron jobs...")
  55. c := cron.New()
  56. syncJob := sync.NewSyncJob(config.Config)
  57. if config.Config.Sync.Schedule == "" {
  58. config.Config.Sync.Schedule = "@every 10m"
  59. }
  60. log.Printf("Adding LDAP Sync Job with schedule set at %s", config.Config.Sync.Schedule)
  61. log.Printf("Sync will run with SAFE mode set to %v", config.Config.Sync.SafeRun)
  62. log.Printf("Sync will run with SEND_MAIL set to %v", config.Config.Sync.SendMail)
  63. log.Printf("Sync will run with SCHEDULE set to %v", config.Config.Sync.Schedule)
  64. c.AddJob(config.Config.Sync.Schedule, syncJob)
  65. c.Start()
  66. log.Println("karmen is listening to port 3000...")
  67. if err := http.ListenAndServe(":3000", handlers.LoggingHandler(os.Stdout, karmen_handlers.Handlers())); err != nil {
  68. panic(err)
  69. }
  70. }