comparison pkg/imports/gm.go @ 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
comparison
equal deleted inserted replaced
5529:f95f268a83bd 5530:3ccbb6162112
327 assumedZPG bool 327 assumedZPG bool
328 ignoredMeasureCodes []string 328 ignoredMeasureCodes []string
329 rescaleErrors []string 329 rescaleErrors []string
330 assumedCM int 330 assumedCM int
331 missingValues []time.Time 331 missingValues []time.Time
332 badValue int 332 badValues int
333 newM int 333 newM int
334 newP int 334 newP int
335 } 335 }
336 336
337 type gmLogs []*gmLog 337 type gmLogs []*gmLog
364 364
365 func (gls gmLogs) logging(feedback Feedback) { 365 func (gls gmLogs) logging(feedback Feedback) {
366 gls.logUnknown(feedback) 366 gls.logUnknown(feedback)
367 gls.logAssumedZPG(feedback) 367 gls.logAssumedZPG(feedback)
368 gls.logAssumedCM(feedback) 368 gls.logAssumedCM(feedback)
369 // TODO: bad values 369 gls.logBadValues(feedback)
370 // TODO: missing values 370 gls.logMissingValues(feedback)
371 // TODO: rescale errors 371 gls.logRescaleErrors(feedback)
372 // TODO: log ignoredMeasureCodes
372 // TODO: new predictions 373 // TODO: new predictions
373 // TODO: new measurements 374 // TODO: new measurements
375 }
376
377 func (gls gmLogs) logRescaleErrors(feedback Feedback) {
378 var sb strings.Builder
379 for _, gl := range gls {
380 if len(gl.rescaleErrors) > 0 {
381 if sb.Len() == 0 {
382 sb.WriteString("Cannot convert units: ")
383 } else {
384 sb.WriteString("; ")
385 }
386 fmt.Fprintf(&sb, "%s (", gl.gid)
387 for i, e := range gl.rescaleErrors {
388 if i > 0 {
389 sb.WriteString(", ")
390 }
391 sb.WriteString(e)
392 }
393 sb.WriteByte(')')
394 }
395 }
396 if sb.Len() > 0 {
397 feedback.Error(sb.String())
398 }
399 }
400
401 func (gls gmLogs) logMissingValues(feedback Feedback) {
402 var sb strings.Builder
403 for _, gl := range gls {
404 if len(gl.missingValues) > 0 {
405 if sb.Len() == 0 {
406 sb.WriteString("Missing mandatory values: ")
407 } else {
408 sb.WriteString("; ")
409 }
410 fmt.Fprintf(&sb, "%s (", gl.gid)
411 for i, m := range gl.missingValues {
412 if i > 0 {
413 sb.WriteString(", ")
414 }
415 sb.WriteString(m.Format(time.RFC3339))
416 }
417 sb.WriteByte(')')
418 }
419 }
420 if sb.Len() > 0 {
421 feedback.Warn(sb.String())
422 }
423 }
424
425 func (gls gmLogs) logBadValues(feedback Feedback) {
426 var sb strings.Builder
427 for _, gl := range gls {
428 if gl.badValues > 0 {
429 if sb.Len() == 0 {
430 sb.WriteString("Ignored measurements with value -99999: ")
431 } else {
432 sb.WriteString(", ")
433 }
434 fmt.Fprintf(&sb, "%s (%d)", gl.gid, gl.badValues)
435 }
436 }
437 if sb.Len() > 0 {
438 feedback.Warn(sb.String())
439 }
374 } 440 }
375 441
376 func (gls gmLogs) logAssumedCM(feedback Feedback) { 442 func (gls gmLogs) logAssumedCM(feedback Feedback) {
377 var sb strings.Builder 443 var sb strings.Builder
378 for _, gl := range gls { 444 for _, gl := range gls {
545 convert(measure.Value_min) 611 convert(measure.Value_min)
546 convert(measure.Value_max) 612 convert(measure.Value_max)
547 613
548 // -99999 is used by some gauges to signal an error 614 // -99999 is used by some gauges to signal an error
549 if *measure.Value == -99999 { 615 if *measure.Value == -99999 {
550 log.badValue++ 616 log.badValues++
551 continue 617 continue
552 } 618 }
553 619
554 var dummy int 620 var dummy int
555 if measure.Predicted { 621 if measure.Predicted {