Mercurial > gemma
changeset 1653:06f08458d666
Scheduled imports: Load configuration from database when triggered by cron.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Thu, 20 Dec 2018 18:14:28 +0100 |
parents | f39957ea08aa |
children | 85386ad17d34 |
files | pkg/imports/config.go pkg/imports/gmsched.go |
diffstat | 2 files changed, 68 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- 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 +}
--- 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! }