comparison pkg/controllers/importqueue.go @ 1194:7db850de0952

Added a signer who makes the final decison on an import. Generate a log entry when the final decison is made.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Sun, 18 Nov 2018 18:29:25 +0100
parents 58acc343b1b6
children 486d66a9565c
comparison
equal deleted inserted replaced
1193:58acc343b1b6 1194:7db850de0952
20 "log" 20 "log"
21 "net/http" 21 "net/http"
22 "strconv" 22 "strconv"
23 "strings" 23 "strings"
24 24
25 "gemma.intevation.de/gemma/pkg/auth"
25 "gemma.intevation.de/gemma/pkg/imports" 26 "gemma.intevation.de/gemma/pkg/imports"
26 "gemma.intevation.de/gemma/pkg/models" 27 "gemma.intevation.de/gemma/pkg/models"
27 "github.com/gorilla/mux" 28 "github.com/gorilla/mux"
28 "github.com/jackc/pgx/pgtype" 29 "github.com/jackc/pgx/pgtype"
29 ) 30 )
33 SELECT 34 SELECT
34 id, 35 id,
35 state::varchar, 36 state::varchar,
36 enqueued, 37 enqueued,
37 kind, 38 kind,
38 username 39 username,
40 signer
39 FROM waterway.imports 41 FROM waterway.imports
40 ` 42 `
41 43
42 selectHasImportSQL = ` 44 selectHasImportSQL = `
43 SELECT true FROM Waterway.imports WHERE id = $1` 45 SELECT true FROM Waterway.imports WHERE id = $1`
165 &it.ID, 167 &it.ID,
166 &it.State, 168 &it.State,
167 &it.Enqueued, 169 &it.Enqueued,
168 &it.Kind, 170 &it.Kind,
169 &it.User, 171 &it.User,
172 &it.Signer,
170 ); err != nil { 173 ); err != nil {
171 return 174 return
172 } 175 }
173 imports = append(imports, &it) 176 imports = append(imports, &it)
174 } 177 }
293 const ( 296 const (
294 isPendingSQL = ` 297 isPendingSQL = `
295 SELECT state = 'pending'::waterway.import_state, kind WHERE id = $1` 298 SELECT state = 'pending'::waterway.import_state, kind WHERE id = $1`
296 299
297 reviewSQL = ` 300 reviewSQL = `
298 UPDATE waterway.imports SET state = $1::waterway.import_state 301 UPDATE waterway.imports SET
299 WHERE id = $2` 302 state = $1::waterway.import_state,
303 signer = $2
304 WHERE id = $3`
300 305
301 deleteImportDataSQL = `SELECT waterway.del_import($1)` 306 deleteImportDataSQL = `SELECT waterway.del_import($1)`
302 307
303 deleteImportTrackSQL = ` 308 deleteImportTrackSQL = `
304 DELETE FROM waterway.track_imports WHERE import_id = $1` 309 DELETE FROM waterway.track_imports WHERE import_id = $1`
310
311 logDecisionSQL = `
312 INSERT INTO waterway.import_logs (import_id, msg) VALUES ($1, $2)`
305 ) 313 )
306 314
307 func reviewImport( 315 func reviewImport(
308 _ interface{}, 316 _ interface{},
309 req *http.Request, 317 req *http.Request,
356 if _, err = tx.ExecContext(ctx, deleteImportDataSQL, id); err != nil { 364 if _, err = tx.ExecContext(ctx, deleteImportDataSQL, id); err != nil {
357 return 365 return
358 } 366 }
359 } 367 }
360 368
361 if _, err = tx.ExecContext(ctx, reviewSQL, state, id); err != nil { 369 // Log the decision and set the final state.
370 session, _ := auth.GetSession(req)
371 who := session.User
372
373 if _, err = tx.ExecContext(ctx, logDecisionSQL, id,
374 fmt.Sprintf("User '%s' %s import %d.", who, state, id)); err != nil {
375 return
376 }
377
378 if _, err = tx.ExecContext(ctx, reviewSQL, state, who, id); err != nil {
362 return 379 return
363 } 380 }
364 381
365 if err = tx.Commit(); err != nil { 382 if err = tx.Commit(); err != nil {
366 return 383 return