Mercurial > gemma
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) + } +}