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
 }