changeset 3504:6e748f31777a

AGM/SR import. Limit logging of warnings to 100.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Tue, 28 May 2019 12:09:11 +0200
parents b6dd09044951
children d136ceed5d41
files pkg/imports/agm.go pkg/imports/sr.go pkg/misc/warn.go
diffstat 3 files changed, 42 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/pkg/imports/agm.go	Tue May 28 11:49:40 2019 +0200
+++ b/pkg/imports/agm.go	Tue May 28 12:09:11 2019 +0200
@@ -303,6 +303,10 @@
 
 	checkedGauges := map[models.Isrs]bool{}
 
+	warnLimiter := misc.WarningLimiter{Log: feedback.Warn, MaxWarnings: 100}
+	warn := warnLimiter.Warn
+	defer warnLimiter.Close()
+
 lines:
 	for line, ignored := 1, 0; ; line++ {
 
@@ -347,7 +351,7 @@
 			}
 			checkedGauges[*gid] = exists
 			if !exists {
-				feedback.Warn("Ignoring data for unknown gauge %s", gid.String())
+				warn("Ignoring data for unknown gauge %s", gid.String())
 				ignored++
 				continue lines
 			}
@@ -441,7 +445,7 @@
 				newDateInfo,
 				newSourceOrganization,
 			).Scan(&newID); err != nil {
-				feedback.Warn(handleError(err).Error())
+				warn(handleError(err).Error())
 				ignored++
 				return errContinue
 			}
--- a/pkg/imports/sr.go	Tue May 28 11:49:40 2019 +0200
+++ b/pkg/imports/sr.go	Tue May 28 12:09:11 2019 +0200
@@ -35,6 +35,7 @@
 	shp "github.com/jonas-p/go-shp"
 
 	"gemma.intevation.de/gemma/pkg/common"
+	"gemma.intevation.de/gemma/pkg/misc"
 	"gemma.intevation.de/gemma/pkg/models"
 	"gemma.intevation.de/gemma/pkg/octree"
 )
@@ -460,19 +461,9 @@
 
 	var hasNegZ bool
 
-	const maxWarnings = 100
-	var warnings int
-
-	warn := func(format string, args ...interface{}) {
-		if warnings++; warnings <= maxWarnings {
-			feedback.Warn(format, args...)
-		}
-	}
-	defer func() {
-		if warnings > maxWarnings {
-			feedback.Warn("Too many warnings. %d ignored.", warnings-maxWarnings)
-		}
-	}()
+	warnLimiter := misc.WarningLimiter{Log: feedback.Warn, MaxWarnings: 100}
+	warn := warnLimiter.Warn
+	defer warnLimiter.Close()
 
 	for line := 1; s.Scan(); line++ {
 		text := s.Text()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pkg/misc/warn.go	Tue May 28 12:09:11 2019 +0200
@@ -0,0 +1,32 @@
+// 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) 2019 by via donau
+//   – Österreichische Wasserstraßen-Gesellschaft mbH
+// Software engineering by Intevation GmbH
+//
+// Author(s):
+//  * Sascha L. Teichmann <sascha.teichmann@intevation.de>
+
+package misc
+
+type WarningLimiter struct {
+	Log         func(format string, args ...interface{})
+	MaxWarnings int
+	Warnings    int
+}
+
+func (w *WarningLimiter) Warn(format string, args ...interface{}) {
+	if w.Warnings++; w.Warnings <= w.MaxWarnings {
+		w.Log(format, args...)
+	}
+}
+
+func (w *WarningLimiter) Close() {
+	if w.Warnings > w.MaxWarnings {
+		w.Log("Too many warnings. %d ignored.", w.Warnings-w.MaxWarnings)
+	}
+}