Mercurial > gemma
diff pkg/imports/queue.go @ 1642:49c04bb64e0a
Import queue: Implemented auto-accept and email sending.
TODO: Do actual email sending.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Thu, 20 Dec 2018 13:45:32 +0100 |
parents | b10aa02d7819 |
children | a0982c38eac0 |
line wrap: on
line diff
--- a/pkg/imports/queue.go Thu Dec 20 13:19:54 2018 +0100 +++ b/pkg/imports/queue.go Thu Dec 20 13:45:32 2018 +0100 @@ -83,10 +83,12 @@ } idJob struct { - id int64 - kind JobKind - user string - data string + id int64 + kind JobKind + user string + sendEmail bool + autoAccept bool + data string } ) @@ -128,11 +130,15 @@ INSERT INTO waterway.imports ( kind, username, + send_email, + auto_accept, data ) VALUES ( $1, $2, - $3 + $3, + $4, + $5 ) RETURNING id` selectJobSQL = ` @@ -140,6 +146,8 @@ id, kind, username, + send_email, + auto_accept, data FROM waterway.imports WHERE state = 'queued'::waterway.import_state AND enqueued IN ( @@ -232,11 +240,23 @@ return q.creators[kind] } -func (q *importQueue) addJob(kind JobKind, user, data string) (int64, error) { +func (q *importQueue) addJob( + kind JobKind, + user string, + sendEmail, autoAccept bool, + data string, +) (int64, error) { ctx := context.Background() var id int64 err := auth.RunAs(ctx, queueUser, func(conn *sql.Conn) error { - return conn.QueryRowContext(ctx, insertJobSQL, string(kind), user, data).Scan(&id) + return conn.QueryRowContext( + ctx, + insertJobSQL, + string(kind), + user, + sendEmail, + autoAccept, + data).Scan(&id) }) if err == nil { select { @@ -250,8 +270,8 @@ // AddJob adds a job to the global import queue to be executed // as soon as possible. This is gone in a separate Go routine // so this will not block. -func AddJob(kind JobKind, user, data string) (int64, error) { - return iqueue.addJob(kind, user, data) +func AddJob(kind JobKind, user string, sendEmail, autoAccept bool, data string) (int64, error) { + return iqueue.addJob(kind, user, sendEmail, autoAccept, data) } type logFeedback int64 @@ -333,7 +353,13 @@ } defer tx.Rollback() if err = tx.QueryRowContext(ctx, selectJobSQL, &kinds).Scan( - &ji.id, &ji.kind, &ji.user, &ji.data); err != nil { + &ji.id, + &ji.kind, + &ji.user, + &ji.sendEmail, + &ji.autoAccept, + &ji.data, + ); err != nil { return err } _, err = tx.ExecContext(ctx, updateStateSQL, "running", ji.id) @@ -480,14 +506,18 @@ } var state string - if errDo != nil || errCleanup != nil { + switch { + case errDo != nil || errCleanup != nil: state = "failed" - } else { + case idj.autoAccept: + state = "accepted" + default: state = "pending" } if err := updateStateSummary(ctx, idj.id, state, summary); err != nil { log.Printf("setting state of job %d failed: %v\n", idj.id, err) } + // TODO: Send email if sendEmail is set. log.Printf("import #%d finished: %s\n", idj.id, state) }(jc, idj) }