Mercurial > gemma
changeset 3311:0f6b156cff55
Mark gauges as erased if they are missing in ERDMS response
author | Tom Gottfried <tom@intevation.de> |
---|---|
date | Fri, 17 May 2019 13:23:22 +0200 |
parents | e0dabe7b2fcf |
children | 00548f0e81c3 |
files | pkg/imports/wg.go |
diffstat | 1 files changed, 28 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/pkg/imports/wg.go Fri May 17 12:49:28 2019 +0200 +++ b/pkg/imports/wg.go Fri May 17 13:23:22 2019 +0200 @@ -65,6 +65,12 @@ func (*WaterwayGauge) CleanUp() error { return nil } const ( + eraseObsoleteGaugesSQL = ` +UPDATE waterway.gauges SET erased = true +WHERE NOT erased AND isrs_astext(location) <> ALL($1) +RETURNING isrs_astext(location) +` + eraseGaugeSQL = ` UPDATE waterway.gauges SET erased = true, @@ -449,16 +455,35 @@ } } - feedback.Info("Importing gauges took %s", - time.Since(start)) - if len(gauges) == 0 { return nil, UnchangedError("No gauges returned from ERDMS") } + var pgGauges pgtype.VarcharArray + pgGauges.Set(gauges) + obsGauges, err := conn.QueryContext(ctx, eraseObsoleteGaugesSQL, &pgGauges) + if err != nil { + return nil, err + } + defer obsGauges.Close() + for obsGauges.Next() { + var isrs string + if err := obsGauges.Scan(&isrs); err != nil { + return nil, err + } + feedback.Info("Erased %s", isrs) + unchanged-- + } + if err := obsGauges.Err(); err != nil { + return nil, err + } + if unchanged == len(gauges) { return nil, UnchangedError("All gauges unchanged") } + feedback.Info("Importing gauges took %s", + time.Since(start)) + return nil, err }