You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dlab.apache.org by dg...@apache.org on 2020/07/15 14:16:28 UTC
[incubator-dlab] 01/02: [DLAB-1945]: Allowed only one cluster for
notebook
This is an automated email from the ASF dual-hosted git repository.
dgnatyshyn pushed a commit to branch DLAB-1945
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git
commit 6f77a5afccdfc514d9a0d5c8f698a6b633ecb480
Author: Dmytro_Gnatyshyn <di...@ukr.net>
AuthorDate: Wed Jul 15 17:13:07 2020 +0300
[DLAB-1945]: Allowed only one cluster for notebook
---
.../management-grid/management-grid.component.html | 4 +-
.../cluster-details/cluster-details.component.html | 14 ++++--
.../cluster-details/cluster-details.component.ts | 2 +-
...utational-resource-create-dialog.component.html | 6 +--
...mputational-resource-create-dialog.component.ts | 5 --
.../detail-dialog/detail-dialog.component.html | 2 +-
.../resources-grid/resources-grid.component.html | 56 +++++++++++++++-------
.../resources-grid/resources-grid.component.scss | 9 ++--
.../resources-grid/resources-grid.component.ts | 7 ++-
.../resources-grid/resources-grid.model.ts | 6 ++-
.../notification-dialog.component.ts | 3 +-
11 files changed, 71 insertions(+), 43 deletions(-)
diff --git a/services/self-service/src/main/resources/webapp/src/app/administration/management/management-grid/management-grid.component.html b/services/self-service/src/main/resources/webapp/src/app/administration/management/management-grid/management-grid.component.html
index 6182843..bf3ef16 100644
--- a/services/self-service/src/main/resources/webapp/src/app/administration/management/management-grid/management-grid.component.html
+++ b/services/self-service/src/main/resources/webapp/src/app/administration/management/management-grid/management-grid.component.html
@@ -129,7 +129,7 @@
<ng-container matColumnDef="resources">
<th mat-header-cell *matHeaderCellDef class="resources label-header">
- <span class="label">Computational resources</span>
+ <span class="label">Compute</span>
<button mat-icon-button aria-label="More" class="ar" (click)="toggleFilterRow()">
<i class="material-icons">
<span *ngIf="filtering && filterForm.resources.length > 0 && !collapsedFilterRow">filter_list</span>
@@ -195,7 +195,7 @@
</div>
</li>
<li *ngIf="element.name !== 'edge node'"
- matTooltip="Unable to terminate notebook because at least one computational resource is in progress"
+ matTooltip="Unable to terminate notebook because at least one compute is in progress"
matTooltipPosition="above" [matTooltipDisabled]="!isResourcesInProgress(element)">
<div (click)="toggleResourceAction(element, 'terminate')"
[ngClass]="{'not-allowed' : element.status !== 'running' && element.status !== 'stopped' || isResourcesInProgress(element)}">
diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/computational/cluster-details/cluster-details.component.html b/services/self-service/src/main/resources/webapp/src/app/resources/computational/cluster-details/cluster-details.component.html
index 2d7fd60..1680a74 100644
--- a/services/self-service/src/main/resources/webapp/src/app/resources/computational/cluster-details/cluster-details.component.html
+++ b/services/self-service/src/main/resources/webapp/src/app/resources/computational/cluster-details/cluster-details.component.html
@@ -109,13 +109,17 @@
matTooltip="{{item.url}}"
matTooltipPosition="above"
(mouseover)="showCopyIcon(item.description)"
- class="spark-url none-select"
+ class="spark-url"
(contextmenu)="false"
>{{ item.url }}</a>
- <span (click)="logAction(resource, environment, 'copy');$event.stopPropagation()" *ngIf="isCopyIconVissible[item.description]" [matTooltip]="isCopied ? 'Copy bucket name' : 'Copied'" matTooltipPosition="above" class="copy-icon-wrapper">
- <span class="link-icon" (click)="copyBucketName(item.url)" >
- <span _ngcontent-xpv-c19="" class="material-icons" (click)="this.isCopied = false">content_copy</span>
- </span>
+ <span
+ (click)="logAction(resource, environment, 'copy');$event.stopPropagation()"
+ *ngIf="isCopyIconVissible[item.description]"
+ [matTooltip]="isCopied ? 'Copy ' + item.description : 'Copied'" matTooltipPosition="above" class="copy-icon-wrapper"
+ >
+ <span class="link-icon" (click)="copyBucketName(item.url)" >
+ <span _ngcontent-xpv-c19="" class="material-icons" (click)="this.isCopied = false">content_copy</span>
+ </span>
</span>
</p>
</div>
diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/computational/cluster-details/cluster-details.component.ts b/services/self-service/src/main/resources/webapp/src/app/resources/computational/cluster-details/cluster-details.component.ts
index 46198bc..e2892b5 100644
--- a/services/self-service/src/main/resources/webapp/src/app/resources/computational/cluster-details/cluster-details.component.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/resources/computational/cluster-details/cluster-details.component.ts
@@ -49,7 +49,7 @@ export class DetailComputationalResourcesComponent implements OnInit {
config: Array<{}> = [];
public configurationForm: FormGroup;
isCopyIconVissible: any = {};
- isCopied: boolean;
+ isCopied: boolean = true;
constructor(
@Inject(MAT_DIALOG_DATA) public data: any,
diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/computational/computational-resource-create-dialog/computational-resource-create-dialog.component.html b/services/self-service/src/main/resources/webapp/src/app/resources/computational/computational-resource-create-dialog/computational-resource-create-dialog.component.html
index 1591221..94265fd 100644
--- a/services/self-service/src/main/resources/webapp/src/app/resources/computational/computational-resource-create-dialog/computational-resource-create-dialog.component.html
+++ b/services/self-service/src/main/resources/webapp/src/app/resources/computational/computational-resource-create-dialog/computational-resource-create-dialog.component.html
@@ -19,7 +19,7 @@
<div class="create-cluster" id="dialog-box">
<header class="dialog-header">
- <h4 class="modal-title">Add computational resources</h4>
+ <h4 class="modal-title">Add compute</h4>
<button type="button" class="close" (click)="dialogRef.close()">×</button>
</header>
<div class="dialog-content selection">
@@ -233,9 +233,9 @@
</div>
<ng-template #placeholder>
<div *ngIf="!loading && !clusterTypes?.length" class="info message">
- Computational resource creations are not available.<br>Please, check your permissions.</div>
+ Compute creations are not available.<br>Please, check your permissions.</div>
<div *ngIf="loading" class="info message">
- Computational resource data is processing
+ Compute data is processing
<mat-progress-bar mode="indeterminate"></mat-progress-bar>
</div>
</ng-template>
diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/computational/computational-resource-create-dialog/computational-resource-create-dialog.component.ts b/services/self-service/src/main/resources/webapp/src/app/resources/computational/computational-resource-create-dialog/computational-resource-create-dialog.component.ts
index 189d6ff..8968a3a 100644
--- a/services/self-service/src/main/resources/webapp/src/app/resources/computational/computational-resource-create-dialog/computational-resource-create-dialog.component.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/resources/computational/computational-resource-create-dialog/computational-resource-create-dialog.component.ts
@@ -248,11 +248,6 @@ export class ComputationalResourceCreateDialogComponent implements OnInit {
this.userResourceService.getComputationalTemplates(project, endpoint, provider).subscribe(
clusterTypes => {
this.clusterTypes = clusterTypes.templates;
- if (this.notebook_instance.resources.some(v => v.image === 'docker.dlab-dataengine-service'
- && v.status !== 'terminated'
- && v.status !== 'failed')) {
- this.clusterTypes = this.clusterTypes.filter(v => v.image !== 'docker.dlab-dataengine-service');
- }
this.userComputations = clusterTypes.user_computations;
this.projectComputations = clusterTypes.project_computations;
diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/detail-dialog/detail-dialog.component.html b/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/detail-dialog/detail-dialog.component.html
index 7aa8a50..b408d98 100644
--- a/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/detail-dialog/detail-dialog.component.html
+++ b/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/detail-dialog/detail-dialog.component.html
@@ -71,7 +71,7 @@
>
{{item.url}}
</a>
- <span (click)="logAction(notebook.name, item.description, 'Copy');$event.stopPropagation()" *ngIf="isCopyIconVissible[item.description]" [matTooltip]="isCopied ? 'Copy bucket name' : 'Copied'" matTooltipPosition="above" class="copy-icon-wrapper">
+ <span (click)="logAction(notebook.name, item.description, 'Copy');$event.stopPropagation()" *ngIf="isCopyIconVissible[item.description]" [matTooltip]="isCopied ? 'Copy ' + item.description + ' url': 'Copied'" matTooltipPosition="above" class="copy-icon-wrapper">
<span class="link-icon" (click)="copyBucketName(item.url)" >
<span _ngcontent-xpv-c19="" class="material-icons" (click)="this.isCopied = false">content_copy</span>
</span>
diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.component.html b/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.component.html
index 0edb5e7..d45e10b 100644
--- a/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.component.html
+++ b/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.component.html
@@ -159,7 +159,7 @@
&& element.status !== 'creating image'">
<li
*ngIf="element.status !== 'stopped' && element.status !== 'stopping' && element.status !== 'starting' && element.status !== 'creating image' && element.status.toLowerCase() !== 'reconfiguring'"
- matTooltip="Unable to stop notebook because at least one computational resource is in progress"
+ matTooltip="Unable to stop notebook because at least one compute is in progress"
matTooltipPosition="above" [matTooltipDisabled]="!isResourcesInProgress(element)">
<div (click)="exploratoryAction(element, 'stop')"
[ngClass]="{'not-allowed': isResourcesInProgress(element) }">
@@ -179,7 +179,7 @@
</div>
</li>
<li *ngIf="element.status.toLowerCase() === 'running' || element.status.toLowerCase() === 'stopped'"
- matTooltip="Unable to terminate notebook because at least one computational resource is in progress"
+ matTooltip="Unable to terminate notebook because at least one compute is in progress"
matTooltipPosition="above" [matTooltipDisabled]="!isResourcesInProgress(element)">
<div (click)="exploratoryAction(element, 'terminate')"
[ngClass]="{'not-allowed': isResourcesInProgress(element) }">
@@ -187,33 +187,55 @@
<span>Terminate</span>
</div>
</li>
- <li (click)="exploratoryAction(element, 'deploy')"
- *ngIf="element.status === 'running' && element.image !== 'docker.dlab-superset' && element.image !== 'docker.dlab-jupyterlab'">
- <i class="material-icons">memory</i>
- <span>Add compute</span>
+ <li
+ *ngIf="element.status === 'running' && element.image !== 'docker.dlab-superset' && element.image !== 'docker.dlab-jupyterlab'"
+ matTooltip="Only one compute can be associated with analytical tool at a time"
+ matTooltipPosition="above" [matTooltipDisabled]="!element.activeCompute"
+ [matTooltipClass]="'bucket-item-tooltip'"
+ [ngClass]="{'not-allow': element.activeCompute }"
+ >
+ <div
+ (click)="exploratoryAction(element, 'deploy')"
+ [ngClass]="{'not-allowed': element.activeCompute }"
+ >
+ <i class="material-icons">memory</i>
+ <span>Add compute</span>
+ </div>
</li>
<li (click)="exploratoryAction(element, 'schedule')" *ngIf="element.status.toLowerCase() === 'running'
|| element.status.toLowerCase() === 'stopped'">
- <i class="material-icons">schedule</i>
- <span>Scheduler</span>
+ <div>
+ <i class="material-icons">schedule</i>
+ <span>Scheduler</span>
+ </div>
</li>
</div>
<li (click)="exploratoryAction(element, 'ami')"
*ngIf="element.status === 'running' && element.image !== 'docker.dlab-superset' && element.image !== 'docker.dlab-jupyterlab'">
- <i class="material-icons">view_module</i>
- <span>Create AMI</span>
+ <div>
+ <i class="material-icons">view_module</i>
+ <span>Create AMI</span>
+ </div>
</li>
<li (click)="exploratoryAction(element, 'install')"
*ngIf="element.image !== 'docker.dlab-superset' && element.image !== 'docker.dlab-jupyterlab'">
- <i class="material-icons">developer_board</i>
- <span>Manage libraries</span>
+ <div>
+ <i class="material-icons">developer_board</i>
+ <span>Manage libraries</span>
+ </div>
</li>
<li *ngIf="element.status === 'running'" (click)="logAction(element.name)">
- <a target="_blank" [attr.href]="'/#/terminal/' + element.private_ip + '/' + element.endpoint"
- class="navigate">
- <i class="material-icons">laptop</i>
- <span>Open terminal</span>
- </a>
+ <div>
+ <a
+ target="_blank"
+ [attr.href]="'/#/terminal/' + element.private_ip + '/' + element.endpoint"
+ class="navigate"
+ (contextmenu)="false"
+ >
+ <i class="material-icons">laptop</i>
+ <span>Open terminal</span>
+ </a>
+ </div>
</li>
</ul>
</bubble-up>
diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.component.scss b/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.component.scss
index b65e3e4..9f8d9f9 100644
--- a/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.component.scss
+++ b/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.component.scss
@@ -330,11 +330,14 @@ tr.detail-row {
.data-grid .list-menu li {
font-size: 14px;
border-bottom: 1px solid #edf1f5;
- padding: 8px 15px;
+ padding-bottom: 5px;
cursor: pointer;
margin: 5px -5px;
color: #577289;
transition: all 0.45s ease-in-out;
+ div{
+ padding: 8px 15px;
+ }
}
.data-grid .list-menu a.navigate {
@@ -349,8 +352,8 @@ tr.detail-row {
vertical-align: bottom;
}
-.data-grid .list-menu li:hover,
-.data-grid .list-menu li:hover a {
+.data-grid .list-menu li:not(.not-allow):hover,
+.data-grid .list-menu li:not(.not-allow):hover a {
background: none !important;
color: #36afd5;
}
diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.component.ts b/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.component.ts
index 2136151..e299d04 100644
--- a/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.component.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.component.ts
@@ -416,7 +416,10 @@ export class ResourcesGridComponent implements OnInit {
(error) => console.log('UPDATE USER PREFERENCES ERROR ', error));
}
- logAction(name) {
- this.auditService.sendDataToAudit({resource_name: name, info: `Open terminal, requested for notebook`, type: 'WEB_TERMINAL'}).subscribe();
+ private logAction(name) {
+ this.auditService.sendDataToAudit({
+ resource_name: name, info: `Open terminal, requested for notebook`, type: 'WEB_TERMINAL'
+ }).subscribe();
}
+
}
diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.model.ts b/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.model.ts
index c4ad5800..e1b1360 100644
--- a/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.model.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.model.ts
@@ -50,7 +50,8 @@ export class ExploratoryModel {
public project: string,
public endpoint: string,
public tags: any,
- public edgeNodeStatus: string
+ public edgeNodeStatus: string,
+ public activeCompute: boolean
) { }
public static loadEnvironments(data: Array<any>) {
@@ -92,7 +93,8 @@ export class ExploratoryModel {
el.project,
el.endpoint,
el.tags,
- value.shared[el.endpoint].status
+ value.shared[el.endpoint].status,
+ !!el.computational_resources.filter(resource => resource.status !== 'terminated' && resource.status !== 'failed').length
);
})
};
diff --git a/services/self-service/src/main/resources/webapp/src/app/shared/modal-dialog/notification-dialog/notification-dialog.component.ts b/services/self-service/src/main/resources/webapp/src/app/shared/modal-dialog/notification-dialog/notification-dialog.component.ts
index 232eab1..6bec677 100644
--- a/services/self-service/src/main/resources/webapp/src/app/shared/modal-dialog/notification-dialog/notification-dialog.component.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/shared/modal-dialog/notification-dialog/notification-dialog.component.ts
@@ -32,8 +32,7 @@ import {Endpoint} from '../../../administration/project/project.component';
<div mat-dialog-content class="content message">
<div *ngIf="data.type === 'terminateNode'" class="table-header">
<div *ngIf="data.item.action.endpoint.length > 0">
- Edge node<span *ngIf="data.item.action.endpoint.length>1">s</span>
- <span class="strong">{{ data.item.action.endpoint.join(', ') }}</span> in project
+ Edge node<span *ngIf="data.item.action.endpoint.length>1">s</span> <span class="strong">{{ data.item.action.endpoint.join(', ') }}</span> in project
<span class="strong">{{ data.item.action.project_name }}</span> will be terminated.
</div>
</div>
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@dlab.apache.org
For additional commands, e-mail: commits-help@dlab.apache.org