From 94679f817af202e339246f5a9afd3ccb7c084039 Mon Sep 17 00:00:00 2001 From: Toma Puljak Date: Mon, 9 Sep 2024 10:22:53 +0000 Subject: [PATCH] fix: droplet initialization message Signed-off-by: Toma Puljak --- internal/log/log_writer.go | 22 ++++++++++++++++++++++ pkg/provider/create.go | 20 +++----------------- 2 files changed, 25 insertions(+), 17 deletions(-) diff --git a/internal/log/log_writer.go b/internal/log/log_writer.go index 7513466..f076219 100644 --- a/internal/log/log_writer.go +++ b/internal/log/log_writer.go @@ -1,6 +1,10 @@ package log import ( + "fmt" + "io" + "time" + log "github.com/sirupsen/logrus" ) @@ -17,3 +21,21 @@ func (w *InfoLogWriter) Write(p []byte) (n int, err error) { log.Info(string(p)) return len(p), nil } + +func ShowSpinner(logWriter io.Writer, startStatement, endStatement string) chan struct{} { + stopSpinnerChan := make(chan struct{}) + go func() { + spinner := []string{"⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"} + for i := 0; ; i++ { + select { + case <-stopSpinnerChan: + logWriter.Write([]byte("\r\033[K")) + logWriter.Write([]byte(endStatement + "\n")) + return + case <-time.After(200 * time.Millisecond): + logWriter.Write([]byte(fmt.Sprintf("%s %s\r", spinner[i%len(spinner)], startStatement))) + } + } + }() + return stopSpinnerChan +} diff --git a/pkg/provider/create.go b/pkg/provider/create.go index c0e8574..8003083 100644 --- a/pkg/provider/create.go +++ b/pkg/provider/create.go @@ -49,25 +49,11 @@ func (p *DigitalOceanProvider) CreateWorkspace(workspaceReq *provider.WorkspaceR } logWriter.Write([]byte("Droplet created.\n")) - stopSpinnerChan := make(chan bool) - - go func() { - spinner := []string{"⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"} - for i := 0; ; i++ { - select { - case <-stopSpinnerChan: - return - case <-time.After(200 * time.Millisecond): - if i > 0 { - logWriter.Write([]byte("\033[1F")) - } - logWriter.Write([]byte(fmt.Sprintf("%s Waiting for the agent to start...\n", spinner[i%len(spinner)]))) - } - } - }() + + initializingDropletSpinner := log_writers.ShowSpinner(logWriter, "Initializing droplet", "Droplet initialized") err = p.waitForDial(workspaceReq.Workspace.Id, 10*time.Minute) - stopSpinnerChan <- true + close(initializingDropletSpinner) if err != nil { logWriter.Write([]byte("Failed to dial: " + err.Error() + "\n"))