diff --git a/cli/cmd/common.go b/cli/cmd/common.go index 907663b2c..f6451eb92 100644 --- a/cli/cmd/common.go +++ b/cli/cmd/common.go @@ -3,6 +3,13 @@ package cmd import ( "context" "fmt" + "log" + "os" + "os/exec" + "os/signal" + "runtime" + "syscall" + "github.com/up9inc/mizu/cli/config" "github.com/up9inc/mizu/cli/config/configStructs" "github.com/up9inc/mizu/cli/errormessage" @@ -10,9 +17,6 @@ import ( "github.com/up9inc/mizu/cli/logger" "github.com/up9inc/mizu/cli/mizu" "github.com/up9inc/mizu/cli/uiUtils" - "os" - "os/signal" - "syscall" ) func GetApiServerUrl() string { @@ -43,3 +47,22 @@ func waitForFinish(ctx context.Context, cancel context.CancelFunc) { cancel() } } + +func openBrowser(url string) { + var err error + + switch runtime.GOOS { + case "linux": + err = exec.Command("xdg-open", url).Start() + case "windows": + err = exec.Command("rundll32", "url.dll,FileProtocolHandler", url).Start() + case "darwin": + err = exec.Command("open", url).Start() + default: + err = fmt.Errorf("unsupported platform") + } + if err != nil { + log.Fatal(err) + } + +} diff --git a/cli/cmd/tapRunner.go b/cli/cmd/tapRunner.go index d19888e62..0865aa086 100644 --- a/cli/cmd/tapRunner.go +++ b/cli/cmd/tapRunner.go @@ -3,6 +3,11 @@ package cmd import ( "context" "fmt" + "path" + "regexp" + "strings" + "time" + "github.com/up9inc/mizu/cli/apiserver" "github.com/up9inc/mizu/cli/config" "github.com/up9inc/mizu/cli/config/configStructs" @@ -19,10 +24,6 @@ import ( yaml "gopkg.in/yaml.v3" core "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/util/wait" - "path" - "regexp" - "strings" - "time" ) const ( @@ -497,12 +498,14 @@ func watchApiServerPod(ctx context.Context, kubernetesProvider *kubernetes.Provi isPodReady = true go startProxyReportErrorIfAny(kubernetesProvider, cancel) + url := GetApiServerUrl() if err := apiserver.Provider.InitAndTestConnection(GetApiServerUrl(), 20); err != nil { logger.Log.Errorf(uiUtils.Error, "Couldn't connect to API server, check logs") cancel() break } - logger.Log.Infof("Mizu is available at %s\n", GetApiServerUrl()) + logger.Log.Infof("Mizu is available at %s\n", url) + openBrowser(url) requestForAnalysisIfNeeded() if err := apiserver.Provider.ReportTappedPods(state.currentlyTappedPods); err != nil { logger.Log.Debugf("[Error] failed update tapped pods %v", err) diff --git a/cli/cmd/viewRunner.go b/cli/cmd/viewRunner.go index 4ef1d6dfa..74e4807a1 100644 --- a/cli/cmd/viewRunner.go +++ b/cli/cmd/viewRunner.go @@ -3,6 +3,8 @@ package cmd import ( "context" "fmt" + "net/http" + "github.com/up9inc/mizu/cli/apiserver" "github.com/up9inc/mizu/cli/config" "github.com/up9inc/mizu/cli/kubernetes" @@ -10,7 +12,6 @@ import ( "github.com/up9inc/mizu/cli/mizu" "github.com/up9inc/mizu/cli/mizu/version" "github.com/up9inc/mizu/cli/uiUtils" - "net/http" ) func runMizuView() { @@ -35,7 +36,9 @@ func runMizuView() { return } - response, err := http.Get(fmt.Sprintf("%s/", GetApiServerUrl())) + url := GetApiServerUrl() + + response, err := http.Get(fmt.Sprintf("%s/", url)) if err == nil && response.StatusCode == 200 { logger.Log.Infof("Found a running service %s and open port %d", mizu.ApiServerPodName, config.Config.View.GuiPort) return @@ -43,12 +46,13 @@ func runMizuView() { logger.Log.Infof("Establishing connection to k8s cluster...") go startProxyReportErrorIfAny(kubernetesProvider, cancel) - if err := apiserver.Provider.InitAndTestConnection(GetApiServerUrl(), 10); err != nil { + if err := apiserver.Provider.InitAndTestConnection(url, 10); err != nil { logger.Log.Errorf(uiUtils.Error, "Couldn't connect to API server, check logs") return } - logger.Log.Infof("Mizu is available at %s\n", GetApiServerUrl()) + logger.Log.Infof("Mizu is available at %s\n", url) + openBrowser(url) if isCompatible, err := version.CheckVersionCompatibility(); err != nil { logger.Log.Errorf("Failed to check versions compatibility %v", err) cancel() diff --git a/tap/passive_tapper.go b/tap/passive_tapper.go index 170bc3867..a0360fd62 100644 --- a/tap/passive_tapper.go +++ b/tap/passive_tapper.go @@ -33,7 +33,6 @@ import ( "github.com/up9inc/mizu/tap/api" ) -const AppPortsEnvVar = "APP_PORTS" const cleanPeriod = time.Second * 10 var remoteOnlyOutboundPorts = []int{80, 443}