changeset 1168:930fdd8b474f

Track successfull imports in a separate table to be able to remove them later.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Wed, 14 Nov 2018 12:23:10 +0100
parents 1ae93a0438df
children 3807b6c2cfbf
files pkg/imports/queue.go pkg/imports/sr.go pkg/imports/track.go schema/auth.sql schema/gemma.sql
diffstat 5 files changed, 55 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/pkg/imports/queue.go	Wed Nov 14 12:12:00 2018 +0100
+++ b/pkg/imports/queue.go	Wed Nov 14 12:23:10 2018 +0100
@@ -36,7 +36,7 @@
 	}
 
 	Job interface {
-		Do(*sql.Conn, Feedback) error
+		Do(int64, context.Context, *sql.Conn, Feedback) error
 		CleanUp() error
 	}
 
@@ -355,8 +355,11 @@
 			feedback.Info("import #%d started", idj.id)
 
 			errDo := survive(func() error {
-				return auth.RunAs(idj.user, context.Background(),
-					func(conn *sql.Conn) error { return job.Do(conn, feedback) })
+				ctx := context.Background()
+				return auth.RunAs(idj.user, ctx,
+					func(conn *sql.Conn) error {
+						return job.Do(idj.id, ctx, conn, feedback)
+					})
 			})()
 			if errDo != nil {
 				feedback.Error("error do: %v", errDo)
--- a/pkg/imports/sr.go	Wed Nov 14 12:12:00 2018 +0100
+++ b/pkg/imports/sr.go	Wed Nov 14 12:23:10 2018 +0100
@@ -144,7 +144,12 @@
 `
 )
 
-func (sr SoundingResult) Do(conn *sql.Conn, feedback Feedback) error {
+func (sr SoundingResult) Do(
+	importID int64,
+	ctx context.Context,
+	conn *sql.Conn,
+	feedback Feedback,
+) error {
 
 	z, err := zip.OpenReader(filepath.Join(string(sr), "sr.zip"))
 	if err != nil {
@@ -188,8 +193,6 @@
 		return err
 	}
 
-	ctx := context.Background()
-
 	tx, err := conn.BeginTx(ctx, nil)
 	if err != nil {
 		return err
@@ -261,6 +264,11 @@
 		return err
 	}
 
+	// Store for potential later removal.
+	if err = track(tx, ctx, importID, "waterway.sounding_results", id); err != nil {
+		return err
+	}
+
 	if err = tx.Commit(); err == nil {
 		feedback.Info("Storing sounding result was successful.")
 	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pkg/imports/track.go	Wed Nov 14 12:23:10 2018 +0100
@@ -0,0 +1,30 @@
+// This is Free Software under GNU Affero General Public License v >= 3.0
+// without warranty, see README.md and license for details.
+//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// License-Filename: LICENSES/AGPL-3.0.txt
+//
+// Copyright (C) 2018 by via donau
+//   – Österreichische Wasserstraßen-Gesellschaft mbH
+// Software engineering by Intevation GmbH
+//
+// Author(s):
+//  * Sascha L. Teichmann <sascha.teichmann@intevation.de>
+
+package imports
+
+import (
+	"context"
+	"database/sql"
+)
+
+const (
+	trackImportSQL = `
+    INSERT INTO waterway.track_imports (import_id, relation, key)
+	VALUES ($1, $2::regclass, $3)`
+)
+
+func track(tx *sql.Tx, ctx context.Context, importID int64, relation string, key int64) error {
+	_, err := tx.ExecContext(ctx, trackImportSQL, importID, relation, key)
+	return err
+}
--- a/schema/auth.sql	Wed Nov 14 12:12:00 2018 +0100
+++ b/schema/auth.sql	Wed Nov 14 12:23:10 2018 +0100
@@ -24,7 +24,7 @@
 GRANT INSERT, UPDATE, DELETE ON
     users.templates, users.user_templates TO waterway_admin;
 GRANT INSERT, UPDATE, DELETE ON
-    waterway.imports, waterway.import_logs TO waterway_admin;
+    waterway.imports, waterway.import_logs, waterway.track_imports TO waterway_admin;
 
 --
 -- Extended privileges for sys_admin
--- a/schema/gemma.sql	Wed Nov 14 12:12:00 2018 +0100
+++ b/schema/gemma.sql	Wed Nov 14 12:23:10 2018 +0100
@@ -539,4 +539,11 @@
     msg TEXT NOT NULL
 );
 
+CREATE TABLE waterway.track_imports (
+    import_id int      NOT NULL REFERENCES waterway.imports(id),
+    relation  regclass NOT NULL,
+    key       int      NOT NULL,
+    UNIQUE (relation, key)
+);
+
 COMMIT;