Mercurial > gemma
view pkg/controllers/statsupdates.go @ 5637:7f9600ab5461
merge
author | Thomas Junk <thomas.junk@intevation.de> |
---|---|
date | Wed, 14 Jun 2023 08:45:11 +0200 |
parents | 5f47eeea988d |
children | 6270951dda28 |
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) 2021 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" "github.com/gorilla/mux" "gemma.intevation.de/gemma/pkg/log" mw "gemma.intevation.de/gemma/pkg/middleware" ) const ( listStatsUpdatesSQL = `SELECT name FROM sys_admin.stats_updates ORDER BY name` statsUpdatesScriptSQL = `SELECT script FROM sys_admin.stats_updates WHERE name = $1` ) func listStatsUpdates(req *http.Request) (jr mw.JSONResult, err error) { ctx := req.Context() conn := mw.JSONConn(req) rows, err2 := conn.QueryContext(ctx, listStatsUpdatesSQL) if err2 != nil { log.Errorf("%v\n", err2) err = mw.JSONError{ Code: http.StatusInternalServerError, Message: "Listing stats update failed.", } return } defer rows.Close() names := []string{} for rows.Next() { var name string if err2 := rows.Scan(&name); err2 != nil { log.Errorf("%v\n", err2) err = mw.JSONError{ Code: http.StatusInternalServerError, Message: "Fetching stats update names failed.", } return } names = append(names, name) } if err2 := rows.Err(); err2 != nil { log.Errorf("%v\n", err2) err = mw.JSONError{ Code: http.StatusInternalServerError, Message: "Fetching stats update names failed.", } return } out := struct { StatsUpdates []string `json:"stats-updates"` }{ StatsUpdates: names, } jr = mw.JSONResult{Result: out} return } func statsUpdates(req *http.Request) (jr mw.JSONResult, err error) { name := mux.Vars(req)["name"] ctx := req.Context() conn := mw.JSONConn(req) var script string err2 := conn.QueryRowContext(ctx, statsUpdatesScriptSQL, name).Scan(&script) switch { case err2 == sql.ErrNoRows: err = mw.JSONError{ Code: http.StatusNotFound, Message: "No such update script.", } return case err2 != nil: log.Errorf("%v\n", err2) err = mw.JSONError{ Code: http.StatusInternalServerError, Message: "Loading update script failed.", } return } if _, err2 := conn.ExecContext(ctx, script); err2 != nil { log.Errorf("%v\n", err2) err = mw.JSONError{ Code: http.StatusInternalServerError, Message: "Loading update script failed.", } return } jr = mw.JSONResult{Result: map[string]interface{}{}} return }