# HG changeset patch # User Sascha L. Teichmann # Date 1545326068 -3600 # Node ID 06f08458d66689144802500c0c97d59b856d8c4c # Parent f39957ea08aa782e44b2b067bf851c64a290591f Scheduled imports: Load configuration from database when triggered by cron. diff -r f39957ea08aa -r 06f08458d666 pkg/imports/config.go --- a/pkg/imports/config.go Thu Dec 20 17:23:54 2018 +0100 +++ b/pkg/imports/config.go Thu Dec 20 18:14:28 2018 +0100 @@ -14,9 +14,12 @@ package imports import ( + "context" + "database/sql" "encoding/json" "fmt" + "gemma.intevation.de/gemma/pkg/auth" "github.com/robfig/cron" ) @@ -67,5 +70,60 @@ return err } *cs = CronSpec(spec) + return nil } + +const ( + configUser = "sys_admin" + + loadConfigSQL = ` +SELECT + username, + kind, + send_email, + auto_accept, + cron, + url +FROM waterway.import_configuration +WHERE id = $1` +) + +func loadIDConfig(id int64) (*IDConfig, error) { + + ctx := context.Background() + cfg := &IDConfig{ID: id} + + err := auth.RunAs(ctx, configUser, func(conn *sql.Conn) error { + var kind ImportKind + var cron, url sql.NullString + if err := conn.QueryRowContext(ctx, loadConfigSQL, id).Scan( + &cfg.User, + &kind, + &cfg.SendEMail, + &cfg.AutoAccept, + &cron, + &url, + ); err != nil { + return err + } + cfg.Kind = ImportKind(kind) + if cron.Valid { + c := CronSpec(cron.String) + cfg.Cron = &c + } + if url.Valid { + cfg.URL = &url.String + } + return nil + }) + + switch { + case err == sql.ErrNoRows: + return nil, nil + case err != nil: + return nil, err + } + + return cfg, nil +} diff -r f39957ea08aa -r 06f08458d666 pkg/imports/gmsched.go --- a/pkg/imports/gmsched.go Thu Dec 20 17:23:54 2018 +0100 +++ b/pkg/imports/gmsched.go Thu Dec 20 18:14:28 2018 +0100 @@ -23,7 +23,16 @@ scheduler.RegisterAction("gm", scheduledGM) } -func scheduledGM(user string, cfgID int64) { +func scheduledGM(user string, id int64) { log.Println("info: scheduled GM import") + cfg, err := loadIDConfig(id) + if err != nil { + log.Printf("error: %v\n", err) + return + } + if cfg == nil { + log.Printf("warn: No config found for id %d.\n", id) + return + } // TODO: Implement me! }