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 }