Mercurial > gemma
changeset 1837:00d63eb9306a
Waterway gauges import: Finalized with re-inserting the reference water levels.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Wed, 16 Jan 2019 23:54:26 +0100 |
parents | 4dcdd8891770 |
children | 491f5b68da9e d2c4fb74f6e5 |
files | pkg/imports/wg.go |
diffstat | 1 files changed, 53 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/pkg/imports/wg.go Wed Jan 16 22:39:24 2019 +0100 +++ b/pkg/imports/wg.go Wed Jan 16 23:54:26 2019 +0100 @@ -121,6 +121,17 @@ date_info = $14, source_organization = $15 ` + insertReferenceWaterLevelsSQL = ` +INSERT INTO waterway.gauges_reference_water_levels ( + gauge_id, + reference_water_level, + value +) VALUES ( + ($1::char(2), $2::char(3), $3::char(5), $4::char(5), $5::int), + $6, + $7 +) +` ) func (wg *WaterwayGauge) Do( @@ -130,6 +141,8 @@ feedback Feedback, ) (interface{}, error) { + start := time.Now() + tx, err := conn.BeginTx(ctx, nil) if err != nil { return nil, err @@ -274,6 +287,13 @@ } defer insertStmt.Close() + insertWaterLevelStmt, err := tx.PrepareContext( + ctx, insertReferenceWaterLevelsSQL) + if err != nil { + return nil, err + } + defer insertWaterLevelStmt.Close() + // insert/update the gauges for i := range news { ic := &news[i] @@ -374,9 +394,39 @@ return nil, err } - // TODO: Reference water levels. + for _, wl := range []struct { + level **erdms.RisreflevelcodeType + value **erdms.RisreflevelvalueType + }{ + {&dr.Reflevel1code, &dr.Reflevel1value}, + {&dr.Reflevel2code, &dr.Reflevel2value}, + {&dr.Reflevel3code, &dr.Reflevel3value}, + } { + if *wl.level == nil || *wl.value == nil { + continue + } + if _, err := insertWaterLevelStmt.ExecContext( + ctx, + ic.code.CountryCode, + ic.code.LoCode, + ic.code.FairwaySection, + ic.code.Orc, + ic.code.Hectometre, + string(**wl.level), + int64(**wl.value), + ); err != nil { + return nil, err + } + } } - // TODO: Implement me! - return nil, errors.New("Not implemented, yet!") + if err = tx.Commit(); err == nil { + feedback.Info("Refreshing gauges successfully took %s.", + time.Since(start)) + } else { + feedback.Error("Refreshing gauges failed after %s.", + time.Since(start)) + } + + return nil, err }