Mercurial > gemma
comparison pkg/controllers/importqueue.go @ 1037:a04126989d91
Added endpoint to delete job from import queue.
This has no effect on running jobs.
DELETE path: /api/imports/[0-9]+
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Wed, 24 Oct 2018 16:21:44 +0200 |
parents | c0f5dedf5753 |
children | 3d50f558870c |
comparison
equal
deleted
inserted
replaced
1036:ae2e716b85d2 | 1037:a04126989d91 |
---|---|
38 LIMIT $1 OFFSET $2` | 38 LIMIT $1 OFFSET $2` |
39 | 39 |
40 selectHasImportSQL = ` | 40 selectHasImportSQL = ` |
41 SELECT true FROM Waterway.imports WHERE id = $1` | 41 SELECT true FROM Waterway.imports WHERE id = $1` |
42 | 42 |
43 selectHasNoRunningImportSQL = ` | |
44 SELECT true FROM Waterway.imports | |
45 WHERE id = $1 AND state <> 'running'::waterway.import_state` | |
46 | |
43 selectImportLogsSQL = ` | 47 selectImportLogsSQL = ` |
44 SELECT | 48 SELECT |
45 time, | 49 time, |
46 kind::varchar, | 50 kind::varchar, |
47 msg | 51 msg |
48 FROM waterway.import_logs | 52 FROM waterway.import_logs |
49 WHERE import_id = $1 | 53 WHERE import_id = $1 |
50 ORDER BY time` | 54 ORDER BY time` |
55 | |
56 deleteLogsSQL = ` | |
57 DELETE FROM waterway.import_logs WHERE import_id = $1` | |
58 | |
59 deleteImportSQL = ` | |
60 DELETE FROM waterway.imports WHERE id = $1` | |
51 ) | 61 ) |
52 | 62 |
53 func listImports( | 63 func listImports( |
54 _ interface{}, | 64 _ interface{}, |
55 req *http.Request, | 65 req *http.Request, |
159 Entries: entries, | 169 Entries: entries, |
160 }, | 170 }, |
161 } | 171 } |
162 return | 172 return |
163 } | 173 } |
174 | |
175 func deleteImport( | |
176 _ interface{}, | |
177 req *http.Request, | |
178 conn *sql.Conn, | |
179 ) (jr JSONResult, err error) { | |
180 | |
181 ctx := req.Context() | |
182 id, _ := strconv.ParseInt(mux.Vars(req)["id"], 10, 64) | |
183 | |
184 var tx *sql.Tx | |
185 tx, err = conn.BeginTx(ctx, nil) | |
186 if err != nil { | |
187 return | |
188 } | |
189 defer tx.Rollback() | |
190 | |
191 // Check if he have such a import job first. | |
192 var dummy bool | |
193 err = tx.QueryRowContext(ctx, selectHasNoRunningImportSQL, id).Scan(&dummy) | |
194 switch { | |
195 case err == sql.ErrNoRows: | |
196 err = JSONError{ | |
197 Code: http.StatusNotFound, | |
198 Message: fmt.Sprintf("Cannot find import #%d.", id), | |
199 } | |
200 return | |
201 case err != nil: | |
202 return | |
203 } | |
204 | |
205 if _, err = tx.ExecContext(ctx, deleteLogsSQL, id); err != nil { | |
206 return | |
207 } | |
208 | |
209 if _, err = tx.ExecContext(ctx, deleteImportSQL, id); err != nil { | |
210 return | |
211 } | |
212 | |
213 if err = tx.Commit(); err != nil { | |
214 return | |
215 } | |
216 | |
217 jr = JSONResult{Code: http.StatusNoContent} | |
218 | |
219 return | |
220 } |