# HG changeset patch # User Sascha L. Teichmann # Date 1550070758 -3600 # Node ID 7d784840a9a7d9d9c57463ead4176c8e0f392555 # Parent 52093f82a786c786a2f22e83690aeeaa908ce43a Uploaded gauge measurements: Initial commit. TODO: Add endpoint. diff -r 52093f82a786 -r 7d784840a9a7 pkg/imports/gm.go --- 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 +// * Sascha L. Teichmann package imports diff -r 52093f82a786 -r 7d784840a9a7 pkg/imports/ugm.go --- /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 + +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, + ) +}