瀏覽代碼

Count the lines from the terminal, not from ACI

Count the number of lines output on the terminal wrt the terminal width
so that we can go up the right amount.
Djordje Lukic 5 年之前
父節點
當前提交
e852e8f96a
共有 1 個文件被更改,包括 11 次插入3 次删除
  1. 11 3
      azure/aci.go

+ 11 - 3
azure/aci.go

@@ -27,6 +27,7 @@ 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"
@@ -242,7 +243,8 @@ func getACIContainerLogs(ctx context.Context, aciContext store.AciContext, conta
 }
 
 func streamLogs(ctx context.Context, aciContext store.AciContext, containerGroupName, containerName string, out io.Writer) error {
-	lastOutput := 0
+	terminalWidth := goterm.Width()
+	numLines := 0
 	for {
 		select {
 		case <-ctx.Done():
@@ -260,14 +262,20 @@ func streamLogs(ctx context.Context, aciContext store.AciContext, containerGroup
 			// the kind of logs ACI is giving us. Hopefully Azue will give us
 			// a real logs streaming api soon.
 			b := aec.EmptyBuilder
-			b = b.Up(uint(lastOutput))
+			b = b.Up(uint(numLines))
 			fmt.Fprint(out, b.Column(0).ANSI)
 
 			for i := 0; i < currentOutput-1; i++ {
 				fmt.Fprintln(out, logLines[i])
 			}
 
-			lastOutput = currentOutput - 1
+			numLines = 0
+			for i := 0; i < currentOutput-1; i++ {
+				numLines++
+				if len(logLines[i]) > terminalWidth {
+					numLines += len(logLines[i]) / terminalWidth
+				}
+			}
 
 			time.Sleep(2 * time.Second)
 		}