Mercurial > gemma
changeset 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 | ade07a3f2cfd f1fb8c4f6587 |
files | pkg/controllers/importqueue.go pkg/imports/queue.go pkg/imports/sr.go |
diffstat | 3 files changed, 44 insertions(+), 3 deletions(-) [+] |
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
--- a/pkg/imports/queue.go Sat Feb 12 17:36:20 2022 +0100 +++ b/pkg/imports/queue.go Sat Feb 12 18:56:55 2022 +0100 @@ -731,6 +731,16 @@ return iqueue.decideImport(ctx, id, accepted, reviewer) } +func (q *importQueue) All(fn func(JobKind, JobCreator)) { + q.creatorsMu.Lock() + defer q.creatorsMu.Unlock() + for k, v := range q.creators { + fn(k, v) + } +} + +func All(fn func(JobKind, JobCreator)) { iqueue.All(fn) } + type logFeedback int64 func (lf logFeedback) log(kind, format string, args ...interface{}) {
--- a/pkg/imports/sr.go Sat Feb 12 17:36:20 2022 +0100 +++ b/pkg/imports/sr.go Sat Feb 12 18:56:55 2022 +0100 @@ -107,6 +107,9 @@ func (srJobCreator) Create() Job { return new(SoundingResult) } +// LoadingLogs ensures that log lines are loaded when import is exported. +func (srJobCreator) LoadingLogs() bool { return true } + func (srJobCreator) Depends() [2][]string { return [2][]string{ {"sounding_results", "sounding_results_iso_areas",