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,
+	)
+}