From c5bb680fed914f356c62afbe48256fcb193bfe4d Mon Sep 17 00:00:00 2001 From: decentral1se Date: Wed, 25 Aug 2021 13:30:55 +0200 Subject: [PATCH] refactor: making app version command async --- cli/app/version.go | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/cli/app/version.go b/cli/app/version.go index 6af5b2044..a5f420211 100644 --- a/cli/app/version.go +++ b/cli/app/version.go @@ -14,6 +14,12 @@ import ( "github.com/urfave/cli/v2" ) +// parseVersionLabel parses a $STACK_NAME_$SERVICE_NAME service label +func parseServiceName(label string) string { + idx := strings.LastIndex(label, "_") + return label[idx+1:] +} + // parseVersionLabel parses a $VERSION-$DIGEST service label func parseVersionLabel(label string) (string, string) { // versions may look like v4.2-abcd or v4.2-alpine-abcd @@ -46,15 +52,24 @@ var appVersionCommand = &cli.Command{ logrus.Fatal(err) } + ch := make(chan stack.StackStatus, len(compose.Services)) + for _, service := range compose.Services { + label := fmt.Sprintf("coop-cloud.%s.%s.version", appEnv.StackName(), service.Name) + go func(s string, l string) { + ch <- stack.GetDeployedServicesByLabel(s, l) + }(app.Server, label) + } + tableCol := []string{"Name", "Image", "Version", "Digest"} table := abraFormatter.CreateTable(tableCol) - for _, service := range compose.Services { - label := fmt.Sprintf("coop-cloud.%s.%s.version", appEnv.StackName(), service.Name) - status := stack.GetDeployedServicesByLabel(app.Server, label) - for _, serviceStatus := range status.Services { - version, digest := parseVersionLabel(serviceStatus.Spec.Labels[label]) - img, err := reference.ParseNormalizedNamed(service.Image) + for range compose.Services { + status := <-ch + for _, service := range status.Services { + serviceName := parseServiceName(service.Spec.Name) + label := fmt.Sprintf("coop-cloud.%s.%s.version", appEnv.StackName(), serviceName) + version, digest := parseVersionLabel(service.Spec.Labels[label]) + img, err := reference.ParseNormalizedNamed(service.Spec.Labels["com.docker.stack.image"]) if err != nil { logrus.Fatal(err) } @@ -62,7 +77,6 @@ var appVersionCommand = &cli.Command{ if strings.Contains(image, "library") { image = strings.Split(image, "/")[1] } - serviceName := fmt.Sprintf("%s_%s", appEnv.StackName(), service.Name) table.Append([]string{serviceName, image, version, digest}) } }