Mercurial > gemma
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 |