diff --git a/main.go b/main.go index 15cdeb8a..d3f8f1af 100644 --- a/main.go +++ b/main.go @@ -13,7 +13,7 @@ import ( "github.com/jessevdk/go-flags" "github.com/joomcode/errorx" "github.com/komodorio/helm-dashboard/pkg/dashboard" - "github.com/komodorio/helm-dashboard/pkg/dashboard/env" + "github.com/komodorio/helm-dashboard/pkg/dashboard/utils" "github.com/pkg/browser" log "github.com/sirupsen/logrus" ) @@ -51,7 +51,7 @@ func main() { opts.BindHost = host } - opts.Verbose = opts.Verbose || env.ParseEnvAsBool("DEBUG", false) + opts.Verbose = opts.Verbose || utils.EnvAsBool("DEBUG", false) setupLogging(opts.Verbose) server := dashboard.Server{ diff --git a/pkg/dashboard/api.go b/pkg/dashboard/api.go index aee727cc..55a97269 100644 --- a/pkg/dashboard/api.go +++ b/pkg/dashboard/api.go @@ -7,9 +7,9 @@ import ( "path" "github.com/gin-gonic/gin" - "github.com/komodorio/helm-dashboard/pkg/dashboard/env" "github.com/komodorio/helm-dashboard/pkg/dashboard/handlers" "github.com/komodorio/helm-dashboard/pkg/dashboard/objects" + "github.com/komodorio/helm-dashboard/pkg/dashboard/utils" "github.com/komodorio/helm-dashboard/pkg/frontend" log "github.com/sirupsen/logrus" ) @@ -95,7 +95,7 @@ func NewRouter(abortWeb context.CancelFunc, data *objects.DataLayer, debug bool) api.Use(errorHandler) api.Use(corsMiddleware()) - if env.ParseEnvAsBool("HD_CORS", false) { + if utils.EnvAsBool("HD_CORS", false) { api.Use(allowCORS) } diff --git a/pkg/dashboard/api_test.go b/pkg/dashboard/api_test.go index 35655909..f79b7dcb 100644 --- a/pkg/dashboard/api_test.go +++ b/pkg/dashboard/api_test.go @@ -10,9 +10,9 @@ import ( "testing" "github.com/gin-gonic/gin" - "github.com/komodorio/helm-dashboard/pkg/dashboard/env" "github.com/komodorio/helm-dashboard/pkg/dashboard/handlers" "github.com/komodorio/helm-dashboard/pkg/dashboard/objects" + "github.com/komodorio/helm-dashboard/pkg/dashboard/utils" log "github.com/sirupsen/logrus" "gotest.tools/v3/assert" "helm.sh/helm/v3/pkg/action" @@ -28,7 +28,7 @@ var inMemStorage *storage.Storage var repoFile string func TestMain(m *testing.M) { // fixture to set logging level via env variable - if env.ParseEnvAsBool("DEBUG", false) { + if utils.EnvAsBool("DEBUG", false) { log.SetLevel(log.DebugLevel) log.Debugf("Set logging level") } diff --git a/pkg/dashboard/env/env.go b/pkg/dashboard/env/env.go deleted file mode 100644 index a6683d89..00000000 --- a/pkg/dashboard/env/env.go +++ /dev/null @@ -1,16 +0,0 @@ -package env - -import ( - "os" - "slices" -) - -func ParseEnvAsBool(envKey string, envDef bool) bool { - validSettableValues := []string{"false", "true", "0", "1"} - envValue := os.Getenv(envKey) - if slices.Contains(validSettableValues, envValue) { - return envValue == "true" || envValue == "1" - } else { - return envDef - } -} diff --git a/pkg/dashboard/env/env_test.go b/pkg/dashboard/env/env_test.go deleted file mode 100644 index 051eb53f..00000000 --- a/pkg/dashboard/env/env_test.go +++ /dev/null @@ -1,56 +0,0 @@ -package env - -import ( - "os" - "testing" -) - -func TestParseEnvAsBool(t *testing.T) { - // value: "true" | "1", default: false -> expect true - t.Setenv("TEST", "true") - want := true - if ParseEnvAsBool("TEST", false) != want { - t.Errorf("Env 'TEST' value '%v' should be parsed to %v", os.Getenv("TEST"), want) - } - t.Setenv("TEST", "1") - want = true - if ParseEnvAsBool("TEST", false) != want { - t.Errorf("Env 'TEST' value '%v' should be parsed to %v", os.Getenv("TEST"), want) - } - - // value: "false" | "0", default: true -> expect false - t.Setenv("TEST", "false") - want = false - if ParseEnvAsBool("TEST", true) != want { - t.Errorf("Env 'TEST' value '%v' should be parsed to %v", os.Getenv("TEST"), want) - } - t.Setenv("TEST", "0") - want = false - if ParseEnvAsBool("TEST", true) != want { - t.Errorf("Env 'TEST' value '%v' should be parsed to %v", os.Getenv("TEST"), want) - } - - // value: "" | *, default: false -> expect false - t.Setenv("TEST", "") - want = false - if ParseEnvAsBool("TEST", false) != want { - t.Errorf("Env 'TEST' value '%v' should be parsed to %v", os.Getenv("TEST"), want) - } - t.Setenv("TEST", "10random") - want = false - if ParseEnvAsBool("TEST", false) != want { - t.Errorf("Env 'TEST' value '%v' should be parsed to %v", os.Getenv("TEST"), want) - } - - // value: "" | *, default: true -> expect true - t.Setenv("TEST", "") - want = true - if ParseEnvAsBool("TEST", true) != want { - t.Errorf("Env 'TEST' value '%v' should be parsed to %v", os.Getenv("TEST"), want) - } - t.Setenv("TEST", "10random") - want = true - if ParseEnvAsBool("TEST", true) != want { - t.Errorf("Env 'TEST' value '%v' should be parsed to %v", os.Getenv("TEST"), want) - } -} diff --git a/pkg/dashboard/objects/data.go b/pkg/dashboard/objects/data.go index 114ea0cf..8a62ee55 100644 --- a/pkg/dashboard/objects/data.go +++ b/pkg/dashboard/objects/data.go @@ -10,7 +10,7 @@ import ( "io" "github.com/joomcode/errorx" - "github.com/komodorio/helm-dashboard/pkg/dashboard/env" + "github.com/komodorio/helm-dashboard/pkg/dashboard/utils" "github.com/pkg/errors" log "github.com/sirupsen/logrus" "helm.sh/helm/v3/pkg/action" @@ -193,7 +193,7 @@ func (d *DataLayer) nsForCtx(ctx string) string { } func (d *DataLayer) PeriodicTasks(ctx context.Context) { - if !env.ParseEnvAsBool("HD_NO_AUTOUPDATE", false) { + if !utils.EnvAsBool("HD_NO_AUTOUPDATE", false) { // auto-update repos go d.loopUpdateRepos(ctx, 10*time.Minute) // TODO: parameterize interval? } diff --git a/pkg/dashboard/server.go b/pkg/dashboard/server.go index 65476d2e..b87a19fe 100644 --- a/pkg/dashboard/server.go +++ b/pkg/dashboard/server.go @@ -10,7 +10,6 @@ import ( "time" "github.com/joomcode/errorx" - "github.com/komodorio/helm-dashboard/pkg/dashboard/env" "github.com/komodorio/helm-dashboard/pkg/dashboard/objects" "helm.sh/helm/v3/pkg/action" "helm.sh/helm/v3/pkg/cli" @@ -39,7 +38,7 @@ func (s *Server) StartServer(ctx context.Context, cancel context.CancelFunc) (st } data.LocalCharts = s.LocalCharts - data.StatusInfo.Analytics = (!s.NoTracking && s.Version != "0.0.0") || env.ParseEnvAsBool("HD_DEV_ANALYTICS", false) + data.StatusInfo.Analytics = (!s.NoTracking && s.Version != "0.0.0") || utils.EnvAsBool("HD_DEV_ANALYTICS", false) err = s.detectClusterMode(data) if err != nil { @@ -57,7 +56,7 @@ func (s *Server) StartServer(ctx context.Context, cancel context.CancelFunc) (st } func (s *Server) detectClusterMode(data *objects.DataLayer) error { - data.StatusInfo.ClusterMode = env.ParseEnvAsBool("HD_CLUSTER_MODE", false) + data.StatusInfo.ClusterMode = utils.EnvAsBool("HD_CLUSTER_MODE", false) if data.StatusInfo.ClusterMode { return nil } diff --git a/pkg/dashboard/utils/utils.go b/pkg/dashboard/utils/utils.go index a0232c36..eef3c4a7 100644 --- a/pkg/dashboard/utils/utils.go +++ b/pkg/dashboard/utils/utils.go @@ -6,6 +6,7 @@ import ( "os" "os/exec" "regexp" + "slices" "strings" "github.com/gin-gonic/gin" @@ -116,3 +117,13 @@ func GetQueryProps(c *gin.Context) (*QueryProps, error) { return &qp, nil } + +func EnvAsBool(envKey string, envDef bool) bool { + validSettableValues := []string{"false", "true", "0", "1"} + envValue := os.Getenv(envKey) + if slices.Contains(validSettableValues, envValue) { + return envValue == "true" || envValue == "1" + } else { + return envDef + } +} diff --git a/pkg/dashboard/utils/utils_test.go b/pkg/dashboard/utils/utils_test.go index 5b01bcc3..6f1f2896 100644 --- a/pkg/dashboard/utils/utils_test.go +++ b/pkg/dashboard/utils/utils_test.go @@ -2,6 +2,7 @@ package utils import ( "net/http/httptest" + "os" "testing" "github.com/gin-gonic/gin" @@ -106,3 +107,53 @@ func TestChartAndVersion(t *testing.T) { }) } } + +func TestEnvAsBool(t *testing.T) { + // value: "true" | "1", default: false -> expect true + t.Setenv("TEST", "true") + want := true + if EnvAsBool("TEST", false) != want { + t.Errorf("Env 'TEST' value '%v' should be parsed to %v", os.Getenv("TEST"), want) + } + t.Setenv("TEST", "1") + want = true + if EnvAsBool("TEST", false) != want { + t.Errorf("Env 'TEST' value '%v' should be parsed to %v", os.Getenv("TEST"), want) + } + + // value: "false" | "0", default: true -> expect false + t.Setenv("TEST", "false") + want = false + if EnvAsBool("TEST", true) != want { + t.Errorf("Env 'TEST' value '%v' should be parsed to %v", os.Getenv("TEST"), want) + } + t.Setenv("TEST", "0") + want = false + if EnvAsBool("TEST", true) != want { + t.Errorf("Env 'TEST' value '%v' should be parsed to %v", os.Getenv("TEST"), want) + } + + // value: "" | *, default: false -> expect false + t.Setenv("TEST", "") + want = false + if EnvAsBool("TEST", false) != want { + t.Errorf("Env 'TEST' value '%v' should be parsed to %v", os.Getenv("TEST"), want) + } + t.Setenv("TEST", "10random") + want = false + if EnvAsBool("TEST", false) != want { + t.Errorf("Env 'TEST' value '%v' should be parsed to %v", os.Getenv("TEST"), want) + } + + // value: "" | *, default: true -> expect true + t.Setenv("TEST", "") + want = true + if EnvAsBool("TEST", true) != want { + t.Errorf("Env 'TEST' value '%v' should be parsed to %v", os.Getenv("TEST"), want) + } + t.Setenv("TEST", "10random") + want = true + if EnvAsBool("TEST", true) != want { + t.Errorf("Env 'TEST' value '%v' should be parsed to %v", os.Getenv("TEST"), want) + } +}