main.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. package main
  2. import (
  3. "fmt"
  4. "log"
  5. "net/http"
  6. "os"
  7. "path/filepath"
  8. "time"
  9. "github.com/gorilla/handlers"
  10. "github.com/jinzhu/gorm"
  11. "github.com/robfig/cron"
  12. "gogs.carducci-dante.gov.it/karmen/core/config"
  13. "gogs.carducci-dante.gov.it/karmen/core/cron/sync"
  14. "gogs.carducci-dante.gov.it/karmen/core/generator"
  15. "gogs.carducci-dante.gov.it/karmen/core/generator/generators/list"
  16. karmen_handlers "gogs.carducci-dante.gov.it/karmen/core/handlers"
  17. "gogs.carducci-dante.gov.it/karmen/core/orm"
  18. )
  19. const (
  20. MaxNumRetries = 20
  21. RetryTimeInterval = 5
  22. )
  23. func main() {
  24. var (
  25. db *gorm.DB
  26. err error
  27. )
  28. log.Println("Loading config file...")
  29. err = config.ReadFile("config/config.yaml", config.Config)
  30. if err != nil {
  31. panic(err)
  32. }
  33. log.Println("Starting karmen and waiting for the DB...")
  34. count := MaxNumRetries
  35. wait := true
  36. for wait && count > 0 {
  37. db, err = orm.New(fmt.Sprintf("%s?%s", config.Config.Orm.Connection, config.Config.Orm.Options))
  38. if err != nil {
  39. count--
  40. log.Println(err)
  41. log.Printf("Remaining retries: %d", count)
  42. time.Sleep(time.Second * RetryTimeInterval)
  43. continue
  44. }
  45. wait = false
  46. }
  47. orm.Use(db)
  48. if config.Config.Orm.AutoMigrate {
  49. log.Print("Automigrating...")
  50. orm.AutoMigrate()
  51. }
  52. log.Println("Initialize ListGenerator")
  53. generator.Generators = make(map[string]generator.Generator)
  54. generator.Generators["list"] = list.NewListGenerator(config.Config)
  55. files, err := filepath.Glob("generator/generators/*")
  56. log.Println("Found the following generators...")
  57. gTypes := make([]*orm.GeneratorType, 0)
  58. for _, g := range files {
  59. gTypes = append(gTypes, &orm.GeneratorType{Name: filepath.Base(g)})
  60. }
  61. log.Println("Update generator_type table...")
  62. for _, gt := range gTypes {
  63. var gTypes []orm.GeneratorType
  64. if err := orm.DB().Find(&gTypes).Error; err != nil {
  65. panic(err)
  66. }
  67. if len(gTypes) == 0 {
  68. err := orm.DB().Create(gt).Error
  69. if err != nil {
  70. panic(err)
  71. }
  72. }
  73. }
  74. log.Println("Starting cron jobs...")
  75. c := cron.New()
  76. syncJob := sync.NewSyncJob(config.Config)
  77. if config.Config.Sync.Schedule == "" {
  78. config.Config.Sync.Schedule = "@every 10m"
  79. }
  80. log.Printf("Adding LDAP Sync Job with schedule set at %s", config.Config.Sync.Schedule)
  81. log.Printf("Sync will run with SAFE mode set to %v", config.Config.Sync.SafeRun)
  82. log.Printf("Sync will run with SEND_MAIL set to %v", config.Config.Sync.SendMail)
  83. log.Printf("Sync will run with SCHEDULE set to %v", config.Config.Sync.Schedule)
  84. c.AddJob(config.Config.Sync.Schedule, syncJob)
  85. c.Start()
  86. log.Println("karmen is listening to port 3000...")
  87. if err := http.ListenAndServe(":3000", handlers.LoggingHandler(os.Stdout, karmen_handlers.Handlers())); err != nil {
  88. panic(err)
  89. }
  90. }