From 35a5ea6771cc28eee7506acaf132e17cc93bf51a Mon Sep 17 00:00:00 2001 From: Oleksii Orel Date: Sat, 17 Aug 2019 20:12:45 +0300 Subject: [PATCH] add the jwt-proxy memory as a part of stack's globalMemoryLimit Signed-off-by: Oleksii Orel --- .../list-stacks/list-stacks.controller.ts | 9 +--- .../devfile-selector/devfile-selector.html | 2 +- .../api/devfile-registry.factory.ts | 50 +++++++++++++++++-- 3 files changed, 50 insertions(+), 11 deletions(-) diff --git a/dashboard/src/app/stacks/list-stacks/list-stacks.controller.ts b/dashboard/src/app/stacks/list-stacks/list-stacks.controller.ts index bb9299c0261..ebf2d68c28f 100644 --- a/dashboard/src/app/stacks/list-stacks/list-stacks.controller.ts +++ b/dashboard/src/app/stacks/list-stacks/list-stacks.controller.ts @@ -24,10 +24,9 @@ const DEFAULT_COLUMN = 'displayName'; */ export class ListStacksController { - static $inject = ['$scope', '$filter', 'cheWorkspace', '$location', 'devfileRegistry', 'cheListHelperFactory']; + static $inject = ['$scope', 'cheWorkspace', '$location', 'devfileRegistry', 'cheListHelperFactory']; private $location: ng.ILocationService; - private $filter: ng.IFilterService; private cheWorkspace: CheWorkspace; private devfileRegistry: DevfileRegistry; @@ -44,12 +43,10 @@ export class ListStacksController { * Default constructor that is using resource */ constructor($scope: ng.IScope, - $filter: ng.IFilterService, cheWorkspace: CheWorkspace, $location: ng.ILocationService, devfileRegistry: DevfileRegistry, cheListHelperFactory: che.widget.ICheListHelperFactory) { - this.$filter = $filter; this.$location = $location; this.cheWorkspace = cheWorkspace; this.devfileRegistry = devfileRegistry; @@ -73,11 +70,9 @@ export class ListStacksController { this.pluginRegistryUrl = this.cheWorkspace.getWorkspaceSettings().cheWorkspaceDevfileRegistryUrl; this.devfileRegistry.fetchDevfiles(this.pluginRegistryUrl).then((data: Array) => { const devfileMetaDatas = data.map((devfileMetaData: IDevfileMetaData) => { - const globalMemoryLimit = this.$filter('changeMemoryUnit')(devfileMetaData.globalMemoryLimit, ['MB','GB']); - devfileMetaData.globalMemoryLimit = globalMemoryLimit; // todo remove this after cheListHelper improvement - devfileMetaData[this.searchBy]= `${devfileMetaData.displayName} ${devfileMetaData.description} ${globalMemoryLimit}`; + devfileMetaData[this.searchBy]= `${devfileMetaData.displayName} ${devfileMetaData.description} ${devfileMetaData.globalMemoryLimit}`; return devfileMetaData; }); diff --git a/dashboard/src/app/workspaces/create-workspace/devfile-selector/devfile-selector.html b/dashboard/src/app/workspaces/create-workspace/devfile-selector/devfile-selector.html index 1fb9535a056..461f0264140 100644 --- a/dashboard/src/app/workspaces/create-workspace/devfile-selector/devfile-selector.html +++ b/dashboard/src/app/workspaces/create-workspace/devfile-selector/devfile-selector.html @@ -56,7 +56,7 @@
- {{devfile.globalMemoryLimit | changeMemoryUnit:['MB','GB']}} + {{devfile.globalMemoryLimit}}
diff --git a/dashboard/src/components/api/devfile-registry.factory.ts b/dashboard/src/components/api/devfile-registry.factory.ts index 79681b33808..d7148bd315c 100644 --- a/dashboard/src/components/api/devfile-registry.factory.ts +++ b/dashboard/src/components/api/devfile-registry.factory.ts @@ -10,6 +10,7 @@ * Red Hat, Inc. - initial API and implementation */ 'use strict'; +import {CheKeycloak} from './che-keycloak.factory'; export interface IDevfileMetaData { displayName: string; @@ -20,33 +21,54 @@ export interface IDevfileMetaData { tags: Array; } +enum MemoryUnit { 'B', 'Ki', 'Mi', 'Gi' } + +const DEFAULT_JWTPROXY_MEMORY_LIMIT = '128Mi';// default value for che.server.secure_exposer.jwtproxy.memory_limit /** * This class is handling devfile registry api * @author Ann Shumilova */ export class DevfileRegistry { - static $inject = ['$http']; + static $inject = ['$http', '$filter', 'cheKeycloak']; /** * Angular Http service. */ private $http: ng.IHttpService; + private $filter: ng.IFilterService; + private devfilesMap: Map; + private isKeycloackPresent: boolean; + + private jwtproxyMemoryLimitNumber: number; + /** * Default constructor that is using resource */ - constructor($http: ng.IHttpService) { + constructor($http: ng.IHttpService, $filter: ng.IFilterService, cheKeycloak: CheKeycloak) { this.$http = $http; + this.$filter = $filter; + this.devfilesMap = new Map(); + this.isKeycloackPresent = cheKeycloak.isPresent(); + this.jwtproxyMemoryLimitNumber = this.getMemoryLimit(DEFAULT_JWTPROXY_MEMORY_LIMIT); } fetchDevfiles(location: string): ng.IPromise> { let promise = this.$http({ 'method': 'GET', 'url': location + '/devfiles/index.json' }); return promise.then((result: any) => { - return result.data; + return result.data.map((devfileMetaData: IDevfileMetaData) => { + let globalMemoryLimitNumber = this.getMemoryLimit(devfileMetaData.globalMemoryLimit); + // todo remove this after fixing https://github.com/eclipse/che/issues/11424 + if (this.isKeycloackPresent) { + globalMemoryLimitNumber += this.jwtproxyMemoryLimitNumber; + } + devfileMetaData.globalMemoryLimit = this.$filter('changeMemoryUnit')(globalMemoryLimitNumber, ['B','GB']); + return devfileMetaData; + }); }); } @@ -86,4 +108,26 @@ export class DevfileRegistry { } catch (e) { } } + + /** + * Returns memory limit. + * @param {string} memoryLimit + * @returns {number} + */ + getMemoryLimit(memoryLimit: string): number { + if (!memoryLimit) { + return -1; + } + const regExpExecArray = /^([0-9]+)([a-zA-Z]{1,3})$/.exec(memoryLimit); + if (regExpExecArray === null) { + return -1; + } + const [, memoryLimitNumber, memoryLimitUnit] = regExpExecArray; + const power = MemoryUnit[memoryLimitUnit]; + if (!power) { + return -1; + } + + return parseInt(memoryLimitNumber, 10) * Math.pow(1024, power); + } }