changeset 5545:a4fa1bf9b208 aggregate-gm-import-logging

Aggregate to 'bla: 1 (baz); 2 (foo, bar)' instead of 'bla: foo (2), baz (1), bar (2)'.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Fri, 29 Oct 2021 00:07:50 +0200
parents 3f744907df49
children 05f689dfe041
files pkg/imports/gm.go
diffstat 1 files changed, 30 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/pkg/imports/gm.go	Thu Oct 28 23:57:53 2021 +0200
+++ b/pkg/imports/gm.go	Fri Oct 29 00:07:50 2021 +0200
@@ -20,6 +20,7 @@
 	"database/sql"
 	"fmt"
 	"sort"
+	"strconv"
 	"strings"
 	"time"
 
@@ -452,20 +453,42 @@
 	header string,
 	log func(string, ...interface{}),
 ) {
+	gs := make(gmLogs, 0, len(gls))
+	for _, g := range gls {
+		if access(g) > 0 {
+			gs = append(gs, g)
+		}
+	}
+
+	if len(gs) == 0 {
+		return
+	}
+
+	sort.SliceStable(gs, func(i, j int) bool {
+		return access(gs[i]) < access(gs[j])
+	})
+
 	var sb strings.Builder
-	for _, gl := range gls {
-		if v := access(gl); v > 0 {
+	var last int
+
+	for _, g := range gs {
+		if c := access(g); c != last {
 			if sb.Len() == 0 {
 				sb.WriteString(header)
 			} else {
-				sb.WriteString(", ")
+				sb.WriteString("); ")
 			}
-			fmt.Fprintf(&sb, "%s (%d)", gl.gid, v)
+			sb.WriteString(strconv.Itoa(c))
+			sb.WriteString(" (")
+			last = c
+		} else {
+			sb.WriteString(", ")
 		}
+		sb.WriteString(g.gid)
 	}
-	if sb.Len() > 0 {
-		log(sb.String())
-	}
+
+	sb.WriteRune(')')
+	log(sb.String())
 }
 
 func (gls gmLogs) logString(