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!
 }