Mercurial > gemma
comparison pkg/imports/gm.go @ 5532:7e21a9e6353d aggregate-gm-import-logging
Cleaned up and simplified code.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Mon, 25 Oct 2021 00:37:39 +0200 |
parents | 84f0c53e6ffe |
children | 0a2326eda3a5 |
comparison
equal
deleted
inserted
replaced
5531:84f0c53e6ffe | 5532:7e21a9e6353d |
---|---|
361 } | 361 } |
362 return nil | 362 return nil |
363 } | 363 } |
364 | 364 |
365 func (gls gmLogs) logging(feedback Feedback) { | 365 func (gls gmLogs) logging(feedback Feedback) { |
366 gls.logUnknown(feedback) | 366 gls.logBool( |
367 gls.logAssumedZPG(feedback) | 367 (*gmLog).getUnkown, |
368 gls.logAssumedCM(feedback) | 368 "Cannot find following gauges: ", |
369 gls.logBadValues(feedback) | 369 feedback.Warn) |
370 gls.logMissingValues(feedback) | 370 |
371 gls.logRescaleErrors(feedback) | 371 gls.logBool( |
372 gls.logIgnoredMeasureCodes(feedback) | 372 (*gmLog).getAssumedZPG, |
373 gls.logPredictions(feedback) | 373 "Reference_code' not specified. Assuming 'ZPG': ", |
374 gls.logMeasurements(feedback) | 374 feedback.Warn) |
375 } | 375 |
376 | 376 gls.logInt( |
377 func (gls gmLogs) logMeasurements(feedback Feedback) { | 377 (*gmLog).getAssumedCM, |
378 "'Unit' not specified. Assuming 'cm': ", | |
379 feedback.Warn) | |
380 | |
381 gls.logInt( | |
382 (*gmLog).getBadValues, | |
383 "Ignored measurements with value -99999: ", | |
384 feedback.Warn) | |
385 | |
386 gls.logString( | |
387 (*gmLog).getMissingValues, | |
388 "Missing mandatory values: ", | |
389 feedback.Warn) | |
390 | |
391 gls.logString( | |
392 (*gmLog).getRescaleErrors, | |
393 "Cannot convert units: ", | |
394 feedback.Error) | |
395 | |
396 gls.logString( | |
397 (*gmLog).getRescaleErrors, | |
398 "Ignored measure codes: ", | |
399 feedback.Warn) | |
400 | |
401 gls.logInt( | |
402 (*gmLog).getPredictions, | |
403 "New predictions: ", | |
404 feedback.Info) | |
405 | |
406 gls.logInt( | |
407 (*gmLog).getMeasurements, | |
408 "New measurements: ", | |
409 feedback.Info) | |
410 } | |
411 | |
412 func (gl *gmLog) getAssumedZPG() bool { return gl.assumedZPG } | |
413 func (gl *gmLog) getUnkown() bool { return gl.unknown } | |
414 func (gl *gmLog) getIgnoredMeasureCodes() []string { return gl.ignoredMeasureCodes } | |
415 func (gl *gmLog) getRescaleErrors() []string { return gl.rescaleErrors } | |
416 func (gl *gmLog) getMissingValues() []string { return gl.missingValues } | |
417 func (gl *gmLog) getAssumedCM() int { return gl.assumedCM } | |
418 func (gl *gmLog) getBadValues() int { return gl.badValues } | |
419 func (gl *gmLog) getPredictions() int { return gl.predictions } | |
420 func (gl *gmLog) getMeasurements() int { return gl.measurements } | |
421 | |
422 func (gls gmLogs) logBool( | |
423 access func(*gmLog) bool, | |
424 header string, | |
425 log func(string, ...interface{}), | |
426 ) { | |
378 var sb strings.Builder | 427 var sb strings.Builder |
379 for _, gl := range gls { | 428 for _, gl := range gls { |
380 if gl.measurements > 0 { | 429 if access(gl) { |
381 if sb.Len() == 0 { | 430 if sb.Len() == 0 { |
382 sb.WriteString("New measurements: ") | 431 sb.WriteString(header) |
383 } else { | 432 } else { |
384 sb.WriteString("; ") | 433 sb.WriteString("; ") |
385 } | 434 } |
386 fmt.Fprintf(&sb, "%s (%d)", gl.gid, gl.measurements) | 435 sb.WriteString(gl.gid) |
387 } | 436 } |
388 } | 437 } |
389 if sb.Len() > 0 { | 438 if sb.Len() > 0 { |
390 feedback.Info(sb.String()) | 439 log(sb.String()) |
391 } | 440 } |
392 } | 441 } |
393 | 442 |
394 func (gls gmLogs) logPredictions(feedback Feedback) { | 443 func (gls gmLogs) logInt( |
444 access func(*gmLog) int, | |
445 header string, | |
446 log func(string, ...interface{}), | |
447 ) { | |
395 var sb strings.Builder | 448 var sb strings.Builder |
396 for _, gl := range gls { | 449 for _, gl := range gls { |
397 if gl.predictions > 0 { | 450 if v := access(gl); v > 0 { |
398 if sb.Len() == 0 { | 451 if sb.Len() == 0 { |
399 sb.WriteString("New predictions: ") | 452 sb.WriteString(header) |
400 } else { | 453 } else { |
401 sb.WriteString("; ") | 454 sb.WriteString("; ") |
402 } | 455 } |
403 fmt.Fprintf(&sb, "%s (%d)", gl.gid, gl.predictions) | 456 fmt.Fprintf(&sb, "%s (%d)", gl.gid, v) |
404 } | 457 } |
405 } | 458 } |
406 if sb.Len() > 0 { | 459 if sb.Len() > 0 { |
407 feedback.Info(sb.String()) | 460 log(sb.String()) |
408 } | 461 } |
409 } | 462 } |
410 | 463 |
411 func (gls gmLogs) logIgnoredMeasureCodes(feedback Feedback) { | 464 func (gls gmLogs) logString( |
465 access func(*gmLog) []string, | |
466 header string, | |
467 log func(string, ...interface{}), | |
468 ) { | |
412 var sb strings.Builder | 469 var sb strings.Builder |
413 for _, gl := range gls { | 470 for _, gl := range gls { |
414 if len(gl.ignoredMeasureCodes) > 0 { | 471 if s := access(gl); len(s) > 0 { |
415 if sb.Len() == 0 { | 472 if sb.Len() == 0 { |
416 sb.WriteString("Ignored measure codes: ") | 473 sb.WriteString(header) |
417 } else { | 474 } else { |
418 sb.WriteString("; ") | 475 sb.WriteString("; ") |
419 } | 476 } |
420 fmt.Fprintf(&sb, "%s (", gl.gid) | 477 fmt.Fprintf(&sb, "%s (", gl.gid) |
421 for i, mc := range gl.ignoredMeasureCodes { | 478 for i, v := range s { |
422 if i > 0 { | 479 if i > 0 { |
423 sb.WriteString(", ") | 480 sb.WriteString(", ") |
424 } | 481 } |
425 sb.WriteString(mc) | 482 sb.WriteString(v) |
426 } | 483 } |
427 sb.WriteByte(')') | 484 sb.WriteByte(')') |
428 } | 485 } |
429 } | 486 } |
430 if sb.Len() > 0 { | 487 if sb.Len() > 0 { |
431 feedback.Warn(sb.String()) | 488 log(sb.String()) |
432 } | |
433 } | |
434 | |
435 func (gls gmLogs) logRescaleErrors(feedback Feedback) { | |
436 var sb strings.Builder | |
437 for _, gl := range gls { | |
438 if len(gl.rescaleErrors) > 0 { | |
439 if sb.Len() == 0 { | |
440 sb.WriteString("Cannot convert units: ") | |
441 } else { | |
442 sb.WriteString("; ") | |
443 } | |
444 fmt.Fprintf(&sb, "%s (", gl.gid) | |
445 for i, e := range gl.rescaleErrors { | |
446 if i > 0 { | |
447 sb.WriteString(", ") | |
448 } | |
449 sb.WriteString(e) | |
450 } | |
451 sb.WriteByte(')') | |
452 } | |
453 } | |
454 if sb.Len() > 0 { | |
455 feedback.Error(sb.String()) | |
456 } | |
457 } | |
458 | |
459 func (gls gmLogs) logMissingValues(feedback Feedback) { | |
460 var sb strings.Builder | |
461 for _, gl := range gls { | |
462 if len(gl.missingValues) > 0 { | |
463 if sb.Len() == 0 { | |
464 sb.WriteString("Missing mandatory values: ") | |
465 } else { | |
466 sb.WriteString("; ") | |
467 } | |
468 fmt.Fprintf(&sb, "%s (", gl.gid) | |
469 for i, m := range gl.missingValues { | |
470 if i > 0 { | |
471 sb.WriteString(", ") | |
472 } | |
473 sb.WriteString(m) | |
474 } | |
475 sb.WriteByte(')') | |
476 } | |
477 } | |
478 if sb.Len() > 0 { | |
479 feedback.Warn(sb.String()) | |
480 } | |
481 } | |
482 | |
483 func (gls gmLogs) logBadValues(feedback Feedback) { | |
484 var sb strings.Builder | |
485 for _, gl := range gls { | |
486 if gl.badValues > 0 { | |
487 if sb.Len() == 0 { | |
488 sb.WriteString("Ignored measurements with value -99999: ") | |
489 } else { | |
490 sb.WriteString("; ") | |
491 } | |
492 fmt.Fprintf(&sb, "%s (%d)", gl.gid, gl.badValues) | |
493 } | |
494 } | |
495 if sb.Len() > 0 { | |
496 feedback.Warn(sb.String()) | |
497 } | |
498 } | |
499 | |
500 func (gls gmLogs) logAssumedCM(feedback Feedback) { | |
501 var sb strings.Builder | |
502 for _, gl := range gls { | |
503 if gl.assumedCM > 0 { | |
504 if sb.Len() == 0 { | |
505 sb.WriteString("'Unit' not specified. Assuming 'cm': ") | |
506 } else { | |
507 sb.WriteString("; ") | |
508 } | |
509 fmt.Fprintf(&sb, "%s (%d)", gl.gid, gl.assumedCM) | |
510 } | |
511 } | |
512 if sb.Len() > 0 { | |
513 feedback.Warn(sb.String()) | |
514 } | |
515 } | |
516 | |
517 func (gls gmLogs) logUnknown(feedback Feedback) { | |
518 var sb strings.Builder | |
519 for _, gl := range gls { | |
520 if gl.assumedZPG { | |
521 if sb.Len() == 0 { | |
522 sb.WriteString("Cannot find following gauges: ") | |
523 } else { | |
524 sb.WriteString("; ") | |
525 } | |
526 sb.WriteString(gl.gid) | |
527 } | |
528 } | |
529 if sb.Len() > 0 { | |
530 feedback.Warn(sb.String()) | |
531 } | |
532 } | |
533 | |
534 func (gls gmLogs) logAssumedZPG(feedback Feedback) { | |
535 var sb strings.Builder | |
536 for _, gl := range gls { | |
537 if gl.assumedZPG { | |
538 if sb.Len() == 0 { | |
539 sb.WriteString("'Reference_code' not specified. Assuming 'ZPG': ") | |
540 } else { | |
541 sb.WriteString("; ") | |
542 } | |
543 sb.WriteString(gl.gid) | |
544 } | |
545 } | |
546 if sb.Len() > 0 { | |
547 feedback.Info(sb.String()) | |
548 } | 489 } |
549 } | 490 } |
550 | 491 |
551 // logFinder is a helper to search recently used logs | 492 // logFinder is a helper to search recently used logs |
552 // or create a new one if no log for a given gauge | 493 // or create a new one if no log for a given gauge |
617 continue | 558 continue |
618 } | 559 } |
619 log := findLog(curr) | 560 log := findLog(curr) |
620 gids = append(gids, curr) | 561 gids = append(gids, curr) |
621 | 562 |
622 //feedback.Info("Found measurements/predictions for %s", curr) | |
623 if !isKnown(curr) { | 563 if !isKnown(curr) { |
624 log.unknown = true | 564 log.unknown = true |
625 // feedback.Warn("Cannot find gauge %q for import", curr) | |
626 continue | 565 continue |
627 } | 566 } |
628 | 567 |
629 var referenceCode string | 568 var referenceCode string |
630 if wrm.Reference_code == nil { | 569 if wrm.Reference_code == nil { |
631 //feedback.Info("'Reference_code' not specified. Assuming 'ZPG'") | |
632 log.assumedZPG = true | 570 log.assumedZPG = true |
633 referenceCode = "ZPG" | 571 referenceCode = "ZPG" |
634 } else { | 572 } else { |
635 referenceCode = string(*wrm.Reference_code) | 573 referenceCode = string(*wrm.Reference_code) |
636 } | 574 } |
637 | 575 |
638 //badValue := 0 | |
639 //newM, newP := 0, 0 | |
640 for _, measure := range wrm.Measure { | 576 for _, measure := range wrm.Measure { |
641 var unit string | 577 var unit string |
642 if *measure.Measure_code != nts.Measure_code_enumWAL { | 578 if *measure.Measure_code != nts.Measure_code_enumWAL { |
643 log.ignoreMeasureCode(*measure.Measure_code) | 579 log.ignoreMeasureCode(*measure.Measure_code) |
644 //feedback.Warn("Ignored message with measure_code %s", | |
645 // *measure.Measure_code) | |
646 continue | 580 continue |
647 } | 581 } |
648 if measure.Unit == nil { | 582 if measure.Unit == nil { |
649 //feedback.Info("'Unit' not specified. Assuming 'cm'") | |
650 log.assumedCM++ | 583 log.assumedCM++ |
651 unit = "cm" | 584 unit = "cm" |
652 } else { | 585 } else { |
653 unit = string(*measure.Unit) | 586 unit = string(*measure.Unit) |
654 } | 587 } |
749 default: | 682 default: |
750 log.measurements++ | 683 log.measurements++ |
751 } | 684 } |
752 } | 685 } |
753 } | 686 } |
754 //if badValue > 0 { | |
755 // feedback.Warn("Ignored %d measurements with value -99999", | |
756 // badValue) | |
757 //} | |
758 //feedback.Info("Inserted %d measurements for %s", | |
759 // newM, curr) | |
760 //feedback.Info("Inserted %d predictions for %s", | |
761 // newP, curr) | |
762 } | 687 } |
763 } | 688 } |
764 return gids, nil | 689 return gids, nil |
765 } | 690 } |