Merge pull request #323 from docker/fix-log-lines

Count the lines from the terminal, not from ACI
This commit is contained in:
Guillaume Tardif 2020-07-02 14:00:11 +02:00 committed by GitHub
commit 42b516e738
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 30 additions and 4 deletions

View File

@ -27,6 +27,7 @@ import (
"github.com/Azure/azure-sdk-for-go/services/containerinstance/mgmt/2018-10-01/containerinstance" "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"
"github.com/Azure/go-autorest/autorest/to" "github.com/Azure/go-autorest/autorest/to"
"github.com/buger/goterm"
tm "github.com/buger/goterm" tm "github.com/buger/goterm"
"github.com/gobwas/ws" "github.com/gobwas/ws"
"github.com/gobwas/ws/wsutil" "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 { func streamLogs(ctx context.Context, aciContext store.AciContext, containerGroupName, containerName string, out io.Writer) error {
lastOutput := 0 terminalWidth := goterm.Width()
numLines := 0
for { for {
select { select {
case <-ctx.Done(): case <-ctx.Done():
@ -260,20 +262,32 @@ func streamLogs(ctx context.Context, aciContext store.AciContext, containerGroup
// the kind of logs ACI is giving us. Hopefully Azue will give us // the kind of logs ACI is giving us. Hopefully Azue will give us
// a real logs streaming api soon. // a real logs streaming api soon.
b := aec.EmptyBuilder b := aec.EmptyBuilder
b = b.Up(uint(lastOutput)) b = b.Up(uint(numLines))
fmt.Fprint(out, b.Column(0).ANSI) fmt.Fprint(out, b.Column(0).ANSI)
numLines = getBacktrackLines(logLines, terminalWidth)
for i := 0; i < currentOutput-1; i++ { for i := 0; i < currentOutput-1; i++ {
fmt.Fprintln(out, logLines[i]) fmt.Fprintln(out, logLines[i])
} }
lastOutput = currentOutput - 1
time.Sleep(2 * time.Second) time.Sleep(2 * time.Second)
} }
} }
} }
func getBacktrackLines(lines []string, terminalWidth int) int {
numLines := 0
for i := 0; i < len(lines)-1; i++ {
numLines++
if len(lines[i]) > terminalWidth {
numLines += len(lines[i]) / terminalWidth
}
}
return numLines
}
func getContainerGroupsClient(subscriptionID string) (containerinstance.ContainerGroupsClient, error) { func getContainerGroupsClient(subscriptionID string) (containerinstance.ContainerGroupsClient, error) {
containerGroupsClient := containerinstance.NewContainerGroupsClient(subscriptionID) containerGroupsClient := containerinstance.NewContainerGroupsClient(subscriptionID)
err := setupClient(&containerGroupsClient.Client) err := setupClient(&containerGroupsClient.Client)

12
azure/aci_test.go Normal file
View File

@ -0,0 +1,12 @@
package azure
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestGetLinesWritten(t *testing.T) {
assert.Equal(t, 0, getBacktrackLines([]string{"Hello"}, 10))
assert.Equal(t, 3, getBacktrackLines([]string{"Hello", "world"}, 2))
}