Mercurial > gemma
view pkg/controllers/importqueue.go @ 1030:bf10a7f990cc
refac: fairway profile retrieves current data from store
author | Thomas Junk <thomas.junk@intevation.de> |
---|---|
date | Wed, 24 Oct 2018 15:09:06 +0200 |
parents | 3de54d7b7d30 |
children | c0f5dedf5753 |
line wrap: on
line source
// This is Free Software under GNU Affero General Public License v >= 3.0 // without warranty, see README.md and license for details. // // SPDX-License-Identifier: AGPL-3.0-or-later // License-Filename: LICENSES/AGPL-3.0.txt // // Copyright (C) 2018 by via donau // – Österreichische Wasserstraßen-Gesellschaft mbH // Software engineering by Intevation GmbH // // Author(s): // * Sascha L. Teichmann <sascha.teichmann@intevation.de> package controllers import ( "database/sql" "net/http" "strconv" "gemma.intevation.de/gemma/pkg/models" "github.com/gorilla/mux" ) const ( selectImportsUnpagedSQL = ` SELECT id, state::varchar, enqueued, kind, username FROM waterway.imports ORDER BY id` selectImportPagedSQL = selectImportsUnpagedSQL + ` LIMIT $1 OFFSET $2` selectImportLogsSQL = ` SELECT time, kind::varchar, msg FROM waterway.import_logs WHERE import_id = $1 ORDER BY time` ) func listImports( _ interface{}, req *http.Request, conn *sql.Conn, ) (jr JSONResult, err error) { vars := mux.Vars(req) off, of := vars["offset"] lim, lf := vars["limit"] var rows *sql.Rows if of && lf { offset, _ := strconv.ParseInt(off, 10, 64) limit, _ := strconv.ParseInt(lim, 10, 64) rows, err = conn.QueryContext( req.Context(), selectImportPagedSQL, limit, offset) } else { rows, err = conn.QueryContext( req.Context(), selectImportsUnpagedSQL) } if err != nil { return } defer rows.Close() imports := make([]*models.Import, 0, 20) for rows.Next() { var it models.Import if err = rows.Scan( &it.ID, &it.State, &it.Enqueued, &it.Kind, &it.User, ); err != nil { return } imports = append(imports, &it) } if err = rows.Err(); err != nil { return } jr = JSONResult{ Result: struct { Imports []*models.Import `json:"imports"` }{ Imports: imports, }, } return } func importLogs( _ interface{}, req *http.Request, conn *sql.Conn, ) (jr JSONResult, err error) { id, _ := strconv.ParseInt(mux.Vars(req)["id"], 10, 64) var rows *sql.Rows rows, err = conn.QueryContext(req.Context(), selectImportLogsSQL, id) if err != nil { return } defer rows.Close() entries := make([]*models.ImportLogEntry, 0, 10) for rows.Next() { var entry models.ImportLogEntry if err = rows.Scan(&entry.Time, &entry.Kind, &entry.Message); err != nil { return } entries = append(entries, &entry) } if err = rows.Err(); err != nil { return } jr = JSONResult{ Result: struct { Entries []*models.ImportLogEntry `json:"entries"` }{ Entries: entries, }, } return }