comparison 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
comparison
equal deleted inserted replaced
5563:3be1d79ad3a3 5564:aaa9e658cabd
73 WHERE lu.username = import.imports.username) AS country, 73 WHERE lu.username = import.imports.username) AS country,
74 signer, 74 signer,
75 EXISTS(SELECT 1 FROM import.import_logs 75 EXISTS(SELECT 1 FROM import.import_logs
76 WHERE kind = 'warn'::log_type and import_id = id) AS has_warnings, 76 WHERE kind = 'warn'::log_type and import_id = id) AS has_warnings,
77 data, 77 data,
78 CASE WHEN kind = 'sr' THEN ARRAY(SELECT msg FROM import.import_logs WHERE import_id = id) 78 CASE WHEN kind = ANY($1) THEN ARRAY(SELECT msg FROM import.import_logs WHERE import_id = id)
79 ELSE NULL 79 ELSE NULL
80 END AS msgs 80 END AS msgs
81 FROM import.imports 81 FROM import.imports
82 WHERE 82 WHERE
83 ` 83 `
111 type filledStmt struct { 111 type filledStmt struct {
112 stmt strings.Builder 112 stmt strings.Builder
113 args []interface{} 113 args []interface{}
114 } 114 }
115 115
116 func buildFilters(projection string, req *http.Request) (*filledStmt, *filledStmt, *filledStmt, error) { 116 func buildFilters(projection string, req *http.Request, args ...interface{}) (
117 *filledStmt,
118 *filledStmt,
119 *filledStmt,
120 error,
121 ) {
117 122
118 var l, a, b filterAnd 123 var l, a, b filterAnd
119 124
120 var noBefore, noAfter bool 125 var noBefore, noAfter bool
121 126
194 } 199 }
195 200
196 fl := &filledStmt{} 201 fl := &filledStmt{}
197 fa := &filledStmt{} 202 fa := &filledStmt{}
198 fb := &filledStmt{} 203 fb := &filledStmt{}
204
205 fl.args = append(fl.args, args...)
206 fa.args = append(fa.args, args...)
207 fb.args = append(fb.args, args...)
199 208
200 fa.stmt.WriteString(selectEnqueuedSQL) 209 fa.stmt.WriteString(selectEnqueuedSQL)
201 fb.stmt.WriteString(selectEnqueuedSQL) 210 fb.stmt.WriteString(selectEnqueuedSQL)
202 211
203 var counting bool 212 var counting bool
262 return &models.ImportTime{Time: when.UTC()} 271 return &models.ImportTime{Time: when.UTC()}
263 } 272 }
264 273
265 func exportImports(rw http.ResponseWriter, req *http.Request) { 274 func exportImports(rw http.ResponseWriter, req *http.Request) {
266 275
267 list, _, _, err := buildFilters(selectExportSQL, req) 276 type LogLoader interface{ LoadingLogs() bool }
277
278 var lls []string
279
280 imports.All(func(k imports.JobKind, jc imports.JobCreator) {
281 if ll, ok := jc.(LogLoader); ok && ll.LoadingLogs() {
282 lls = append(lls, string(k))
283 }
284 })
285
286 var loaders pgtype.TextArray
287 if err := loaders.Set(lls); err != nil {
288 http.Error(
289 rw, fmt.Sprintf("error: %v", err),
290 http.StatusInternalServerError)
291 return
292 }
293
294 list, _, _, err := buildFilters(selectExportSQL, req, &loaders)
295
268 if err != nil { 296 if err != nil {
269 http.Error(rw, "error: "+err.Error(), http.StatusBadRequest) 297 http.Error(rw, "error: "+err.Error(), http.StatusBadRequest)
270 return 298 return
271 } 299 }
272 300