From e6c115dc17ff997d05bced9c41d55a7bdf30d2e9 Mon Sep 17 00:00:00 2001 From: Djordje Lukic Date: Thu, 9 Jul 2020 10:50:48 +0200 Subject: [PATCH] Get the real width of the terminal github.com/buger/goterm always returns 80 on windows... --- azure/aci.go | 11 +++++------ azure/backend.go | 2 +- cli/cmd/logs.go | 17 ++++++++++++----- cli/cmd/run/run.go | 16 ++++++++++++---- containers/api.go | 1 + 5 files changed, 31 insertions(+), 16 deletions(-) diff --git a/azure/aci.go b/azure/aci.go index 990433e47..04e39e7dd 100644 --- a/azure/aci.go +++ b/azure/aci.go @@ -27,7 +27,6 @@ import ( "github.com/Azure/azure-sdk-for-go/services/containerinstance/mgmt/2018-10-01/containerinstance" "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/to" - "github.com/buger/goterm" tm "github.com/buger/goterm" "github.com/gobwas/ws" "github.com/gobwas/ws/wsutil" @@ -36,6 +35,7 @@ import ( "github.com/docker/api/azure/convert" "github.com/docker/api/azure/login" + "github.com/docker/api/containers" "github.com/docker/api/context/store" "github.com/docker/api/progress" ) @@ -242,8 +242,7 @@ func getACIContainerLogs(ctx context.Context, aciContext store.AciContext, conta return *logs.Content, err } -func streamLogs(ctx context.Context, aciContext store.AciContext, containerGroupName, containerName string, out io.Writer) error { - terminalWidth := goterm.Width() +func streamLogs(ctx context.Context, aciContext store.AciContext, containerGroupName, containerName string, req containers.LogsRequest) error { numLines := 0 for { select { @@ -263,12 +262,12 @@ func streamLogs(ctx context.Context, aciContext store.AciContext, containerGroup // a real logs streaming api soon. b := aec.EmptyBuilder b = b.Up(uint(numLines)) - fmt.Fprint(out, b.Column(0).ANSI) + fmt.Fprint(req.Writer, b.Column(0).ANSI) - numLines = getBacktrackLines(logLines, terminalWidth) + numLines = getBacktrackLines(logLines, req.Width) for i := 0; i < currentOutput-1; i++ { - fmt.Fprintln(out, logLines[i]) + fmt.Fprintln(req.Writer, logLines[i]) } select { diff --git a/azure/backend.go b/azure/backend.go index 372522fc2..675e2a39b 100644 --- a/azure/backend.go +++ b/azure/backend.go @@ -226,7 +226,7 @@ func (cs *aciContainerService) Logs(ctx context.Context, containerName string, r var tail *int32 if req.Follow { - return streamLogs(ctx, cs.ctx, groupName, containerAciName, req.Writer) + return streamLogs(ctx, cs.ctx, groupName, containerAciName, req) } if req.Tail != "all" { diff --git a/cli/cmd/logs.go b/cli/cmd/logs.go index 62e79ddff..18107ff59 100644 --- a/cli/cmd/logs.go +++ b/cli/cmd/logs.go @@ -57,16 +57,23 @@ func runLogs(ctx context.Context, containerName string, opts logsOpts) error { if err != nil { return errors.Wrap(err, "cannot connect to backend") } - var con io.Writer = os.Stdout - if c, err := console.ConsoleFromFile(os.Stdout); err == nil { - con = c - } req := containers.LogsRequest{ Follow: opts.Follow, Tail: opts.Tail, - Writer: con, } + var con io.Writer = os.Stdout + if c, err := console.ConsoleFromFile(os.Stdout); err == nil { + size, err := c.Size() + if err != nil { + return err + } + req.Width = int(size.Width) + con = c + } + + req.Writer = con + return c.ContainerService().Logs(ctx, containerName, req) } diff --git a/cli/cmd/run/run.go b/cli/cmd/run/run.go index 0991dbd8c..faca28a5f 100644 --- a/cli/cmd/run/run.go +++ b/cli/cmd/run/run.go @@ -73,19 +73,27 @@ func runRun(ctx context.Context, image string, opts run.Opts) error { if err != nil { return err } + if !opts.Detach { var con io.Writer = os.Stdout + req := containers.LogsRequest{ + Follow: true, + } if c, err := console.ConsoleFromFile(os.Stdout); err == nil { + size, err := c.Size() + if err != nil { + return err + } + req.Width = int(size.Width) con = c } - req := containers.LogsRequest{ - Follow: true, - Writer: con, - } + req.Writer = con return c.ContainerService().Logs(ctx, opts.Name, req) } + fmt.Println(opts.Name) + return nil } diff --git a/containers/api.go b/containers/api.go index bacfc8367..9c2bd88aa 100644 --- a/containers/api.go +++ b/containers/api.go @@ -76,6 +76,7 @@ type ContainerConfig struct { type LogsRequest struct { Follow bool Tail string + Width int Writer io.Writer }