Mercurial > gemma
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 { |