diff --git a/README.md b/README.md index b1c26fe..e511990 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ A simplified way of working with Helm. The _Helm Dashboard_ plugin offers a UI-driven way to view the installed Helm charts, see their revision history and corresponding k8s resources. Also, you can perform simple actions like roll back to a revision or upgrade to newer version. -This project is part of [Komodor's](https://komodor.io) vision of helping Kubernetes users to navigate and troubleshoot their clusters. +This project is part of [Komodor's](https://komodor.com/?utm_campaign=Helm-Dash&utm_source=helm-dash-gh) vision of helping Kubernetes users to navigate and troubleshoot their clusters. ## Installing @@ -50,7 +50,7 @@ If you want to increase the logging verbosity and see all the debug info, set `D ## Support Channels -We have two main channels for supporting the Helm Dashboard users: [Slack community](https://komodorkommunity.slack.com/x-p3820586794880-3937175868755-4092688791734/archives/C042U85BD45/p1663573506220839) for general conversations +We have two main channels for supporting the Helm Dashboard users: [Slack community](https://komodorkommunity.slack.com/archives/C044U1B0265) for general conversations and [GitHub issues](https://github.com/komodorio/helm-dashboard/issues) for real bugs. diff --git a/pkg/dashboard/data.go b/pkg/dashboard/data.go index 3a92971..7b8b0ab 100644 --- a/pkg/dashboard/data.go +++ b/pkg/dashboard/data.go @@ -21,6 +21,17 @@ import ( "time" ) +type CmdError struct { + Command []string + OrigError error + StdErr []byte +} + +func (e CmdError) Error() string { + //return fmt.Sprintf("failed to run command %s:\nError: %s\nSTDERR:%s", e.Command, e.OrigError, e.StdErr) + return string(e.StdErr) +} + type DataLayer struct { KubeContext string Helm string @@ -46,9 +57,18 @@ func (d *DataLayer) runCommand(cmd ...string) (string, error) { log.Warnf("STDERR:\n%s", serr) } if eerr, ok := err.(*exec.ExitError); ok { - return "", fmt.Errorf("failed to run command %s:\nError: %s\nSTDERR:%s", cmd, eerr, serr) + return "", CmdError{ + Command: cmd, + StdErr: serr, + OrigError: eerr, + } + } + + return "", CmdError{ + Command: cmd, + StdErr: serr, + OrigError: err, } - return "", err } sout := stdout.Bytes() diff --git a/pkg/dashboard/static/action.svg b/pkg/dashboard/static/action.svg deleted file mode 100644 index 7146f30..0000000 --- a/pkg/dashboard/static/action.svg +++ /dev/null @@ -1,4 +0,0 @@ - diff --git a/pkg/dashboard/static/actions.js b/pkg/dashboard/static/actions.js index 488a642..ffb2d0d 100644 --- a/pkg/dashboard/static/actions.js +++ b/pkg/dashboard/static/actions.js @@ -4,6 +4,7 @@ $("#btnUpgradeCheck").click(function () { self.find(".spinner-border").show() const repoName = self.data("repo") $("#btnUpgrade span").text("Checking...") + $("#btnUpgrade .icon").removeClass("bi-arrow-up bi-check-circle").addClass("bi-hourglass-split") $.post("/api/helm/repo/update?name=" + repoName).fail(function (xhr) { reportError("Failed to update chart repo", xhr) }).done(function () { @@ -20,7 +21,11 @@ function checkUpgradeable(name) { $.getJSON("/api/helm/repo/search?name=" + name).fail(function (xhr) { reportError("Failed to find chart in repo", xhr) }).done(function (data) { - if (!data) { + if (!data || !data.length) { + $("#btnUpgrade span").text("No upgrades") + $("#btnUpgrade .icon").removeClass("bi-hourglass-split").addClass("bi-x-octagon") + $("#btnUpgrade").prop("disabled", true) + $("#btnUpgradeCheck").prop("disabled", true) return } @@ -38,8 +43,10 @@ function checkUpgradeable(name) { $("#btnUpgradeCheck").prop("disabled", false) if (canUpgrade) { $("#btnUpgrade span").text("Upgrade to " + elm.version) + $("#btnUpgrade .icon").removeClass("bi-hourglass-split").addClass("bi-arrow-up") } else { - $("#btnUpgrade span").text("No upgrades") + $("#btnUpgrade span").text("Up-to-date") + $("#btnUpgrade .icon").removeClass("bi-hourglass-split").addClass("bi-check-circle") } $("#btnUpgrade").off("click").click(function () { @@ -58,12 +65,11 @@ function popUpUpgrade(self, verCur, elm) { $('#upgradeModalLabel select').val(elm.version).trigger("change") - const myModal = new bootstrap.Offcanvas(document.getElementById('upgradeModal'), {}); + const myModal = new bootstrap.Modal(document.getElementById('upgradeModal'), {}); myModal.show() const btnConfirm = $("#upgradeModal .btn-confirm"); btnConfirm.prop("disabled", true).off('click').click(function () { - console.log("working") btnConfirm.prop("disabled", true).prepend('') $.ajax({ url: url + "&version=" + $('#upgradeModalLabel select').val(), @@ -122,7 +128,7 @@ $("#btnUninstall").click(function () { }) }) - const myModal = new bootstrap.Offcanvas(document.getElementById('confirmModal')); + const myModal = new bootstrap.Modal(document.getElementById('confirmModal')); myModal.show() let qstr = "name=" + chart + "&namespace=" + namespace + "&revision=" + revision @@ -160,7 +166,7 @@ $("#btnRollback").click(function () { }) }) - const myModal = new bootstrap.Offcanvas(document.getElementById('confirmModal'), {}); + const myModal = new bootstrap.Modal(document.getElementById('confirmModal'), {}); myModal.show() let qstr = "name=" + chart + "&namespace=" + namespace + "&revision=" + revisionNew + "&revisionDiff=" + revisionCur diff --git a/pkg/dashboard/static/details-view.js b/pkg/dashboard/static/details-view.js index dc81b38..4c24a02 100644 --- a/pkg/dashboard/static/details-view.js +++ b/pkg/dashboard/static/details-view.js @@ -5,10 +5,11 @@ function revisionClicked(namespace, name, self) { self.removeClass(inactive).addClass(active) const elm = self.data("elm") setHashParam("revision", elm.revision) - $("#sectionDetails span.rev").text("#"+elm.revision) + $("#sectionDetails span.rev").text("#" + elm.revision) statusStyle(elm.status, $("#none"), $("#sectionDetails .rev-details .rev-status")) - $("#sectionDetails .rev-date").text(elm.updated.replace("T", " ").replace("+", " +")) + const rdate = luxon.DateTime.fromISO(elm.updated); + $("#sectionDetails .rev-date").text(rdate.toJSDate().toLocaleString()) $("#sectionDetails .rev-tags .rev-chart").text(elm.chart) $("#sectionDetails .rev-tags .rev-app").text(elm.app_version) $("#sectionDetails .rev-tags .rev-ns").text(getHashParam("namespace")) @@ -94,9 +95,11 @@ $('#specRev').keyup(function (event) { if (keycode == '13') { $("#diffModeRev").click() } - event.preventDefault() }); +$("form").submit(function(e){ + e.preventDefault(); +}); $("#userDefinedVals").change(function () { const self = $(this) @@ -150,10 +153,11 @@ function showResources(namespace, chart, revision) { for (let i = 0; i < data.length; i++) { const res = data[i] const resBlock = $(` -