diff pkg/controllers/importqueue.go @ 5564:aaa9e658cabd

Log export: Added marker interface to JobCreators that log messages should be loaded at export. Removes the hard coded SR export SQL logic.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Sat, 12 Feb 2022 18:56:55 +0100
parents 3be1d79ad3a3
children ceecc205011c
line wrap: on
line diff
--- a/pkg/controllers/importqueue.go	Sat Feb 12 17:36:20 2022 +0100
+++ b/pkg/controllers/importqueue.go	Sat Feb 12 18:56:55 2022 +0100
@@ -75,7 +75,7 @@
   EXISTS(SELECT 1 FROM import.import_logs
     WHERE kind = 'warn'::log_type and import_id = id) AS has_warnings,
   data,
-  CASE WHEN kind = 'sr' THEN ARRAY(SELECT msg FROM import.import_logs WHERE import_id = id)
+  CASE WHEN kind = ANY($1) THEN ARRAY(SELECT msg FROM import.import_logs WHERE import_id = id)
   ELSE NULL
   END AS msgs
 FROM import.imports
@@ -113,7 +113,12 @@
 	args []interface{}
 }
 
-func buildFilters(projection string, req *http.Request) (*filledStmt, *filledStmt, *filledStmt, error) {
+func buildFilters(projection string, req *http.Request, args ...interface{}) (
+	*filledStmt,
+	*filledStmt,
+	*filledStmt,
+	error,
+) {
 
 	var l, a, b filterAnd
 
@@ -197,6 +202,10 @@
 	fa := &filledStmt{}
 	fb := &filledStmt{}
 
+	fl.args = append(fl.args, args...)
+	fa.args = append(fa.args, args...)
+	fb.args = append(fb.args, args...)
+
 	fa.stmt.WriteString(selectEnqueuedSQL)
 	fb.stmt.WriteString(selectEnqueuedSQL)
 
@@ -264,7 +273,26 @@
 
 func exportImports(rw http.ResponseWriter, req *http.Request) {
 
-	list, _, _, err := buildFilters(selectExportSQL, req)
+	type LogLoader interface{ LoadingLogs() bool }
+
+	var lls []string
+
+	imports.All(func(k imports.JobKind, jc imports.JobCreator) {
+		if ll, ok := jc.(LogLoader); ok && ll.LoadingLogs() {
+			lls = append(lls, string(k))
+		}
+	})
+
+	var loaders pgtype.TextArray
+	if err := loaders.Set(lls); err != nil {
+		http.Error(
+			rw, fmt.Sprintf("error: %v", err),
+			http.StatusInternalServerError)
+		return
+	}
+
+	list, _, _, err := buildFilters(selectExportSQL, req, &loaders)
+
 	if err != nil {
 		http.Error(rw, "error: "+err.Error(), http.StatusBadRequest)
 		return