CHE-3615: display system servers in the list of servers
Signed-off-by: Oleksii Kurinnyi <okurinnyi@codenvy.com>6.19.x
parent
09353bc7a4
commit
4d1bd9b0b2
|
|
@ -9,8 +9,8 @@
|
|||
* Codenvy, S.A. - initial API and implementation
|
||||
*/
|
||||
'use strict';
|
||||
import {IServer} from '../server';
|
||||
import {ListServersController} from '../list-servers.controller';
|
||||
import {IEnvironmentManagerMachineServer} from '../../../../../../components/api/environment/environment-manager-machine';
|
||||
|
||||
/**
|
||||
* @ngdoc controller
|
||||
|
|
@ -26,7 +26,7 @@ export class EditServerDialogController {
|
|||
|
||||
toEdit: string;
|
||||
servers: {
|
||||
[reference: string]: IServer
|
||||
[reference: string]: IEnvironmentManagerMachineServer
|
||||
};
|
||||
|
||||
usedPorts: number[];
|
||||
|
|
@ -53,8 +53,8 @@ export class EditServerDialogController {
|
|||
if (this.toEdit && serversCopy[this.toEdit]) {
|
||||
delete serversCopy[this.toEdit];
|
||||
}
|
||||
this.usedPorts = this.lodash.map(serversCopy, (server: IServer) => {
|
||||
return parseInt(<string>server.port, 10);
|
||||
this.usedPorts = this.lodash.map(serversCopy, (server: IEnvironmentManagerMachineServer) => {
|
||||
return parseInt(<string>server.port, 10);
|
||||
});
|
||||
this.usedReferences = Object.keys(serversCopy);
|
||||
|
||||
|
|
|
|||
|
|
@ -9,9 +9,9 @@
|
|||
* Codenvy, S.A. - initial API and implementation
|
||||
*/
|
||||
'use strict';
|
||||
import {IServer} from './server';
|
||||
import {IEnvironmentManagerMachineServer} from '../../../../../components/api/environment/environment-manager-machine';
|
||||
|
||||
interface IServerListItem extends IServer {
|
||||
interface IServerListItem extends IEnvironmentManagerMachineServer {
|
||||
reference: string;
|
||||
}
|
||||
|
||||
|
|
@ -32,9 +32,9 @@ export class ListServersController {
|
|||
} = {};
|
||||
serversSelectedNumber: number = 0;
|
||||
serversOrderBy: string = 'reference';
|
||||
server: IServer;
|
||||
server: IEnvironmentManagerMachineServer;
|
||||
servers: {
|
||||
[reference: string]: IServer
|
||||
[reference: string]: IEnvironmentManagerMachineServer
|
||||
};
|
||||
serversList: IServerListItem[];
|
||||
|
||||
|
|
@ -55,7 +55,7 @@ export class ListServersController {
|
|||
* Build list of servers
|
||||
*/
|
||||
buildServersList(): void {
|
||||
this.serversList = this.lodash.map(this.servers, (server: IServer, reference: string) => {
|
||||
this.serversList = this.lodash.map(this.servers, (server: IEnvironmentManagerMachineServer, reference: string) => {
|
||||
let serverItem: IServerListItem = angular.extend({}, {reference: reference}, server);
|
||||
serverItem.protocol = serverItem.protocol ? serverItem.protocol : 'http';
|
||||
return serverItem;
|
||||
|
|
@ -63,7 +63,7 @@ export class ListServersController {
|
|||
}
|
||||
|
||||
/**
|
||||
* Update port selected status
|
||||
* Update server selected status
|
||||
*/
|
||||
updateSelectedStatus(): void {
|
||||
this.serversSelectedNumber = 0;
|
||||
|
|
@ -80,7 +80,7 @@ export class ListServersController {
|
|||
/**
|
||||
* @param {string} name
|
||||
*/
|
||||
changePortSelection(name: string): void {
|
||||
changeServerSelection(name: string): void {
|
||||
this.serversSelectedStatus[name] = !this.serversSelectedStatus[name];
|
||||
this.updateSelectedStatus();
|
||||
}
|
||||
|
|
@ -90,28 +90,32 @@ export class ListServersController {
|
|||
*/
|
||||
changeBulkSelection(): void {
|
||||
if (this.isBulkChecked) {
|
||||
this.deselectAllPorts();
|
||||
this.deselectAllServers();
|
||||
this.isBulkChecked = false;
|
||||
return;
|
||||
}
|
||||
this.selectAllPorts();
|
||||
this.selectAllServers();
|
||||
this.isBulkChecked = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check all ports in list
|
||||
* Check all servers in list
|
||||
*/
|
||||
selectAllPorts(): void {
|
||||
this.serversSelectedNumber = this.serversList.length;
|
||||
selectAllServers(): void {
|
||||
this.serversSelectedNumber = 0;
|
||||
this.serversList.forEach((serverListItem: IServerListItem) => {
|
||||
if (serverListItem.userScope === false) {
|
||||
return;
|
||||
}
|
||||
this.serversSelectedNumber++;
|
||||
this.serversSelectedStatus[serverListItem.reference] = true;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Uncheck all ports in list
|
||||
* Uncheck all servers in list
|
||||
*/
|
||||
deselectAllPorts(): void {
|
||||
deselectAllServers(): void {
|
||||
this.serversSelectedStatus = {};
|
||||
this.serversSelectedNumber = 0;
|
||||
}
|
||||
|
|
@ -124,7 +128,11 @@ export class ListServersController {
|
|||
* @param {string} protocol
|
||||
*/
|
||||
addServer(reference: string, port: number, protocol: string): void {
|
||||
this.servers[reference] = {'port': port, 'protocol': protocol};
|
||||
this.servers[reference] = {
|
||||
port: port,
|
||||
protocol: protocol,
|
||||
userScope: true
|
||||
};
|
||||
|
||||
this.updateSelectedStatus();
|
||||
this.serversOnChange();
|
||||
|
|
@ -146,7 +154,7 @@ export class ListServersController {
|
|||
}
|
||||
|
||||
/**
|
||||
* Show dialog to add new or edit existing port
|
||||
* Show dialog to add new or edit existing server
|
||||
*
|
||||
* @param {MouseEvent} $event
|
||||
* @param {string=} reference
|
||||
|
|
@ -168,14 +176,14 @@ export class ListServersController {
|
|||
}
|
||||
|
||||
/**
|
||||
* Removes selected ports
|
||||
* Removes selected servers
|
||||
*/
|
||||
deleteSelectedPorts(): void {
|
||||
deleteSelectedServers(): void {
|
||||
this.showDeleteConfirmation(this.serversSelectedNumber).then(() => {
|
||||
this.lodash.forEach(this.serversSelectedStatus, (server: IServer, name: string) => {
|
||||
this.lodash.forEach(this.serversSelectedStatus, (server: IEnvironmentManagerMachineServer, name: string) => {
|
||||
delete this.servers[name];
|
||||
});
|
||||
this.deselectAllPorts();
|
||||
this.deselectAllServers();
|
||||
this.isBulkChecked = false;
|
||||
this.serversOnChange();
|
||||
this.buildServersList();
|
||||
|
|
@ -183,20 +191,20 @@ export class ListServersController {
|
|||
}
|
||||
|
||||
/**
|
||||
* Show confirmation popup before port to delete
|
||||
* Show confirmation popup before server to delete
|
||||
* @param {number} numberToDelete
|
||||
* @returns {angular.IPromise<any>}
|
||||
*/
|
||||
showDeleteConfirmation(numberToDelete: number): ng.IPromise<any> {
|
||||
let confirmTitle = 'Would you like to delete ';
|
||||
if (numberToDelete > 1) {
|
||||
confirmTitle += 'these ' + numberToDelete + ' ports?';
|
||||
confirmTitle += 'these ' + numberToDelete + ' servers?';
|
||||
} else {
|
||||
confirmTitle += 'this selected port?';
|
||||
confirmTitle += 'this selected server?';
|
||||
}
|
||||
let confirm = this.$mdDialog.confirm()
|
||||
.title(confirmTitle)
|
||||
.ariaLabel('Remove port')
|
||||
.ariaLabel('Remove server')
|
||||
.ok('Delete!')
|
||||
.cancel('Cancel')
|
||||
.clickOutsideToClose(true);
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@
|
|||
|
||||
<che-list flex>
|
||||
<che-list-item ng-mouseover="hover=true" ng-mouseout="hover=false"
|
||||
ng-repeat="server in listServersController.serversList | orderBy:listServersController.serversOrderBy">
|
||||
ng-repeat="server in listServersController.serversList | orderBy:['-userScope', listServersController.serversOrderBy]">
|
||||
<div flex="100"
|
||||
layout="row"
|
||||
layout-align="start stretch"
|
||||
|
|
@ -64,6 +64,7 @@
|
|||
class="che-checkbox-area">
|
||||
<che-list-item-checked ng-model="listServersController.serversSelectedStatus[server.reference]"
|
||||
che-aria-label-checkbox="Port {{server.reference}}"
|
||||
ng-if="server.userScope"
|
||||
ng-click="listServersController.updateSelectedStatus()"></che-list-item-checked>
|
||||
</div>
|
||||
<div flex
|
||||
|
|
@ -85,12 +86,13 @@
|
|||
</div>
|
||||
<div flex="50"
|
||||
class="che-list-item-name">
|
||||
<span class="che-hover">
|
||||
<a href="{{server.runtimeUrl}}" target="_blank">{{server.runtimeUrl}}</a>
|
||||
<span class="che-hover" ng-if="server.runtime">
|
||||
<a href="{{server.runtime.url}}" target="_blank">{{server.runtime.url}}</a>
|
||||
</span>
|
||||
</div>
|
||||
<div flex="10">
|
||||
<div class="che-list-actions"
|
||||
ng-if="server.userScope"
|
||||
ng-click="listServersController.showEditDialog($event,server.reference)">
|
||||
<i class="fa fa-pencil" tooltip="Edit"></i>
|
||||
</div>
|
||||
|
|
@ -111,7 +113,7 @@
|
|||
<div flex-offset="5" ng-if="listServersController.serversList.length > 0">
|
||||
<che-button-primary-flat ng-disabled="(listServersController.serversSelectedNumber === 0)"
|
||||
che-button-title="Delete" name="deleteButton"
|
||||
ng-click="listServersController.deleteSelectedPorts()"></che-button-primary-flat>
|
||||
ng-click="listServersController.deleteSelectedServers()"></che-button-primary-flat>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,20 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2015-2017 Codenvy, S.A.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/epl-v10.html
|
||||
*
|
||||
* Contributors:
|
||||
* Codenvy, S.A. - initial API and implementation
|
||||
*/
|
||||
export interface IServer {
|
||||
port: number|string;
|
||||
protocol: string;
|
||||
properties?: {
|
||||
[propName: string]: string
|
||||
};
|
||||
runtimeUrl?: string;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -11,7 +11,7 @@
|
|||
'use strict';
|
||||
|
||||
import {ComposeEnvironmentManager} from './compose-environment-manager';
|
||||
import {IEnvironmentManagerMachine} from './environment-manager-machine';
|
||||
import {IEnvironmentManagerMachine, IEnvironmentManagerMachineServer} from './environment-manager-machine';
|
||||
|
||||
/**
|
||||
* Test the environment manager for compose based recipes
|
||||
|
|
@ -61,7 +61,11 @@ describe('ComposeEnvironmentManager', () => {
|
|||
});
|
||||
let servers = envManager.getServers(machine);
|
||||
|
||||
let expectedServers = environment.machines[machineName].servers;
|
||||
let expectedServers = <{[serverRef: string]: IEnvironmentManagerMachineServer}> environment.machines[machineName].servers;
|
||||
Object.keys(expectedServers).forEach((serverRef: string) => {
|
||||
expectedServers[serverRef].userScope = true;
|
||||
});
|
||||
|
||||
expect(servers).toEqual(expectedServers);
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -69,6 +69,10 @@ describe('DockerImageEnvironmentManager', () => {
|
|||
let servers = envManager.getServers(machines[0]);
|
||||
|
||||
let expectedServers = environment.machines['dev-machine'].servers;
|
||||
Object.keys(expectedServers).forEach((serverRef: string) => {
|
||||
expectedServers[serverRef].userScope = true;
|
||||
});
|
||||
|
||||
expect(servers).toEqual(expectedServers);
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ export interface IEnvironmentManagerMachine extends che.IEnvironmentMachine {
|
|||
};
|
||||
}
|
||||
|
||||
interface IEnvironmentManagerMachineServer extends che.IEnvironmentMachineServer {
|
||||
runtimeUrl?: string;
|
||||
export interface IEnvironmentManagerMachineServer extends che.IEnvironmentMachineServer {
|
||||
userScope?: boolean; // indicates a server added by user
|
||||
runtime?: che.IWorkspaceRuntimeMachineServer;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
* Codenvy, S.A. - initial API and implementation
|
||||
*/
|
||||
'use strict';
|
||||
import {IEnvironmentManagerMachine} from './environment-manager-machine';
|
||||
import {IEnvironmentManagerMachine, IEnvironmentManagerMachineServer} from './environment-manager-machine';
|
||||
|
||||
/**
|
||||
* This is base class, which describes the environment manager.
|
||||
|
|
@ -58,12 +58,12 @@ export class EnvironmentManager {
|
|||
let machines: IEnvironmentManagerMachine[] = [];
|
||||
runtime.machines.forEach((runtimeMachine: any) => {
|
||||
let name = runtimeMachine.config.name,
|
||||
machine: any = {
|
||||
name: name,
|
||||
runtime: {
|
||||
servers: runtimeMachine.runtime.servers
|
||||
}
|
||||
};
|
||||
machine: any = {name: name};
|
||||
if (runtimeMachine.runtime && runtimeMachine.runtime.servers) {
|
||||
machine.runtime = {
|
||||
servers: runtimeMachine.runtime.servers
|
||||
};
|
||||
}
|
||||
machines.push(machine);
|
||||
});
|
||||
|
||||
|
|
@ -161,27 +161,61 @@ export class EnvironmentManager {
|
|||
}
|
||||
}
|
||||
|
||||
getServers(machine: IEnvironmentManagerMachine): {[serverName: string]: che.IEnvironmentMachineServer} {
|
||||
getServers(machine: IEnvironmentManagerMachine): {[serverName: string]: IEnvironmentManagerMachineServer} {
|
||||
if (!machine.servers) {
|
||||
return {};
|
||||
}
|
||||
|
||||
Object.keys(machine.servers).forEach((serverName: string) => {
|
||||
machine.servers[serverName].userScope = true;
|
||||
});
|
||||
|
||||
if (!machine.runtime) {
|
||||
return machine.servers;
|
||||
}
|
||||
|
||||
Object.keys(machine.runtime.servers).forEach((serverName: string) => {
|
||||
let runtimeServer = machine.runtime.servers[serverName];
|
||||
if (machine.servers[runtimeServer.ref]) {
|
||||
machine.servers[runtimeServer.ref].runtimeUrl = runtimeServer.url;
|
||||
Object.keys(machine.runtime.servers).forEach((runtimeServerName: string) => {
|
||||
let runtimeServer: che.IWorkspaceRuntimeMachineServer = machine.runtime.servers[runtimeServerName],
|
||||
runtimeServerReference = runtimeServer.ref;
|
||||
|
||||
if (machine.servers[runtimeServerReference]) {
|
||||
machine.servers[runtimeServerReference].runtime = runtimeServer;
|
||||
} else {
|
||||
let port;
|
||||
if (runtimeServer.port) {
|
||||
port = runtimeServer.port;
|
||||
} else {
|
||||
[port, ] = runtimeServerName.split('/');
|
||||
}
|
||||
machine.servers[runtimeServerReference] = {
|
||||
userScope: false,
|
||||
port: port,
|
||||
protocol: runtimeServer.protocol,
|
||||
runtime: runtimeServer
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
return machine.servers;
|
||||
}
|
||||
|
||||
setServers(machine: IEnvironmentManagerMachine, servers: {[serverRef: string]: che.IEnvironmentMachineServer}): void {
|
||||
machine.servers = angular.copy(servers);
|
||||
setServers(machine: IEnvironmentManagerMachine, _servers: {[serverRef: string]: IEnvironmentManagerMachineServer}): void {
|
||||
let servers = angular.copy(_servers);
|
||||
|
||||
Object.keys(_servers).forEach((serverName: string) => {
|
||||
// remove system defined servers
|
||||
if (!_servers[serverName].userScope) {
|
||||
delete servers[serverName];
|
||||
return;
|
||||
}
|
||||
|
||||
// remove unnecessary keys from user defined servers
|
||||
let server = servers[serverName];
|
||||
delete server.userScope;
|
||||
delete server.runtime;
|
||||
});
|
||||
|
||||
machine.servers = servers;
|
||||
}
|
||||
|
||||
getAgents(machine: IEnvironmentManagerMachine): string[] {
|
||||
|
|
|
|||
|
|
@ -78,6 +78,7 @@ declare namespace _che {
|
|||
[propName: string]: string | number;
|
||||
};
|
||||
config: IWorkspaceConfig;
|
||||
runtime?: IWorkspaceRuntime;
|
||||
}
|
||||
|
||||
export interface IWorkspaceConfig {
|
||||
|
|
@ -121,6 +122,38 @@ declare namespace _che {
|
|||
};
|
||||
}
|
||||
|
||||
export interface IWorkspaceRuntime {
|
||||
activeEnv: string;
|
||||
devMachine: IWorkspaceRuntimeMachine;
|
||||
links: any[];
|
||||
machines: IWorkspaceRuntimeMachine[];
|
||||
rootFolder: string;
|
||||
}
|
||||
|
||||
export interface IWorkspaceRuntimeMachine {
|
||||
config: any;
|
||||
envName: string;
|
||||
id: string;
|
||||
links: any[];
|
||||
owner: string;
|
||||
runtime: {
|
||||
envVariables: { [envVarName: string]: string };
|
||||
properties: { [propName: string]: string };
|
||||
servers: { [serverName: string]: IWorkspaceRuntimeMachineServer };
|
||||
};
|
||||
status: string;
|
||||
workspaceId: string;
|
||||
}
|
||||
|
||||
export interface IWorkspaceRuntimeMachineServer {
|
||||
address: string;
|
||||
properties: { [propName: string]: string; };
|
||||
protocol: string;
|
||||
port: string;
|
||||
ref: string;
|
||||
url: string;
|
||||
}
|
||||
|
||||
export interface IProject {
|
||||
name: string;
|
||||
displayName: string;
|
||||
|
|
|
|||
Loading…
Reference in New Issue