comparison pkg/controllers/importqueue.go @ 2662:f90557a8c960 import-overview-rework

Moved summary from /api/imports overview to /api/imports/{id} details.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Thu, 14 Mar 2019 11:31:22 +0100
parents 3a242e6aa56d
children 386ff766dfcd
comparison
equal deleted inserted replaced
2640:4bcb26542767 2662:f90557a8c960
44 state::varchar, 44 state::varchar,
45 enqueued, 45 enqueued,
46 kind, 46 kind,
47 username, 47 username,
48 signer, 48 signer,
49 summary, 49 summary IS NOT NULL,
50 EXISTS ( 50 EXISTS (
51 SELECT true FROM warned 51 SELECT true FROM warned
52 WHERE warned.id = imports.id 52 WHERE warned.id = imports.id
53 ) AS has_warnings 53 ) AS has_warnings
54 ` 54 `
57 ` 57 `
58 withWarningsSQL = ` 58 withWarningsSQL = `
59 FROM import.imports JOIN warned ON imports.id = warned.id 59 FROM import.imports JOIN warned ON imports.id = warned.id
60 ` 60 `
61 61
62 selectHasImportSQL = ` 62 selectImportSummaySQL = `
63 SELECT true FROM import.imports WHERE id = $1` 63 SELECT summary FROM import.imports WHERE id = $1`
64 64
65 selectHasNoRunningImportSQL = ` 65 selectHasNoRunningImportSQL = `
66 SELECT true FROM import.imports 66 SELECT true FROM import.imports
67 WHERE id = $1 AND state <> 'running'::import_state` 67 WHERE id = $1 AND state <> 'running'::import_state`
68 68
228 } 228 }
229 defer rows.Close() 229 defer rows.Close()
230 230
231 imports := make([]*models.Import, 0, 20) 231 imports := make([]*models.Import, 0, 20)
232 232
233 var signer, summary sql.NullString 233 var signer sql.NullString
234 234
235 for rows.Next() { 235 for rows.Next() {
236 var it models.Import 236 var it models.Import
237 if err = rows.Scan( 237 if err = rows.Scan(
238 &it.ID, 238 &it.ID,
239 &it.State, 239 &it.State,
240 &it.Enqueued, 240 &it.Enqueued,
241 &it.Kind, 241 &it.Kind,
242 &it.User, 242 &it.User,
243 &signer, 243 &signer,
244 &summary, 244 &it.Summary,
245 &it.Warnings, 245 &it.Warnings,
246 ); err != nil { 246 ); err != nil {
247 return 247 return
248 } 248 }
249 if signer.Valid { 249 if signer.Valid {
250 it.Signer = signer.String 250 it.Signer = signer.String
251 }
252 if summary.Valid {
253 if err = json.NewDecoder(
254 strings.NewReader(summary.String)).Decode(&it.Summary); err != nil {
255 return
256 }
257 } 251 }
258 imports = append(imports, &it) 252 imports = append(imports, &it)
259 } 253 }
260 254
261 if err = rows.Err(); err != nil { 255 if err = rows.Err(); err != nil {
281 ctx := req.Context() 275 ctx := req.Context()
282 276
283 id, _ := strconv.ParseInt(mux.Vars(req)["id"], 10, 64) 277 id, _ := strconv.ParseInt(mux.Vars(req)["id"], 10, 64)
284 278
285 // Check if he have such a import job first. 279 // Check if he have such a import job first.
286 var dummy bool 280 var summary sql.NullString
287 err = conn.QueryRowContext(ctx, selectHasImportSQL, id).Scan(&dummy) 281 err = conn.QueryRowContext(ctx, selectImportSummaySQL, id).Scan(&summary)
288 switch { 282 switch {
289 case err == sql.ErrNoRows: 283 case err == sql.ErrNoRows:
290 err = JSONError{ 284 err = JSONError{
291 Code: http.StatusNotFound, 285 Code: http.StatusNotFound,
292 Message: fmt.Sprintf("Cannot find import #%d.", id), 286 Message: fmt.Sprintf("Cannot find import #%d.", id),
294 return 288 return
295 case err != nil: 289 case err != nil:
296 return 290 return
297 } 291 }
298 292
293 var sum interface{}
294 if summary.Valid {
295 if err = json.NewDecoder(
296 strings.NewReader(summary.String)).Decode(&sum); err != nil {
297 return
298 }
299 }
300
299 // We have it -> generate log entries. 301 // We have it -> generate log entries.
300 var rows *sql.Rows 302 var rows *sql.Rows
301 rows, err = conn.QueryContext(ctx, selectImportLogsSQL, id) 303 rows, err = conn.QueryContext(ctx, selectImportLogsSQL, id)
302 if err != nil { 304 if err != nil {
303 return 305 return
318 return 320 return
319 } 321 }
320 322
321 jr = JSONResult{ 323 jr = JSONResult{
322 Result: struct { 324 Result: struct {
325 Summary interface{} `json:"summary,omitempty"`
323 Entries []*models.ImportLogEntry `json:"entries"` 326 Entries []*models.ImportLogEntry `json:"entries"`
324 }{ 327 }{
328 Summary: sum,
325 Entries: entries, 329 Entries: entries,
326 }, 330 },
327 } 331 }
328 return 332 return
329 } 333 }