changeset 5530:3ccbb6162112 aggregate-gm-import-logging

WIP: More on GM import aggregation.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Sun, 24 Oct 2021 23:06:24 +0200
parents f95f268a83bd
children 84f0c53e6ffe
files pkg/imports/gm.go
diffstat 1 files changed, 71 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/pkg/imports/gm.go	Sun Oct 24 20:16:41 2021 +0200
+++ b/pkg/imports/gm.go	Sun Oct 24 23:06:24 2021 +0200
@@ -329,7 +329,7 @@
 	rescaleErrors       []string
 	assumedCM           int
 	missingValues       []time.Time
-	badValue            int
+	badValues           int
 	newM                int
 	newP                int
 }
@@ -366,13 +366,79 @@
 	gls.logUnknown(feedback)
 	gls.logAssumedZPG(feedback)
 	gls.logAssumedCM(feedback)
-	// TODO: bad values
-	// TODO: missing values
-	// TODO: rescale errors
+	gls.logBadValues(feedback)
+	gls.logMissingValues(feedback)
+	gls.logRescaleErrors(feedback)
+	// TODO: log ignoredMeasureCodes
 	// TODO: new predictions
 	// TODO: new measurements
 }
 
+func (gls gmLogs) logRescaleErrors(feedback Feedback) {
+	var sb strings.Builder
+	for _, gl := range gls {
+		if len(gl.rescaleErrors) > 0 {
+			if sb.Len() == 0 {
+				sb.WriteString("Cannot convert units: ")
+			} else {
+				sb.WriteString("; ")
+			}
+			fmt.Fprintf(&sb, "%s (", gl.gid)
+			for i, e := range gl.rescaleErrors {
+				if i > 0 {
+					sb.WriteString(", ")
+				}
+				sb.WriteString(e)
+			}
+			sb.WriteByte(')')
+		}
+	}
+	if sb.Len() > 0 {
+		feedback.Error(sb.String())
+	}
+}
+
+func (gls gmLogs) logMissingValues(feedback Feedback) {
+	var sb strings.Builder
+	for _, gl := range gls {
+		if len(gl.missingValues) > 0 {
+			if sb.Len() == 0 {
+				sb.WriteString("Missing mandatory values: ")
+			} else {
+				sb.WriteString("; ")
+			}
+			fmt.Fprintf(&sb, "%s (", gl.gid)
+			for i, m := range gl.missingValues {
+				if i > 0 {
+					sb.WriteString(", ")
+				}
+				sb.WriteString(m.Format(time.RFC3339))
+			}
+			sb.WriteByte(')')
+		}
+	}
+	if sb.Len() > 0 {
+		feedback.Warn(sb.String())
+	}
+}
+
+func (gls gmLogs) logBadValues(feedback Feedback) {
+	var sb strings.Builder
+	for _, gl := range gls {
+		if gl.badValues > 0 {
+			if sb.Len() == 0 {
+				sb.WriteString("Ignored measurements with value -99999: ")
+			} else {
+				sb.WriteString(", ")
+			}
+			fmt.Fprintf(&sb, "%s (%d)", gl.gid, gl.badValues)
+		}
+	}
+	if sb.Len() > 0 {
+		feedback.Warn(sb.String())
+	}
+}
+
 func (gls gmLogs) logAssumedCM(feedback Feedback) {
 	var sb strings.Builder
 	for _, gl := range gls {
@@ -547,7 +613,7 @@
 
 				// -99999 is used by some gauges to signal an error
 				if *measure.Value == -99999 {
-					log.badValue++
+					log.badValues++
 					continue
 				}