Open the API server URL in the web browser as soon as Mizu is ready

This commit is contained in:
M. Mert Yildiran 2021-08-25 00:25:03 +03:00
parent 4709bae0ee
commit 942e7ff19a
No known key found for this signature in database
GPG Key ID: D42ADB236521BF7A
4 changed files with 42 additions and 13 deletions

View File

@ -3,6 +3,13 @@ package cmd
import ( import (
"context" "context"
"fmt" "fmt"
"log"
"os"
"os/exec"
"os/signal"
"runtime"
"syscall"
"github.com/up9inc/mizu/cli/config" "github.com/up9inc/mizu/cli/config"
"github.com/up9inc/mizu/cli/config/configStructs" "github.com/up9inc/mizu/cli/config/configStructs"
"github.com/up9inc/mizu/cli/errormessage" "github.com/up9inc/mizu/cli/errormessage"
@ -10,9 +17,6 @@ import (
"github.com/up9inc/mizu/cli/logger" "github.com/up9inc/mizu/cli/logger"
"github.com/up9inc/mizu/cli/mizu" "github.com/up9inc/mizu/cli/mizu"
"github.com/up9inc/mizu/cli/uiUtils" "github.com/up9inc/mizu/cli/uiUtils"
"os"
"os/signal"
"syscall"
) )
func GetApiServerUrl() string { func GetApiServerUrl() string {
@ -43,3 +47,22 @@ func waitForFinish(ctx context.Context, cancel context.CancelFunc) {
cancel() 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)
}
}

View File

@ -3,6 +3,11 @@ package cmd
import ( import (
"context" "context"
"fmt" "fmt"
"path"
"regexp"
"strings"
"time"
"github.com/up9inc/mizu/cli/apiserver" "github.com/up9inc/mizu/cli/apiserver"
"github.com/up9inc/mizu/cli/config" "github.com/up9inc/mizu/cli/config"
"github.com/up9inc/mizu/cli/config/configStructs" "github.com/up9inc/mizu/cli/config/configStructs"
@ -19,10 +24,6 @@ import (
yaml "gopkg.in/yaml.v3" yaml "gopkg.in/yaml.v3"
core "k8s.io/api/core/v1" core "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/util/wait"
"path"
"regexp"
"strings"
"time"
) )
const ( const (
@ -497,12 +498,14 @@ func watchApiServerPod(ctx context.Context, kubernetesProvider *kubernetes.Provi
isPodReady = true isPodReady = true
go startProxyReportErrorIfAny(kubernetesProvider, cancel) go startProxyReportErrorIfAny(kubernetesProvider, cancel)
url := GetApiServerUrl()
if err := apiserver.Provider.InitAndTestConnection(GetApiServerUrl(), 20); err != nil { if err := apiserver.Provider.InitAndTestConnection(GetApiServerUrl(), 20); err != nil {
logger.Log.Errorf(uiUtils.Error, "Couldn't connect to API server, check logs") logger.Log.Errorf(uiUtils.Error, "Couldn't connect to API server, check logs")
cancel() cancel()
break break
} }
logger.Log.Infof("Mizu is available at %s\n", GetApiServerUrl()) logger.Log.Infof("Mizu is available at %s\n", url)
openBrowser(url)
requestForAnalysisIfNeeded() requestForAnalysisIfNeeded()
if err := apiserver.Provider.ReportTappedPods(state.currentlyTappedPods); err != nil { if err := apiserver.Provider.ReportTappedPods(state.currentlyTappedPods); err != nil {
logger.Log.Debugf("[Error] failed update tapped pods %v", err) logger.Log.Debugf("[Error] failed update tapped pods %v", err)

View File

@ -3,6 +3,8 @@ package cmd
import ( import (
"context" "context"
"fmt" "fmt"
"net/http"
"github.com/up9inc/mizu/cli/apiserver" "github.com/up9inc/mizu/cli/apiserver"
"github.com/up9inc/mizu/cli/config" "github.com/up9inc/mizu/cli/config"
"github.com/up9inc/mizu/cli/kubernetes" "github.com/up9inc/mizu/cli/kubernetes"
@ -10,7 +12,6 @@ import (
"github.com/up9inc/mizu/cli/mizu" "github.com/up9inc/mizu/cli/mizu"
"github.com/up9inc/mizu/cli/mizu/version" "github.com/up9inc/mizu/cli/mizu/version"
"github.com/up9inc/mizu/cli/uiUtils" "github.com/up9inc/mizu/cli/uiUtils"
"net/http"
) )
func runMizuView() { func runMizuView() {
@ -35,7 +36,9 @@ func runMizuView() {
return 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 { if err == nil && response.StatusCode == 200 {
logger.Log.Infof("Found a running service %s and open port %d", mizu.ApiServerPodName, config.Config.View.GuiPort) logger.Log.Infof("Found a running service %s and open port %d", mizu.ApiServerPodName, config.Config.View.GuiPort)
return return
@ -43,12 +46,13 @@ func runMizuView() {
logger.Log.Infof("Establishing connection to k8s cluster...") logger.Log.Infof("Establishing connection to k8s cluster...")
go startProxyReportErrorIfAny(kubernetesProvider, cancel) 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") logger.Log.Errorf(uiUtils.Error, "Couldn't connect to API server, check logs")
return 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 { if isCompatible, err := version.CheckVersionCompatibility(); err != nil {
logger.Log.Errorf("Failed to check versions compatibility %v", err) logger.Log.Errorf("Failed to check versions compatibility %v", err)
cancel() cancel()

View File

@ -33,7 +33,6 @@ import (
"github.com/up9inc/mizu/tap/api" "github.com/up9inc/mizu/tap/api"
) )
const AppPortsEnvVar = "APP_PORTS"
const cleanPeriod = time.Second * 10 const cleanPeriod = time.Second * 10
var remoteOnlyOutboundPorts = []int{80, 443} var remoteOnlyOutboundPorts = []int{80, 443}