Mercurial > gemma
changeset 2245:7d784840a9a7
Uploaded gauge measurements: Initial commit. TODO: Add endpoint.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Wed, 13 Feb 2019 16:12:38 +0100 |
parents | 52093f82a786 |
children | 2cba13653a58 |
files | pkg/imports/gm.go pkg/imports/ugm.go |
diffstat | 2 files changed, 85 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/pkg/imports/gm.go Wed Feb 13 15:47:10 2019 +0100 +++ b/pkg/imports/gm.go Wed Feb 13 16:12:38 2019 +0100 @@ -10,6 +10,7 @@ // // Author(s): // * Raimund Renkert <raimund.renkert@intevation.de> +// * Sascha L. Teichmann <sascha.teichmann@intevation.de> package imports
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pkg/imports/ugm.go Wed Feb 13 16:12:38 2019 +0100 @@ -0,0 +1,84 @@ +// 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 imports + +import ( + "context" + "database/sql" + "errors" + "os" + "path/filepath" + + "gemma.intevation.de/gemma/pkg/soap" + "gemma.intevation.de/gemma/pkg/soap/nts" +) + +type UploadGaugeMeasurement struct { + Dir string `json:"dir"` +} + +const UGMJobKind JobKind = "ugm" + +type ugmJobCreator struct{} + +func init() { RegisterJobCreator(UGMJobKind, ugmJobCreator{}) } + +func (ugmJobCreator) Description() string { return "uploaded gauge measurements" } + +func (ugmJobCreator) Create() Job { return new(UploadGaugeMeasurement) } + +func (ugmJobCreator) Depends() []string { return gmJobCreator{}.Depends() } + +func (ugmJobCreator) AutoAccept() bool { return true } + +func (ugmJobCreator) StageDone(context.Context, *sql.Tx, int64) error { return nil } + +func (ugm *UploadGaugeMeasurement) CleanUp() error { return os.RemoveAll(ugm.Dir) } + +// Do executes the actual bottleneck import. +func (ugm *UploadGaugeMeasurement) Do( + ctx context.Context, + importID int64, + conn *sql.Conn, + feedback Feedback, +) (interface{}, error) { + + fetch := func() ([]*nts.RIS_Message_Type, error) { + + var dst nts.Get_messages_result + + if err := soap.ValidateFile( + filepath.Join(ugm.Dir, "data.xml"), + "NtS_XSD_V.4.0.4.0.xsd", + &dst, + ); err != nil { + return nil, err + } + + result := dst.Result_message + if len(result) > 0 { + return nil, errors.New("No gauge measurements found") + } + + return result, nil + } + + return storeGaugeMeasurements( + ctx, + importID, + fetch, + conn, + feedback, + ) +}