mirror of
https://github.com/komodorio/helm-dashboard.git
synced 2026-03-24 11:48:04 +00:00
* Correct path to static dir * Add UI build to makefile * Fix docker build * describe now works * Installed page - revision view - implement url consistent state logic (#403) * refactor * refactor * Fix/responsive and small stylings (#404) * add user defined (#405) * Fix/modal loading button (#406) * add repo to url (#407) * Fix/resources table badges (#408) * filters is now good * fix * test results fix * fix * fixes - error modal, uninstall modals, typees * fixes * bug fix * Helm dashboard v2 (#402) * missing config (#409) * fixes * fixes * Fix/minor responsiveness (#410) * installed release page * default helm icon * guard * refactor * refactor * refactor * key * refactor * fixes * fixes to install * install, add, upgrade, reconfigure now works * latest ver fix * Revision page ui fixes (#411) * link color * Add-repository-link (#412) * empty badge fix * diff fix in install repo * removed console.log * unique key in helathstatus * Cosmetics * Goreleaser upgraded * Another way to fix it * refactor * refactor * chart install fix (#413) * more maintailable * loading, empty space and default namespace * typed * loading diff state is shared * modal height fix * upgrade and add repo connected * add repo suggestion data connected to modal * removed console.log * Chart install fix (#414) * refactor: fix text align uninstall * install modal values big fix * refactor * no changes in diff msg * refactor * sorted versions * typography changes * refactor * refactor * refactor * migrate to sb 7 (#416) * Chart install fix (#415) * Add troubleshoot in komodor (#417) * status style * fix * fixes * delete now reload the page correclty * navigate after add repo fix * Chart install fix (#419) * refactor * refactor * Fix revision age (#420) * refactor * fixed redirects and nav links selected ui (#421) * test modal ui fixes * arrows fix * loading ui (#422) * test dialog now shows errors * fixed rollback diff, redirect after rollback, and debouncing before refetching chart values after changing user defined values (#423) * everything is working besides install chart * install chart should work now * no need for this anymore * styling and naming * improvements * navigation fix * flow fixes * top bar pixel perfect * onClose is optional * ts optional * pixel perfect - clusters, box shadow, error modal * installed page pixel perfect * fixes * need to fix this naming * rollback logic is now good * buttons now similiar to the old app * pass release instead of release date (#426) * repository page style fixes * rounded input * colors like in the old app * more rounding * colors * colors * Cosmetics * drop-shadow cause the dropdown to swallowed * smaller text * fixes (#428) * fixes * describe fix * Fix/lint (#431) * style fixes * fix * describe panel style fixes * diff when repo is available * diff style fixes * fixes to install dialog * specific version should be latests revision * refactor * fixes * fixes * cause troubles * Fixes (#434) * fix * dont fetch if repo not available * tag should not be visible * custom-shdaow fixes * space and shadow like in the old app * refactor (#435) * describe display logic aligned with the old app * style fix * action button style fix * selected revision default logic fix * font fix * style fixes * shutdown button fix * latest revision is now consistent in dev and prod * namespace should be empty on install * fix for current version on install * sorting fix * checkmark should be displayed in options - install * state jump fix * local charts (#436) * Several more fixes (#438) * api docs (#439) * html remove diff2html dep (#437) * Refactor * refactor * Adding storybook for StatusLabel component (#441) * refactor (#442) * we need the css * add prettier (#440) * add prettier * refactor * refactor * Fix reconfigure issue (#443) * first diff fetch fix * missing dep in hooks (#444) * namespace should be from query * triggering diff rerender by listening to loading * missing uservalues * no need for auto retry * we should work against latest revision * refactor * Fix build merge * refactor * refactor * fix * refactor * refactor * age tooltip * prettier fix * fix bug (#447) * Add eslint now (#449) * repo install chart now works as expected * release modal and eslint working good now * we should fetch when return to the initial value * Tailwind theme reorganized (#446) * install release code is like reading a story ! * namespace is not needed for chart values * install repo chart is now like reading a story :) * Fix/filternamesapce (#451) * not needed dep * prettier fix * namespace fix * add debounce (#452) * namespace filter fix * now namespace filter behaves like in the old app * more linter rules and configurations * intial value should be empty * no need to keep filters on cluster change * we don't want to keep tab state between pages * button should be disabled when loading * prettier fix * initial value we're not presented * navigation fix * namespace should always be empty * supporting pre selected namespaces * lint adjustments * Refactor stories fodler (#450) * refactor * refactor * if no user values, use the release values * Adding layer to base style (#456) * Extract duplicate type to types file (#453) * Refactor callApi into direct usage of apiService (#454) * Remove scanners from backend * Give some room for multiple HealthStatus (#458) * refactor: add dynamic api docs (#460) * remove scanners from openapi * was loading forever * fix * Extract defined values from the Modals (#461) * refactor (#462) * fix chart with no repo diff flow * naming fix * crypto UUID not available through https * revert * Update analytics.js with UUID fallback * Cosmetics * repo fetch fix * not need to depened on versions * forgot to push * revert * was causing infinite loop * COsmetics --------- Co-authored-by: Nir Parisian <nir.parisian@gmail.com> Co-authored-by: dav-sap <davidsaper@gmail.com> Co-authored-by: chad11111 <chad1111@tutanota.com> Co-authored-by: IdanSchiller <58664272+IdanSchiller@users.noreply.github.com> Co-authored-by: dav-sap <16819417+dav-sap@users.noreply.github.com> Co-authored-by: rotembm12 <46103618+rotembm12@users.noreply.github.com> Co-authored-by: naorzr <naorzruk@gmail.com> Co-authored-by: Gary Gensler <127234894+chad11111@users.noreply.github.com> Co-authored-by: Tamir Abutbul <1tamir198@gmail.com> Co-authored-by: Nir Parisian <nir2002@users.noreply.github.com>
148 lines
4.1 KiB
Go
148 lines
4.1 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"fmt"
|
|
"github.com/joomcode/errorx"
|
|
"os"
|
|
"os/signal"
|
|
"strings"
|
|
"syscall"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/jessevdk/go-flags"
|
|
"github.com/komodorio/helm-dashboard/pkg/dashboard"
|
|
"github.com/pkg/browser"
|
|
log "github.com/sirupsen/logrus"
|
|
)
|
|
|
|
var (
|
|
version = "0.0.0"
|
|
commit = "none"
|
|
date = "unknown"
|
|
)
|
|
|
|
type options struct {
|
|
Version bool `long:"version" description:"Show tool version"`
|
|
Verbose bool `short:"v" long:"verbose" description:"Show verbose debug information"`
|
|
NoBrowser bool `short:"b" long:"no-browser" description:"Do not attempt to open Web browser upon start"`
|
|
NoTracking bool `long:"no-analytics" description:"Disable user analytics (Heap, DataDog etc.)"`
|
|
BindHost string `long:"bind" description:"Host binding to start server (default: localhost)"` // default should be printed but not assigned as the precedence: flag > env > default
|
|
Port uint `short:"p" long:"port" description:"Port to start server on" default:"8080"`
|
|
Namespace string `short:"n" long:"namespace" description:"Namespace for HELM operations"`
|
|
Devel bool `long:"devel" description:"Include development versions of charts"`
|
|
LocalChart []string `long:"local-chart" description:"Specify location of local chart to include into UI"`
|
|
}
|
|
|
|
func main() {
|
|
err := os.Setenv("HD_VERSION", version) // for anyone willing to access it
|
|
if err != nil {
|
|
fmt.Println("Failed to remember app version because of error: " + err.Error())
|
|
}
|
|
|
|
opts := parseFlags()
|
|
if opts.BindHost == "" {
|
|
host := os.Getenv("HD_BIND")
|
|
if host == "" {
|
|
host = "localhost"
|
|
}
|
|
opts.BindHost = host
|
|
}
|
|
|
|
opts.Verbose = opts.Verbose || os.Getenv("DEBUG") != ""
|
|
setupLogging(opts.Verbose)
|
|
|
|
server := dashboard.Server{
|
|
Version: version,
|
|
Namespaces: strings.Split(opts.Namespace, ","),
|
|
Address: fmt.Sprintf("%s:%d", opts.BindHost, opts.Port),
|
|
Debug: opts.Verbose,
|
|
NoTracking: opts.NoTracking,
|
|
Devel: opts.Devel,
|
|
LocalCharts: opts.LocalChart,
|
|
}
|
|
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
|
|
osSignal := make(chan os.Signal, 1)
|
|
signal.Notify(osSignal, os.Interrupt, syscall.SIGINT, syscall.SIGTERM)
|
|
go func() {
|
|
oscall := <-osSignal
|
|
log.Warnf("Stopping on signal: %s\n", oscall)
|
|
cancel()
|
|
}()
|
|
|
|
address, webServerDone, err := server.StartServer(ctx, cancel)
|
|
if err != nil {
|
|
if errorx.IsOfType(err, errorx.InitializationFailed) {
|
|
log.Debugf("Full error: %+v", err)
|
|
log.Errorf("No Kubernetes cluster connection possible. Make sure you have valid kubeconfig file or run dashboard from inside cluster. See https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/")
|
|
os.Exit(1)
|
|
} else {
|
|
log.Fatalf("Failed to start Helm Dashboard: %+v", err)
|
|
}
|
|
}
|
|
|
|
if !opts.NoTracking {
|
|
log.Infof("User analytics is collected to improve the quality, disable it with --no-analytics")
|
|
}
|
|
|
|
if opts.NoBrowser {
|
|
log.Infof("Access web UI at: %s", address)
|
|
} else {
|
|
log.Infof("Opening web UI: %s", address)
|
|
err := browser.OpenURL(address)
|
|
if err != nil {
|
|
log.Warnf("Failed to open Web browser for URL: %s", err)
|
|
}
|
|
}
|
|
|
|
<-webServerDone
|
|
log.Infof("Done.")
|
|
}
|
|
|
|
func parseFlags() options {
|
|
ns := os.Getenv("HELM_NAMESPACE")
|
|
if ns == "default" { // it's how Helm passes to plugin the empty NS, we have to reset it back
|
|
ns = ""
|
|
}
|
|
|
|
opts := options{Namespace: ns}
|
|
args, err := flags.Parse(&opts)
|
|
if err != nil {
|
|
var e *flags.Error
|
|
if errors.As(err, &e) {
|
|
if e.Type == flags.ErrHelp {
|
|
os.Exit(0)
|
|
}
|
|
}
|
|
|
|
// we rely on default behavior to print the problem inside `flags` library
|
|
os.Exit(1)
|
|
}
|
|
|
|
if opts.Version {
|
|
fmt.Println(version)
|
|
os.Exit(0)
|
|
}
|
|
|
|
if len(args) > 0 {
|
|
fmt.Println("The program does not take arguments, see --help for usage")
|
|
os.Exit(1)
|
|
}
|
|
return opts
|
|
}
|
|
|
|
func setupLogging(verbose bool) {
|
|
if verbose {
|
|
log.SetLevel(log.DebugLevel)
|
|
gin.SetMode(gin.DebugMode)
|
|
log.Debugf("Debug logging is enabled")
|
|
} else {
|
|
log.SetLevel(log.InfoLevel)
|
|
gin.SetMode(gin.ReleaseMode)
|
|
}
|
|
log.Infof("Helm Dashboard by Komodor, version %s (%s @ %s)", version, commit, date)
|
|
}
|