Mercurial > gemma
view pkg/imports/ugm.go @ 4113:f39d20427e89 request_hist_bns
WIP: Reworked bottleneck import:
- all available bottlenecks from the service are loaded (including
historic data) - kudos to Tom Gottfried
- Bottlenecks which are identical to an exiting (non staged) one are
recognized as "unchanged" and ignored.
- All remaining Bottlenecks are inserted into Staging area
- On "staging done" all existing bottlenecks with conflicting
(bottleneck_id,validity) are deleted (replaced by the new
bottlenecks).
Known Issues:
- Sometimes the identification of unchanged bottlenecks does not work,
needs debugging.
- The front end does not handle historic data correctly (we need to
define what "correctly" should be).
- Save points should be used to distinguish ignored errors from fatal
ones.
author | Sascha Wilde <wilde@intevation.de> |
---|---|
date | Wed, 31 Jul 2019 17:04:31 +0200 |
parents | 4acbee65275d |
children | 8b75ac5e243e |
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 imports import ( "context" "database/sql" "errors" "os" "path/filepath" "gemma.intevation.de/gemma/pkg/soap" "gemma.intevation.de/gemma/pkg/soap/nts" ) type UploadedGaugeMeasurement 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(UploadedGaugeMeasurement) } func (ugmJobCreator) Depends() [2][]string { return gmJobCreator{}.Depends() } func (ugmJobCreator) AutoAccept() bool { return true } func (ugmJobCreator) StageDone(context.Context, *sql.Tx, int64) error { return nil } func (ugm *UploadedGaugeMeasurement) CleanUp() error { return os.RemoveAll(ugm.Dir) } // Do executes the actual uploaded gauge measurement import. func (ugm *UploadedGaugeMeasurement) 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", &dst, ); err != nil { return nil, err } if len(dst.Result_message) == 0 { return nil, errors.New("No gauge measurements found") } return dst.Result_message, nil } return storeGaugeMeasurements( ctx, importID, fetch, conn, feedback, ) }