diff --git a/src/common/ipc-messages.ts b/src/common/ipc-messages.ts index 9f818d011f..2bda82b7b1 100644 --- a/src/common/ipc-messages.ts +++ b/src/common/ipc-messages.ts @@ -4,7 +4,6 @@ export enum ClusterIpcMessage { ADD = "cluster-add", STOP = "cluster-stop", - REFRESH = "cluster-refresh", REMOVE = "cluster-remove", REMOVE_WORKSPACE = "cluster-remove-all-from-workspace", FEATURE_INSTALL = "cluster-feature-install", diff --git a/src/main/cluster-manager.ts b/src/main/cluster-manager.ts index 06cbf56505..34bf0fe48c 100644 --- a/src/main/cluster-manager.ts +++ b/src/main/cluster-manager.ts @@ -143,20 +143,12 @@ export class ClusterManager { return this.getCluster(clusterId)?.uninstallFeature(name); } - protected async refreshCluster(clusterId: ClusterId) { - const cluster = this.getCluster(clusterId); - if (cluster) { - await cluster.refreshStatus(); - } - } - static ipcListen(clusterManager: ClusterManager) { const handlers = { [ClusterIpcMessage.ADD]: clusterManager.addCluster, [ClusterIpcMessage.STOP]: clusterManager.stopCluster, [ClusterIpcMessage.REMOVE]: clusterManager.removeCluster, [ClusterIpcMessage.REMOVE_WORKSPACE]: clusterManager.removeAllByWorkspace, - [ClusterIpcMessage.REFRESH]: clusterManager.refreshCluster, [ClusterIpcMessage.FEATURE_INSTALL]: clusterManager.installFeature, [ClusterIpcMessage.FEATURE_UPGRADE]: clusterManager.upgradeFeature, [ClusterIpcMessage.FEATURE_REMOVE]: clusterManager.uninstallFeature, diff --git a/src/main/cluster.ts b/src/main/cluster.ts index 7e41499119..ed2e8d3205 100644 --- a/src/main/cluster.ts +++ b/src/main/cluster.ts @@ -160,18 +160,15 @@ export class Cluster implements ClusterModel { } async installFeature(name: string, config: any) { - await installFeature(name, this, config) - await this.refreshStatus() + return await installFeature(name, this, config) } async upgradeFeature(name: string, config: any) { - await upgradeFeature(name, this, config) - await this.refreshStatus() + return await upgradeFeature(name, this, config) } async uninstallFeature(name: string) { - await uninstallFeature(name, this) - await this.refreshStatus() + return await uninstallFeature(name, this) } getPrometheusApiPrefix() { diff --git a/src/renderer/_vue/App.vue b/src/renderer/_vue/App.vue deleted file mode 100644 index c8544fe3fe..0000000000 --- a/src/renderer/_vue/App.vue +++ /dev/null @@ -1,38 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/renderer/_vue/assets/css/app.scss b/src/renderer/_vue/assets/css/app.scss deleted file mode 100644 index ed8e19eb68..0000000000 --- a/src/renderer/_vue/assets/css/app.scss +++ /dev/null @@ -1,211 +0,0 @@ -@import "custom"; -@import "~typeface-roboto/index.css"; -@import "~material-design-icons/iconfont/material-icons.css"; -@import "~bootstrap/scss/bootstrap"; -@import "~bootstrap-vue/src/index"; -@import "~prismjs/themes/prism-tomorrow.css"; -@import "~vue-prism-editor/dist/VuePrismEditor.css"; - -html, body { - margin: 0; - padding: 0; - width: 100%; - height: 100%; - background-color: $lens-main-bg; - color: $lens-text-color; - font-size: 14px; // font size that is used also on lens UI - -webkit-font-smoothing: antialiased; -} - -body{ - font-family: 'Roboto', sans-serif; -} - -pre { - color: $lens-text-color-light; -} - -#app { - width: 100%; - height: 100%; - & > .main-view{ - width: 100%; - height: 100%; - & > .content{ - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - overflow: hidden; - } - &.menu-visible > .content{ - left: 70px; - bottom: 20px; - } - } - - select { - appearance: none; - border: 1px solid $lens-pane-bg; - background-color: $lens-menu-bg; - color: $lens-text-color-light; - background-image: url('data:image/png;base64,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ADC4g/xvHty7AQBuQB2AZD8gug3YCsBqAcBpA2L8gAQ/kC4uyuffUZjl4jzopdoM0CoHBt4nAwwb4NvtgYH+5oGBb/UA5R7Q9mFwlwcAqgSwrgOxcPN113tn8F/xL2AUEjlEqYDhAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF9mlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOCAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMTktMTEtMDVUMTU6NTI6MzMrMDI6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMTktMTEtMDVUMTU6NTI6MzMrMDI6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDE5LTExLTA1VDE1OjUyOjMzKzAyOjAwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjUxMTI1YTgyLWY2YmUtNDY1ZC05NDAyLTk0NWNhZGFjYTkzZSIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjJiNjlhZDExLTI0M2MtMzk0Ny05NDM3LWNiZjkzNTM3ODFiYyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjRhM2FjMTY3LWVmMTYtNGM0ZC1hNzU2LTNkYmEzY2NiMzU2NiIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJEaXNwbGF5Ij4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo0YTNhYzE2Ny1lZjE2LTRjNGQtYTc1Ni0zZGJhM2NjYjM1NjYiIHN0RXZ0OndoZW49IjIwMTktMTEtMDVUMTU6NTI6MzMrMDI6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE4IChNYWNpbnRvc2gpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MTEyNWE4Mi1mNmJlLTQ2NWQtOTQwMi05NDVjYWRhY2E5M2UiIHN0RXZ0OndoZW49IjIwMTktMTEtMDVUMTU6NTI6MzMrMDI6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE4IChNYWNpbnRvc2gpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PviBDxwAAACESURBVDiN7dIxCgIxEEbhb2WvYCPeLQjaiL2FB7DwAoJVKsEDiBfaWyix0GJZs7FIJ043j/yPmTBNSklNTarSvyFo+02MscPsS6YLIczHJljhUQjfseyDoeCKTUGwxq0kgCMOGb7HaQjHPnGLS68/Y5d72OYgEgKmXnsv3uyjmv8p1wueYnsYek7mGucAAAAASUVORK5CYII='); - background-repeat: no-repeat, repeat; - background-position: right .7em top 50%, 0 0; - background-size: .65em auto, 100%; - } -} - -::-webkit-scrollbar { - width: 12px; - -} - -::-webkit-scrollbar-track { - box-shadow: inset 0 0 12px $lens-pane-bg; -} - -::-webkit-scrollbar-thumb { - box-shadow: inset 0 0 12px $lens-pane-bg; -} - -h1, h2, h3, h4, h5, h6{ - color: #fff; - font-size: 20.8px; - font-weight: 300; -} - -.table{ - color: $lens-text-color-light; - th{ - border-top: 1px solid #353a3e; - font-weight: 300; - color: $lens-text-color; - } - td{ - border-top: 1px solid #353a3e; - } - tr:first-child{ - th, td{ - border-top: none; - } - } -} - -.card{ - background: $lens-pane-bg; -} - -.help{ - border-left: 1px solid #353a3e; - padding-top: 20px; - &:first-child{ - padding-top: 0; - } - h3{ - padding: 0.75rem 0 0.75rem 0; - } -} - -.tooltip-inner { - font-size: 12px; -} - -.editor { - height: 400px; - font-size: 12px; - pre { - background-color: #1E1E1E; - } -} - -.aligner-center-center{ - height: 100%; - width: 100%; - display: flex; - align-items: center; - justify-content: center; -} - -.wrapper{ - width:100%; - height:100%; - display:flex; - justify-content:center; - align-items:center; - .error{ - - text-align: center; - i { - color: #dc3545; - font-size: 100px; - } - } -} - -.btn { - line-height: 1.3; -} - -// Force BS modals to use main app font etc. -.modal-open{ - @extend #app -} - -.popover { - background-color: $lens-menu-hl; - - select { - appearance: none; - border: 1px solid $lens-pane-bg; - background-color: $lens-menu-bg; - color: $lens-text-color-light; - background-image: url('data:image/png;base64,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ADC4g/xvHty7AQBuQB2AZD8gug3YCsBqAcBpA2L8gAQ/kC4uyuffUZjl4jzopdoM0CoHBt4nAwwb4NvtgYH+5oGBb/UA5R7Q9mFwlwcAqgSwrgOxcPN113tn8F/xL2AUEjlEqYDhAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF9mlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOCAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMTktMTEtMDVUMTU6NTI6MzMrMDI6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMTktMTEtMDVUMTU6NTI6MzMrMDI6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDE5LTExLTA1VDE1OjUyOjMzKzAyOjAwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjUxMTI1YTgyLWY2YmUtNDY1ZC05NDAyLTk0NWNhZGFjYTkzZSIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjJiNjlhZDExLTI0M2MtMzk0Ny05NDM3LWNiZjkzNTM3ODFiYyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjRhM2FjMTY3LWVmMTYtNGM0ZC1hNzU2LTNkYmEzY2NiMzU2NiIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJEaXNwbGF5Ij4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo0YTNhYzE2Ny1lZjE2LTRjNGQtYTc1Ni0zZGJhM2NjYjM1NjYiIHN0RXZ0OndoZW49IjIwMTktMTEtMDVUMTU6NTI6MzMrMDI6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE4IChNYWNpbnRvc2gpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MTEyNWE4Mi1mNmJlLTQ2NWQtOTQwMi05NDVjYWRhY2E5M2UiIHN0RXZ0OndoZW49IjIwMTktMTEtMDVUMTU6NTI6MzMrMDI6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE4IChNYWNpbnRvc2gpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PviBDxwAAACESURBVDiN7dIxCgIxEEbhb2WvYCPeLQjaiL2FB7DwAoJVKsEDiBfaWyix0GJZs7FIJ043j/yPmTBNSklNTarSvyFo+02MscPsS6YLIczHJljhUQjfseyDoeCKTUGwxq0kgCMOGb7HaQjHPnGLS68/Y5d72OYgEgKmXnsv3uyjmv8p1wueYnsYek7mGucAAAAASUVORK5CYII='); - background-repeat: no-repeat, repeat; - background-position: right .7em top 50%, 0 0; - background-size: .65em auto, 100%; - } - - .arrow:after { - border-top-color: $lens-menu-hl; - } -} -.popover-body { - color: $lens-text-color; - - li.list-group-item { - background-color: inherit; - padding: 0.5rem 0.75rem; - - a { - color: var(--lens-text-color-light); - } - } -} -.popover-header{ - color: $lens-text-color; - background-color: $lens-main-bg; - border-bottom: 0px; - - i.material-icons { - position: relative; - top: 3px; - font-size: 16px; - } -} - -#lens-container { - position: absolute; - top: 0; - left: 70px; - right: 0; - height: 100%; - z-index: 100; - display: none; - - > iframe { - height: calc(100% - var(--lens-bottom-bar-height)); - border: none; - } -} diff --git a/src/renderer/_vue/assets/css/custom.scss b/src/renderer/_vue/assets/css/custom.scss deleted file mode 100644 index 45c9eb7a8d..0000000000 --- a/src/renderer/_vue/assets/css/custom.scss +++ /dev/null @@ -1,73 +0,0 @@ -// from Lens Dashboard -$lens-main-bg: #1e2124 !default; // dark bg -$lens-pane-bg: #262b2f !default; // all panels main bg -$lens-dock-bg: #2E3136 !default; // terminal and top menu bar -$lens-menu-bg: #36393E !default; // sidemenu on left -$lens-menu-hl: #414448 !default; // sidemenu on left, top left corner -$lens-text-color: #87909c !default; -$lens-text-color-light: #a0a0a0 !default; -$lens-primary: #3d90ce !default; - -// export as css variables -:root { - --lens-main-bg: #{$lens-main-bg}; // dark bg - --lens-pane-bg: #{$lens-pane-bg}; // all panels main bg - --lens-dock-bg: #{$lens-dock-bg}; // terminal and top menu bar - --lens-menu-bg: #{$lens-menu-bg}; // sidemenu on left - --lens-menu-hl: #{$lens-menu-hl}; // sidemenu on left, top left corner - --lens-text-color: #{$lens-text-color}; - --lens-text-color-light: #{$lens-text-color-light}; - --lens-primary: #{$lens-primary}; - --lens-bottom-bar-height: 20px; -} - -// Base grayscale colors definitions -$white: #fff !default; -$gray-100: #f8f9fa !default; -$gray-200: #e9ecef !default; -$gray-300: #dee2e6 !default; -$gray-400: #ced4da !default; -$gray-500: #adb5bd !default; -$gray-600: #6c757d !default; -$gray-700: #495057 !default; -$gray-800: #343a40 !default; -$gray-900: #1e2124 !default; -$black: #000 !default; - -// Base colors definitions -$blue: #3d90ce !default; -$indigo: #6610f2 !default; -$purple: #6f42c1 !default; -$pink: #e83e8c !default; -$red: #CE3933 !default; -$orange: #fd7e14 !default; -$yellow: #ffc107 !default; -$green: #4caf50 !default; -$teal: #20c997 !default; -$cyan: #6ca5b7 !default; - -// Theme color default definitions -$primary: $lens-primary !default; -$secondary: $gray-600 !default; -$success: $green !default; -$info: $cyan !default; -$warning: $yellow !default; -$danger: $red !default; -$light: $gray-100 !default; -$dark: $gray-800 !default; - -// This table defines the theme colors (variant names) -$theme-colors: () !default; -$theme-colors: map-merge( - ( - 'primary': $primary, - 'secondary': $secondary, - 'success': $success, - 'info': $info, - 'warning': $warning, - 'danger': $danger, - 'light': $light, - 'dark': $dark - ), - $theme-colors -); diff --git a/src/renderer/_vue/assets/img/planet.png b/src/renderer/_vue/assets/img/planet.png deleted file mode 100644 index a812cc3eb0..0000000000 Binary files a/src/renderer/_vue/assets/img/planet.png and /dev/null differ diff --git a/src/renderer/_vue/components/BottomBar/BottomBar.vue b/src/renderer/_vue/components/BottomBar/BottomBar.vue deleted file mode 100644 index 6cfa1042aa..0000000000 --- a/src/renderer/_vue/components/BottomBar/BottomBar.vue +++ /dev/null @@ -1,88 +0,0 @@ - - - - - diff --git a/src/renderer/_vue/components/CubeSpinner.vue b/src/renderer/_vue/components/CubeSpinner.vue deleted file mode 100644 index 1ad743a46e..0000000000 --- a/src/renderer/_vue/components/CubeSpinner.vue +++ /dev/null @@ -1,116 +0,0 @@ - - - - diff --git a/src/renderer/_vue/components/LandingPage.vue b/src/renderer/_vue/components/LandingPage.vue deleted file mode 100644 index fa2e6ca22c..0000000000 --- a/src/renderer/_vue/components/LandingPage.vue +++ /dev/null @@ -1,65 +0,0 @@ - - - - - diff --git a/src/renderer/_vue/components/MainMenu/AddClusterMenuItem.vue b/src/renderer/_vue/components/MainMenu/AddClusterMenuItem.vue deleted file mode 100644 index 4237a0124c..0000000000 --- a/src/renderer/_vue/components/MainMenu/AddClusterMenuItem.vue +++ /dev/null @@ -1,70 +0,0 @@ - - - - - diff --git a/src/renderer/_vue/components/MainMenu/ClusterMenuItem.vue b/src/renderer/_vue/components/MainMenu/ClusterMenuItem.vue deleted file mode 100644 index b27d8ac245..0000000000 --- a/src/renderer/_vue/components/MainMenu/ClusterMenuItem.vue +++ /dev/null @@ -1,166 +0,0 @@ - - - - - diff --git a/src/renderer/_vue/components/MainMenu/MainMenu.vue b/src/renderer/_vue/components/MainMenu/MainMenu.vue deleted file mode 100644 index 127bb3274c..0000000000 --- a/src/renderer/_vue/components/MainMenu/MainMenu.vue +++ /dev/null @@ -1,107 +0,0 @@ - - - - - diff --git a/src/renderer/_vue/components/WhatsNewPage.vue b/src/renderer/_vue/components/WhatsNewPage.vue deleted file mode 100644 index 8eb07cf23e..0000000000 --- a/src/renderer/_vue/components/WhatsNewPage.vue +++ /dev/null @@ -1,114 +0,0 @@ - - - - - diff --git a/src/renderer/_vue/components/common/ClosePageButton.vue b/src/renderer/_vue/components/common/ClosePageButton.vue deleted file mode 100644 index 5776d9e63d..0000000000 --- a/src/renderer/_vue/components/common/ClosePageButton.vue +++ /dev/null @@ -1,40 +0,0 @@ - - - - - diff --git a/src/renderer/_vue/components/hashicon/hashicon.vue b/src/renderer/_vue/components/hashicon/hashicon.vue deleted file mode 100644 index 98891612bf..0000000000 --- a/src/renderer/_vue/components/hashicon/hashicon.vue +++ /dev/null @@ -1,28 +0,0 @@ - - diff --git a/src/renderer/_vue/index.js b/src/renderer/_vue/index.js deleted file mode 100644 index f301695407..0000000000 --- a/src/renderer/_vue/index.js +++ /dev/null @@ -1,35 +0,0 @@ -// todo: remove, currently not used in runtime - -import "../../common/system-ca" -import "./assets/css/app.scss" -import { PromiseIpc } from 'electron-promise-ipc' -import Vue from 'vue' -import BootstrapVue from 'bootstrap-vue' -import App from './App' -import router from './router' -import store from './store' - -const promiseIpc = new PromiseIpc({maxTimeoutMs: 6000}); - -promiseIpc.on('navigate', async (view) => { - router.push(view).catch(err => {}) -}); - -Vue.config.productionTip = false -Vue.use(BootstrapVue) - -Vue.mixin({ - created: function () { - this.$promiseIpc = promiseIpc; - } -}) - -setTimeout(async () => { - await store.dispatch('init') - new Vue({ - components: {App}, - store, - router, - template: '' - }).$mount('#app') -}) diff --git a/src/renderer/_vue/mixins/ClustersMixin.js b/src/renderer/_vue/mixins/ClustersMixin.js deleted file mode 100644 index f885bac957..0000000000 --- a/src/renderer/_vue/mixins/ClustersMixin.js +++ /dev/null @@ -1,16 +0,0 @@ -export default { - computed: { - clusters: function () { - return this.$store.getters.clusters - }, - newContexts: function () { - const seenContexts = this.seenContexts ? Array.from(this.seenContexts) : this.$store.getters.seenContexts - const contextNamesFromKubeconfig = this.availableContexts.map(item => item.currentContext) - return contextNamesFromKubeconfig.filter((item) => seenContexts.indexOf(item) < 0) - }, - availableContexts: function () { - // read available kubeconfigs from store on filter out configs already found in added clusters - return this.$store.getters.availableKubeContexts.filter(item => !this.clusters.find((cluster) => cluster.contextName == item.currentContext)); - }, - } -} diff --git a/src/renderer/_vue/router/index.js b/src/renderer/_vue/router/index.js deleted file mode 100644 index a879708aa6..0000000000 --- a/src/renderer/_vue/router/index.js +++ /dev/null @@ -1,97 +0,0 @@ -import Vue from 'vue' -import Router from 'vue-router' -import store from "../store"; -import { whatsNew } from './routeguard' - -Vue.use(Router); - -const router = new Router({ - routes: [ - { - path: '/', - name: 'landing-page', - component: require('@/_vue/components/LandingPage').default, - meta: { - routeguard: [ - // guards in priority order; the first one to catch will trigger something - whatsNew, - ], - } - }, - { - path: '/preferences', - name: 'preferences-page', - component: require('@/_vue/components/PreferencesPage').default, - }, - { - path: '/workspaces', - name: 'workspaces-page', - component: require('@/_vue/components/WorkspacesPage').default, - props: true, - }, - { - path: '/add-workspace', - name: 'add-workspace-page', - component: require('@/_vue/components/AddWorkspacePage').default, - props: true, - }, - { - path: '/edit-workspace', - name: 'edit-workspace-page', - component: require('@/_vue/components/EditWorkspacePage').default, - props: true, - }, - { - path: '/clusters/:id', - name: 'cluster-page', - component: require('@/_vue/components/ClusterPage').default, - props: true, - }, - { - path: '/clusters/:id/settings', - name: 'cluster-settings-page', - component: require('@/_vue/components/ClusterSettings').default, - props: true, - }, - { - path: "/add-cluster", - name: "add-cluster-page", - component: require('@/_vue/components/AddClusterPage').default, - props: true, - }, - { - path: "/whats-new", - name: "whats-new-page", - component: require('@/_vue/components/WhatsNewPage').default, - props: true, - }, - { - path: '*', - redirect: '/' - } - ] -}) - -router.beforeEach((to, from, next) => { - - // guard routes - if(to.meta && to.meta.routeguard && to.meta.routeguard.length > 0){ - - let guardNext; - to.meta.routeguard.forEach(guard => { - if(!guardNext) guardNext = guard(to, from, store); - }); - - if(guardNext) { - next(guardNext); - } else { - next(); - } - - } - - next(); - -}); - -export default router; diff --git a/src/renderer/_vue/router/routeguard/index.js b/src/renderer/_vue/router/routeguard/index.js deleted file mode 100644 index 29fac94417..0000000000 --- a/src/renderer/_vue/router/routeguard/index.js +++ /dev/null @@ -1,10 +0,0 @@ -import { userStore } from "../../../../common/user-store" - -export function whatsNew() { - if(userStore.hasNewAppVersion){ - console.log("router: guard: whatsNew: activated"); - return { - path: '/whats-new' - } - } -} diff --git a/src/renderer/_vue/store/index.js b/src/renderer/_vue/store/index.js deleted file mode 100644 index fb9d30edad..0000000000 --- a/src/renderer/_vue/store/index.js +++ /dev/null @@ -1,82 +0,0 @@ -import Vue from 'vue' -import Vuex from 'vuex' -import { userStore } from "../../../common/user-store" -import { getAppVersion } from "../../../common/utils/app-version" -import KubeContexts from './modules/kube-contexts' -import Clusters from './modules/clusters' -import HelmRepos from './modules/helm-repos' -import Workspaces from './modules/workspaces' -import { tracker } from "../../../common/tracker" -import { PromiseIpc } from 'electron-promise-ipc' - -Vue.use(Vuex); - -const promiseIpc = new PromiseIpc({maxTimeoutMs: 120000}); - -export default new Vuex.Store({ - modules: { - Clusters, - HelmRepos, - KubeContexts, - Workspaces - }, - state: { - preferences: {}, - hud: { - isMenuVisible: true, - }, - seenContexts: userStore.seenContexts, - lastSeenAppVersion: userStore.lastSeenAppVersion, - }, - mutations: { - storeSeenContexts(state, contexts) { - contexts.forEach(ctx => userStore.seenContexts.add(ctx)); - state.seenContexts = contexts; - }, - updateLastSeenAppVersion(state, appVersion) { - state.lastSeenAppVersion = appVersion; - userStore.lastSeenAppVersion = appVersion - }, - loadPreferences(state) { - this.commit("savePreferences", userStore.preferences); - }, - savePreferences(state, prefs) { - state.preferences = prefs; - userStore.preferences = prefs; - this.dispatch("destroyWebviews") - promiseIpc.send("preferencesSaved") - }, - hideMenu(state) { - state.hud.isMenuVisible = false; - }, - showMenu(state) { - state.hud.isMenuVisible = true; - } - }, - actions: { - async init({commit, getters}) { - commit("loadPreferences"); - await this.dispatch('refreshClusters', getters.currentWorkspace); - return true; - }, - async addSeenContexts({commit}, data) { - commit('storeSeenContexts', data); - }, - async updateLastSeenAppVersion({commit, state}) { - tracker.event("app", "whats-new-seen") - commit("updateLastSeenAppVersion", getAppVersion()) - } - }, - getters: { - seenContexts: state => state.seenContexts, - hud: state => state.hud, - isMenuVisible: function (state, getters) { - if (userStore.hasNewAppVersion) return false; - return state.hud.isMenuVisible; - }, - showWhatsNew: function (state) { - return userStore.hasNewAppVersion; - }, - preferences: state => state.preferences, - } -}); diff --git a/src/renderer/_vue/store/modules/clusters.ts b/src/renderer/_vue/store/modules/clusters.ts deleted file mode 100644 index 08a24a639d..0000000000 --- a/src/renderer/_vue/store/modules/clusters.ts +++ /dev/null @@ -1,299 +0,0 @@ -import Vue from "vue" -import { ActionTree, GetterTree, MutationTree } from "vuex" -import { PromiseIpc } from 'electron-promise-ipc' -import { ClusterModel } from "../../../../common/cluster-store" -import { Workspace } from "../../../../common/workspace-store" -import { tracker } from "../../../../common/tracker"; -import { FeatureStatusMap } from "../../../../main/feature"; -import { Kubectl } from "../../../../main/kubectl"; - -/** - * @deprecated - */ -export interface ClusterInfo extends ClusterModel { - url: string; - apiUrl: string; - online?: boolean; - accessible?: boolean; - failureReason?: string; - nodes?: number; - version?: string; - distribution?: string; - isAdmin?: boolean; - features?: FeatureStatusMap; - kubeCtl?: Kubectl; - contextName: string; -} - -export interface LensWebview { - id: string; - loaded: boolean; - webview?: HTMLIFrameElement; -} - -export interface ClusterState { - lenses: LensWebview[]; - clusters: ClusterInfo[]; -} - -const promiseIpc = new PromiseIpc({ maxTimeoutMs: 120000 }); - -const state: ClusterState = { - lenses: [], - clusters: [] -} - -const actions: ActionTree = { - async refreshClusters({ commit }, currentWorkspace: Workspace) { - const clusters: ClusterInfo[] = await promiseIpc.send('getClusters', currentWorkspace.id).catch((error: Error) => { - return false; - }) - if (!clusters) return false; - commit('updateClusters', clusters); - clusters.forEach((cluster: ClusterInfo) => { - const lens: LensWebview = { - id: cluster.id, - webview: null, - loaded: false - }; - commit("updateLens", lens) - }) - return true; - }, - async getCluster({ commit, getters }, id: string) { - const cluster: ClusterInfo = getters.clusters.find((c: ClusterInfo) => c.id === id) - if (!cluster) return null; - - const remoteCluster = await promiseIpc.send("getCluster", cluster.id) - if (!remoteCluster) return null; - - Object.assign(cluster, remoteCluster) - commit('updateCluster', cluster); - - return cluster; - }, - async refineCluster({ commit }, id: string) { - console.log("VUEX: ACTION: REFINE CLUSTER", id); - - const remoteCluster = await promiseIpc.send("getCluster", id) - if (!remoteCluster) return null; - - commit('updateCluster', remoteCluster); - - return remoteCluster; - }, - async stopCluster({ dispatch, getters }, id: string) { - const cluster: ClusterInfo = getters.clusters.find((c: ClusterInfo) => c.id === id) - if (!cluster) return; - - const lens = getters.lensById(cluster.id) - if (lens) { - await dispatch("detachWebview", lens) - await promiseIpc.send("stopCluster", cluster.id) - tracker.event("cluster", "stop") - } - }, - async removeCluster({ getters, dispatch }, id: string) { - const cluster: ClusterInfo = getters.clusters.find((c: ClusterInfo) => c.id === id) - if (!cluster) { - return - } - const lens = this.getters.lensById(cluster.id) - if (lens) { - dispatch("detachWebview", lens) - } - await promiseIpc.send("removeCluster", cluster.id).catch((error: Error) => { - return false; - }) - tracker.event("cluster", "remove"); - await dispatch("refreshClusters", getters.currentWorkspace) - return true; - }, - async addCluster({ commit, getters, dispatch }, data) { - const res = await promiseIpc.send("addCluster", data) - if (!res) return null; - - tracker.event("cluster", "add"); - commit('updateClusters', res.allClusters); - await dispatch("refreshClusters", getters.currentWorkspace); - return res.addedCluster; - }, - async clearClusters({ commit, getters, dispatch }) { - // todo: clean from main process as well? - getters.lenses.forEach((lens: LensWebview) => { - if (lens.webview) { - dispatch("detachWebview", lens) - } - }) - commit('updateLenses', []); - commit('updateClusters', []); - return true; - }, - - async uploadClusterIcon({ commit }, data) { - const res = await promiseIpc.send("saveClusterIcon", data) - tracker.event("cluster", "upload-icon") - if (res.cluster) commit("updateCluster", res.cluster) - return res - }, - - async resetClusterIcon({ commit }, data) { - const res = await promiseIpc.send("resetClusterIcon", data.clusterId) - tracker.event("cluster", "reset-icon") - if (res.cluster) commit("updateCluster", res.cluster) - return res - }, - - // For data structure see: cluster-manager.ts / FeatureInstallRequest - async installClusterFeature({ commit }, data) { - // Custom no timeout IPC as install can take very variable time - const ipc = new PromiseIpc(); - const response = await ipc.send('installFeature', data) - console.log("installer result:", response); - const cluster = await ipc.send('refreshCluster', data.clusterId) - - tracker.event("cluster", "install-feature") - commit("updateCluster", cluster) - return response - }, - // For data structure see: cluster-manager.ts / FeatureInstallRequest - async upgradeClusterFeature({ commit }, data) { - // Custom no timeout IPC as install can take very variable time - const ipc = new PromiseIpc(); - const response = await ipc.send('upgradeFeature', data) - console.log("upgrade result:", response); - const cluster = await ipc.send('refreshCluster', data.clusterId) - - tracker.event("cluster", "upgrade-feature") - commit("updateCluster", cluster) - return response - }, - // For data structure see: cluster-manager.ts / FeatureInstallRequest - async uninstallClusterFeature({ commit }, data) { - // Custom no timeout IPC as uninstall can take very variable time - const ipc = new PromiseIpc(); - const response = await ipc.send('uninstallFeature', data) - console.log("uninstaller result:", response); - const cluster = await ipc.send('refreshCluster', data.clusterId) - - tracker.event("cluster", "uninstall-feature") - commit("updateCluster", cluster) - return response - }, - - attachWebview({ commit }, lens: LensWebview) { - const container: any = document.getElementById("lens-container"); - if (!container || !lens.webview) { - return - } - container.style = "display: block;" - let webview = null - container.childNodes.forEach((child: any) => { - if (child === lens.webview) { - webview = child - } - }) - if (!webview) { - container.appendChild(lens.webview) - } - container.childNodes.forEach((child: any) => { - if (child !== lens.webview) { - child.style = "display: none;" - } else { - child.style = "top: 0; bottom: 20px; position: absolute; width: 100%;" - } - }) - promiseIpc.send("enableClusterSettingsMenuItem", lens.id) - }, - detachWebview({ commit }, lens: LensWebview) { - const container: any = document.getElementById("lens-container"); - if (!container) { - return - } - container.childNodes.forEach((child: any) => { - if (child === lens.webview) { - container.removeChild(lens.webview) - lens.webview = null - lens.loaded = false - commit("updateLens", lens) - } - }) - promiseIpc.send("disableClusterSettingsMenuItem") - }, - hideWebviews({ commit }) { - const container: any = document.getElementById("lens-container"); - if (!container) { - return - } - container.style = "display: none;" - container.childNodes.forEach((child: any) => { - child.style = "display: none;" - }) - promiseIpc.send("disableClusterSettingsMenuItem") - }, - destroyWebviews({ commit }) { - state.lenses.forEach((lens) => { - this.dispatch("detachWebview", lens) - }) - }, - storeCluster({ commit }, cluster: ClusterInfo) { - // clusterStore.saveCluster(cluster); - commit("updateCluster", cluster) - promiseIpc.send("clusterStored", cluster.id) - } -} - -const getters: GetterTree = { - clusters: state => state.clusters, - clusterById: state => (id: string) => { - const cluster = state.clusters.find(c => c.id === id); - if (cluster) { - return cluster; - } else { - return null; - } - }, - lenses: state => state.lenses, - lensById: state => (id: string) => { - const lens = state.lenses.find(c => c.id === id); - if (lens) { - return lens; - } else { - return null; - } - }, -} - -const mutations: MutationTree = { - updateClusters(state, clusters: ClusterInfo[]) { - Vue.set(state, 'clusters', [...clusters]) - }, - updateCluster(state, cluster) { - state.clusters.forEach((c, index) => { - if (c.id === cluster.id) { - Vue.set(state.clusters, index, cluster) - } - }) - }, - updateLenses(state, data) { - Vue.set(state, 'lenses', [...data]) - }, - updateLens(state, lens: LensWebview) { - const lensIndex = state.lenses.findIndex(l => l.id == lens.id); - if (lensIndex >= 0) { - state.lenses[lensIndex] = lens - Vue.set(state.lenses, lensIndex, lens) - } else { - console.log("update new lens") - state.lenses.push(lens) - } - } -} - -export default { - namespaced: false, - state, - getters, - mutations, - actions -} diff --git a/src/renderer/_vue/store/modules/helm-repos.ts b/src/renderer/_vue/store/modules/helm-repos.ts deleted file mode 100644 index 9f6ee669ca..0000000000 --- a/src/renderer/_vue/store/modules/helm-repos.ts +++ /dev/null @@ -1,54 +0,0 @@ -import Vue from "vue" -import { MutationTree, ActionTree, GetterTree } from "vuex" -import { HelmRepo, repoManager } from "../../../../main/helm/helm-repo-manager" - -export interface HelmRepoState { - repos: HelmRepo[]; -} - -const state: HelmRepoState = { - repos: [] -} - -const actions: ActionTree = { - async addHelmRepo({ commit }, data){ - const res = await repoManager.addRepo(data).catch((error: Error) => { - return false; - }) - if(!res) return false; - return await this.dispatch("refreshHelmRepos") - }, - async removeHelmRepo({ commit }, data){ - const res = await repoManager.removeRepo(data).catch((error: Error) => { - return false; - }) - if(!res) return false; - return await this.dispatch("refreshHelmRepos") - }, - async refreshHelmRepos({commit}){ - const repos: HelmRepo[] = await repoManager.repositories().catch((error: Error) => { - return null; - }) - if(!repos) return false; - commit('updateRepos', repos); - return true; - } -} - -const getters: GetterTree = { - repos: state => state.repos -} - -const mutations: MutationTree = { - updateRepos(state, repos: HelmRepo[]) { - Vue.set(state, 'repos', [...repos]) - }, -} - -export default { - namespaced: false, - state, - getters, - mutations, - actions -} diff --git a/src/renderer/_vue/store/modules/kube-contexts.js b/src/renderer/_vue/store/modules/kube-contexts.js deleted file mode 100644 index d1a8707024..0000000000 --- a/src/renderer/_vue/store/modules/kube-contexts.js +++ /dev/null @@ -1,47 +0,0 @@ -import * as k8s from "@kubernetes/client-node" -import { splitConfig, dumpConfigYaml } from "../../../../main/k8s" - -const state = { - availableKubeContexts: [] -} - -const actions = { - reloadAvailableKubeContexts({commit}, file) { - if(!file) return; - let kc = new k8s.KubeConfig(); - try { - kc.loadFromFile(file); - } catch (error) { - console.error("Failed to read default kubeconfig: " + error.message); - } - - // Remove the default setup the client makes if it does not find anything in the default config - // See: https://github.com/kubernetes-client/javascript/blob/2fc8fbc956ca89bf425ca3ea045d46ee7b75296b/src/config.ts#L253 - // It defaults to loadFromClusterAndUser() when no config file can be found - if(kc.currentContext === "loaded-context") { - kc = new k8s.KubeConfig(); - } - - commit("saveAvailableKubeContexts", splitConfig(kc)) - } -} - -const getters = { - availableKubeContexts: function(state){ - return state.availableKubeContexts - } -} - -const mutations = { - saveAvailableKubeContexts(state, contexts) { - state.availableKubeContexts = contexts - } -} - -export default { - namespaced: false, - state, - getters, - mutations, - actions -} diff --git a/src/renderer/_vue/store/modules/workspaces.ts b/src/renderer/_vue/store/modules/workspaces.ts deleted file mode 100644 index 4b5f93cb92..0000000000 --- a/src/renderer/_vue/store/modules/workspaces.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { ActionTree, GetterTree, MutationTree } from "vuex" -import { Workspace, workspaceStore } from "../../../../common/workspace-store" - -export interface WorkspaceState { - workspaces: Array; - currentWorkspace: Workspace; -} - -const state: WorkspaceState = { - workspaces: workspaceStore.workspaces, - currentWorkspace: workspaceStore.workspaces.find((w) => w.id === "default") -} - -const actions: ActionTree = {} - -const getters: GetterTree = { - workspaces: state => state.workspaces, - currentWorkspace: state => state.currentWorkspace, - workspaceById: state => (id: string) => { - return state.workspaces.find((ws) => ws.id == id) - } -} - -const mutations: MutationTree = { - setCurrentWorkspace(state, workspace: Workspace) { - state.currentWorkspace = workspace - }, - addWorkspace(state, workspace: Workspace) { - workspaceStore.saveWorkspace({ ...workspace }) - state.workspaces = workspaceStore.workspaces - }, - updateWorkspace(state, workspace: Workspace) { - workspaceStore.saveWorkspace({ ...workspace }) - state.workspaces = workspaceStore.workspaces - }, - removeWorkspace(state, workspace: Workspace) { - workspaceStore.removeWorkspace(workspace.id) - state.workspaces = workspaceStore.workspaces - } -} - -export default { - namespaced: false, - state, - getters, - mutations, - actions -}