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 <di1...@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-unsubscr...@dlab.apache.org For additional commands, e-mail: commits-h...@dlab.apache.org