From 741e2e54f1a5676f58d0e1abb054fa7235fd3b64 Mon Sep 17 00:00:00 2001 From: Gyanendra Mishra Date: Tue, 16 Jul 2024 15:38:51 +0100 Subject: [PATCH] feat: added a dashboard cmd that opens the kardinal dashboard in the browser (#36) --- flake.lock | 12 +++--- kardinal-cli/cmd/root.go | 20 ++++++++++ kardinal-cli/consts/consts.go | 1 + .../multi_os_cmd_executor.go | 38 +++++++++++++++++++ 4 files changed, 65 insertions(+), 6 deletions(-) create mode 100644 kardinal-cli/multi_os_cmd_executor/multi_os_cmd_executor.go diff --git a/flake.lock b/flake.lock index af572cd7..301a79d7 100644 --- a/flake.lock +++ b/flake.lock @@ -43,11 +43,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1718437845, - "narHash": "sha256-ZT7Oc1g4I4pHVGGjQFnewFVDRLH5cIZhEzODLz9YXeY=", + "lastModified": 1720954236, + "narHash": "sha256-1mEKHp4m9brvfQ0rjCca8P1WHpymK3TOr3v34ydv9bs=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "752c634c09ceb50c45e751f8791cb45cb3d46c9e", + "rev": "53e81e790209e41f0c1efa9ff26ff2fd7ab35e27", "type": "github" }, "original": { @@ -82,11 +82,11 @@ }, "unstable": { "locked": { - "lastModified": 1718530797, - "narHash": "sha256-pup6cYwtgvzDpvpSCFh1TEUjw2zkNpk8iolbKnyFmmU=", + "lastModified": 1720957393, + "narHash": "sha256-oedh2RwpjEa+TNxhg5Je9Ch6d3W1NKi7DbRO1ziHemA=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "b60ebf54c15553b393d144357375ea956f89e9a9", + "rev": "693bc46d169f5af9c992095736e82c3488bf7dbb", "type": "github" }, "original": { diff --git a/kardinal-cli/cmd/root.go b/kardinal-cli/cmd/root.go index 16b8fe75..0193432f 100644 --- a/kardinal-cli/cmd/root.go +++ b/kardinal-cli/cmd/root.go @@ -3,9 +3,12 @@ package cmd import ( "context" "fmt" + "kardinal.cli/consts" + "kardinal.cli/multi_os_cmd_executor" "log" "net/http" "os" + "path" "strings" "github.com/kurtosis-tech/stacktrace" @@ -154,10 +157,27 @@ var removeManagerCmd = &cobra.Command{ }, } +var dashboardCmd = &cobra.Command{ + Use: "dashboard", + Short: "Open your Kardinal Dashboard", + Args: cobra.ExactArgs(0), + Run: func(cmr *cobra.Command, args []string) { + tenantUuid, err := tenant.GetOrCreateUserTenantUUID() + if err != nil { + log.Fatal("Error getting or creating user tenant UUID", err) + } + tenantUuidStr := tenantUuid.String() + if err := multi_os_cmd_executor.OpenFile(path.Join(consts.KardinalDevURL, tenantUuidStr)); err != nil { + log.Fatal("Error occurred opening the dashboard", err) + } + }, +} + func init() { rootCmd.AddCommand(flowCmd) rootCmd.AddCommand(managerCmd) rootCmd.AddCommand(deployCmd) + rootCmd.AddCommand(dashboardCmd) flowCmd.AddCommand(createCmd, deleteCmd) managerCmd.AddCommand(deployManagerCmd, removeManagerCmd) diff --git a/kardinal-cli/consts/consts.go b/kardinal-cli/consts/consts.go index a99d242e..87e4fd01 100644 --- a/kardinal-cli/consts/consts.go +++ b/kardinal-cli/consts/consts.go @@ -3,4 +3,5 @@ package consts const ( KardinalAppIDLabelKey = "dev.kardinal.app-id" KardinalManagerAppIDLabelValue = "kardinal-manager" + KardinalDevURL = "https://app.kardinal.dev" ) diff --git a/kardinal-cli/multi_os_cmd_executor/multi_os_cmd_executor.go b/kardinal-cli/multi_os_cmd_executor/multi_os_cmd_executor.go new file mode 100644 index 00000000..847d5210 --- /dev/null +++ b/kardinal-cli/multi_os_cmd_executor/multi_os_cmd_executor.go @@ -0,0 +1,38 @@ +package multi_os_cmd_executor + +import ( + "github.com/kurtosis-tech/stacktrace" + "os/exec" + "runtime" +) + +const ( + linuxOSName = "linux" + macOSName = "darwin" + windowsOSName = "windows" + + openFileLinuxCommandName = "xdg-open" + openFileMacCommandName = "open" + openFileWindowsCommandName = "rundll32" + + openFileWindowsCommandFirstArgumentDefault = "url.dll,FileProtocolHandler" +) + +func OpenFile(filepathOrURL string) error { + var args []string + switch runtime.GOOS { + case linuxOSName: + args = []string{openFileLinuxCommandName, filepathOrURL} + case macOSName: + args = []string{openFileMacCommandName, filepathOrURL} + case windowsOSName: + args = []string{openFileWindowsCommandName, openFileWindowsCommandFirstArgumentDefault, filepathOrURL} + default: + return stacktrace.NewError("Unsupported operating system") + } + command := exec.Command(args[0], args[1:]...) + if err := command.Start(); err != nil { + return stacktrace.Propagate(err, "An error occurred while opening '%v'", filepathOrURL) + } + return nil +}