| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 | 
							- package main
 
- import (
 
- 	"flag"
 
- 	"fmt"
 
- 	"log"
 
- 	"net/http"
 
- 	"os"
 
- 	"path/filepath"
 
- 	"time"
 
- 	"github.com/gorilla/handlers"
 
- 	"github.com/jinzhu/gorm"
 
- 	"github.com/robfig/cron"
 
- 	"gogs.carducci-dante.gov.it/karmen/core/config"
 
- 	"gogs.carducci-dante.gov.it/karmen/core/cron/sync"
 
- 	"gogs.carducci-dante.gov.it/karmen/core/generator"
 
- 	"gogs.carducci-dante.gov.it/karmen/core/generator/generators/department"
 
- 	"gogs.carducci-dante.gov.it/karmen/core/generator/generators/list"
 
- 	karmen_handlers "gogs.carducci-dante.gov.it/karmen/core/handlers"
 
- 	"gogs.carducci-dante.gov.it/karmen/core/orm"
 
- )
 
- const (
 
- 	MaxNumRetries     = 20
 
- 	RetryTimeInterval = 5
 
- )
 
- var (
 
- 	db  *gorm.DB
 
- 	err error
 
- 	models = []interface{}{
 
- 		&orm.Teacher{},
 
- 		&orm.Department{},
 
- 		&orm.Subject{},
 
- 		&orm.Class{},
 
- 		&orm.Student{},
 
- 		&orm.Activity{},
 
- 		&orm.Office{},
 
- 		&orm.Administrative{},
 
- 		&orm.Group{},
 
- 		&orm.Document{},
 
- 	}
 
- )
 
- func main() {
 
- 	configFile := flag.String("config", "config/config.yaml", "Load the given config file")
 
- 	flag.Parse()
 
- 	log.Println("Loading config file...")
 
- 	err = config.ReadFile(*configFile, config.Config)
 
- 	if err != nil {
 
- 		panic(err)
 
- 	}
 
- 	log.Println("Starting karmen and waiting for the DB...")
 
- 	count := MaxNumRetries
 
- 	wait := true
 
- 	for wait && count > 0 {
 
- 		db, err = orm.New(fmt.Sprintf("%s?%s", config.Config.Orm.Connection, config.Config.Orm.Options))
 
- 		if err != nil {
 
- 			count--
 
- 			log.Println(err)
 
- 			log.Printf("Remaining retries: %d", count)
 
- 			time.Sleep(time.Second * RetryTimeInterval)
 
- 			continue
 
- 		}
 
- 		wait = false
 
- 	}
 
- 	orm.Use(db)
 
- 	if config.Config.Orm.AutoMigrate {
 
- 		log.Print("Automigrating...")
 
- 		orm.AutoMigrate()
 
- 	}
 
- 	log.Println("Map models <-> handlers")
 
- 	if err := orm.MapHandlers(models); err != nil {
 
- 		panic(err)
 
- 	}
 
- 	generator.Generators = make(map[string]generator.Generator)
 
- 	log.Println("Initialize ListGenerator")
 
- 	generator.Generators["list"] = list.NewListGenerator(config.Config)
 
- 	log.Println("Initialize DepartmentGenerator")
 
- 	generator.Generators["department"] = department.NewDepartmentGenerator(&generator.Config{ConfigT: *config.Config})
 
- 	files, err := filepath.Glob("generator/generators/*")
 
- 	if err != nil {
 
- 		panic(err)
 
- 	}
 
- 	log.Println("Found the following generators...", files)
 
- 	gTypes := make([]*orm.GeneratorType, 0)
 
- 	for _, g := range files {
 
- 		gTypes = append(gTypes, &orm.GeneratorType{Name: filepath.Base(g)})
 
- 	}
 
- 	log.Println("Update generator_types table...")
 
- 	for _, gt := range gTypes {
 
- 		var gType []orm.GeneratorType
 
- 		if err := orm.DB().Where("name = ?", gt.Name).Find(&gType).Error; err != nil {
 
- 			panic(err)
 
- 		}
 
- 		if len(gType) == 0 {
 
- 			err := orm.DB().Debug().Create(gt).Error
 
- 			if err != nil {
 
- 				panic(err)
 
- 			}
 
- 		}
 
- 	}
 
- 	if err := orm.DB().Find(&gTypes).Error; err != nil {
 
- 		panic(err)
 
- 	}
 
- 	log.Println("Currently registered generators are:")
 
- 	for _, g := range gTypes {
 
- 		log.Println(g.Name)
 
- 	}
 
- 	log.Println("Starting cron jobs...")
 
- 	c := cron.New()
 
- 	syncJob := sync.NewSyncJob(config.Config)
 
- 	if config.Config.Sync.Schedule == "" {
 
- 		config.Config.Sync.Schedule = "@every 10m"
 
- 	}
 
- 	log.Printf("Adding LDAP Sync Job with schedule set at %s", config.Config.Sync.Schedule)
 
- 	log.Printf("Sync will run with SAFE mode set to %v", config.Config.Sync.SafeRun)
 
- 	log.Printf("Sync will run with SEND_MAIL set to %v", config.Config.Sync.SendMail)
 
- 	log.Printf("Sync will run with SCHEDULE set to %v", config.Config.Sync.Schedule)
 
- 	c.AddJob(config.Config.Sync.Schedule, syncJob)
 
- 	c.Start()
 
- 	log.Println("karmen is listening to port 3000...")
 
- 	if err := http.ListenAndServe(":3000", handlers.LoggingHandler(os.Stdout, karmen_handlers.Handlers(models))); err != nil {
 
- 		panic(err)
 
- 	}
 
- }
 
 
  |