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/03/24 10:17:04 UTC

[incubator-dlab] branch develop updated: [DLAB-1648]: Conveyed all resources which will be terminated during edge deletion (#670)

This is an automated email from the ASF dual-hosted git repository.

dgnatyshyn pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git


The following commit(s) were added to refs/heads/develop by this push:
     new 0e3d531  [DLAB-1648]: Conveyed all resources which will be terminated during edge deletion (#670)
0e3d531 is described below

commit 0e3d5312ded1bb8d4805963c40427cc013fb1b65
Author: Dmytro Gnatyshyn <42...@users.noreply.github.com>
AuthorDate: Tue Mar 24 12:16:59 2020 +0200

    [DLAB-1648]: Conveyed all resources which will be terminated during edge deletion (#670)
---
 .../administration/project/project.component.html  |  3 +-
 .../administration/project/project.component.ts    | 37 ++++++++++++++++++++--
 .../src/app/reporting/reporting.component.ts       |  1 -
 .../ami-create-dialog.component.html               |  4 +--
 .../notification-dialog.component.ts               | 36 +++++++++++++++++++--
 5 files changed, 71 insertions(+), 10 deletions(-)

diff --git a/services/self-service/src/main/resources/webapp/src/app/administration/project/project.component.html b/services/self-service/src/main/resources/webapp/src/app/administration/project/project.component.html
index b4ba7df..ab69bdb 100644
--- a/services/self-service/src/main/resources/webapp/src/app/administration/project/project.component.html
+++ b/services/self-service/src/main/resources/webapp/src/app/administration/project/project.component.html
@@ -47,8 +47,7 @@
   </mat-card>
 
   <div [hidden]="!projectList.length">
-    <project-list (editItem)="editProject($event)" (deleteItem)="deleteProject($event)"
-      (toggleStatus)="toggleStatus($event)">
+    <project-list (editItem)="editProject($event)" (toggleStatus)="toggleStatus($event)">
     </project-list>
   </div>
 </div>
diff --git a/services/self-service/src/main/resources/webapp/src/app/administration/project/project.component.ts b/services/self-service/src/main/resources/webapp/src/app/administration/project/project.component.ts
index ba3d45a..9833a40 100644
--- a/services/self-service/src/main/resources/webapp/src/app/administration/project/project.component.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/administration/project/project.component.ts
@@ -23,9 +23,10 @@ import { Subscription } from 'rxjs';
 import { ToastrService } from 'ngx-toastr';
 
 import { ProjectDataService } from './project-data.service';
-import { HealthStatusService, ProjectService } from '../../core/services';
+import {HealthStatusService, ProjectService, UserResourceService} from '../../core/services';
 import { NotificationDialogComponent } from '../../shared/modal-dialog/notification-dialog';
 import { ProjectListComponent } from './project-list/project-list.component';
+import {ExploratoryModel} from '../../resources/resources-grid/resources-grid.model';
 
 export interface Endpoint {
   name: string;
@@ -50,6 +51,7 @@ export class ProjectComponent implements OnInit, OnDestroy {
   projectList: Project[] = [];
   healthStatus: any;
   activeFiltering: boolean = false;
+  resources: any = [];
 
   private subscriptions: Subscription = new Subscription();
 
@@ -60,7 +62,8 @@ export class ProjectComponent implements OnInit, OnDestroy {
     public toastr: ToastrService,
     private projectService: ProjectService,
     private projectDataService: ProjectDataService,
-    private healthStatusService: HealthStatusService
+    private healthStatusService: HealthStatusService,
+    private userResourceService: UserResourceService
   ) { }
 
   ngOnInit() {
@@ -70,12 +73,20 @@ export class ProjectComponent implements OnInit, OnDestroy {
         if (value) this.projectList = value;
       }));
     this.refreshGrid();
+    this.getResources();
   }
 
   ngOnDestroy() {
     this.subscriptions.unsubscribe();
   }
 
+  private getResources() {
+    this.userResourceService.getUserProvisionedResources()
+      .subscribe((result: any) => {
+        this.resources = ExploratoryModel.loadEnvironments(result);
+      });
+  }
+
   refreshGrid() {
     this.projectDataService.updateProjects();
     this.activeFiltering = false;
@@ -110,6 +121,28 @@ export class ProjectComponent implements OnInit, OnDestroy {
   }
 
   private toggleStatusRequest(data, action) {
+    if ( action === 'terminate') {
+      const projectsResources = this.resources
+        .filter(resource => resource.project === data.project_name )[0].exploratory
+        .filter(expl => expl.status !== 'terminated' && expl.status !== 'terminating');
+
+      let termResources = [];
+      data.endpoint.forEach(v => {
+        termResources = [...termResources, ...projectsResources.filter(resource => resource.endpoint === v)];
+      });
+
+      this.dialog.open(NotificationDialogComponent, { data: {
+        type: 'terminateNode', item: {action: data, resources: termResources.map(resource => resource.name)}
+        }, panelClass: 'modal-sm' })
+        .afterClosed().subscribe(result => {
+        result && this.edgeNodeAction(data, action);
+      });
+    } else {
+      this.edgeNodeAction(data, action);
+    }
+  }
+
+  private edgeNodeAction(data, action) {
     this.projectService.toggleProjectStatus(data, action).subscribe(() => {
       this.refreshGrid();
       this.toastr.success(`Edge node ${this.toEndpointAction(action)} is in progress!`, 'Processing!');
diff --git a/services/self-service/src/main/resources/webapp/src/app/reporting/reporting.component.ts b/services/self-service/src/main/resources/webapp/src/app/reporting/reporting.component.ts
index b6fbc26..3433383 100644
--- a/services/self-service/src/main/resources/webapp/src/app/reporting/reporting.component.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/reporting/reporting.component.ts
@@ -93,7 +93,6 @@ export class ReportingComponent implements OnInit, OnDestroy {
         const localEndpoint = endpoints.filter(endpoint => endpoint.name === 'local');
         if (localEndpoint.length) {
           this.PROVIDER = localEndpoint[0].cloudProvider.toLowerCase();
-          console.log(this.PROVIDER);
           if (this.PROVIDER) {
             this.rebuildBillingReport();
           }
diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/ami-create-dialog/ami-create-dialog.component.html b/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/ami-create-dialog/ami-create-dialog.component.html
index 1e7c25c..4a7a4a6 100644
--- a/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/ami-create-dialog/ami-create-dialog.component.html
+++ b/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/ami-create-dialog/ami-create-dialog.component.html
@@ -33,9 +33,7 @@
               image name already exists in project.</span>
             <span class="error"
               *ngIf="!createAMIForm.valid && createAMIForm.controls['name'].dirty && !createAMIForm.controls['name'].hasError('duplication')">
-              image name
-              <span *ngIf="provider === 'azure'"> cannot be longer than 10 characters and</span>
-              can only contain letters, numbers, hyphens and '_'</span>
+              Name cannot be longer than 10 characters and can only contain letters, numbers, hyphens and '_' but can not end with special characters</span>
           </div>
         </div>
         <div class="control-group">
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 6b66ce4..20ec20f 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
@@ -30,6 +30,13 @@ import {Endpoint} from '../../../administration/project/project.component';
               <button type="button" class="close" (click)="dialogRef.close()">&times;</button>
           </header>
           <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
+                <span class="strong">{{ data.item.action.project_name }}</span> will be terminated.
+              </div>
+            </div>
               <div *ngIf="data.type === 'list'" class="info">
                   <div *ngIf="data.template.notebook.length > 0">
                       Following notebook server<span *ngIf="data.template.notebook.length>1">s </span>
@@ -102,8 +109,7 @@ import {Endpoint} from '../../../administration/project/project.component';
                           </mat-list-item>
                       </div>
                   </mat-list>
-                  <p class="m-top-20"><span class="strong">Do you want to proceed?</span></p>
-
+                <p class="m-top-20"><span class="strong">Do you want to proceed?</span></p>
                   <div class="text-center m-top-30 m-bott-10">
                       <button type="button" class="butt" mat-raised-button (click)="dialogRef.close()">No</button>
                       <button *ngIf="!this.willNotTerminate" type="button" class="butt butt-success" mat-raised-button
@@ -114,6 +120,30 @@ import {Endpoint} from '../../../administration/project/project.component';
                       </button>
                   </div>
               </div>
+               <div class="confirm-dialog" *ngIf="data.type === 'terminateNode'">
+                   <mat-list *ngIf="data.item.resources.length > 0">
+                     <mat-list-item class="list-header sans">
+                       <div class="endpoint">Resources</div>
+                       <div class="status">Further status</div>
+                     </mat-list-item>
+                     <div class="scrolling-content">
+                       <mat-list-item *ngFor="let resource of data.item.resources" class="sans node">
+                         <div class="endpoint ellipsis">{{resource}}</div>
+                         <div class="status terminated">Terminated</div>
+                       </mat-list-item>
+                     </div>
+                   </mat-list>
+                   <div mat-dialog-content class="bottom-message" *ngIf="data.item.resources.length > 0">
+                     <span class="confirm-message">All connected computational resources will be terminated as well.</span>
+                   </div>
+                 <p class="m-top-20"><span class="strong">Do you want to proceed?</span></p>
+                 <div class="text-center m-top-30 m-bott-10">
+                   <button type="button" class="butt" mat-raised-button (click)="dialogRef.close()">No</button>
+                   <button type="button" class="butt butt-success" mat-raised-button
+                           (click)="dialogRef.close(true)">Yes
+                   </button>
+                 </div>
+               </div>
           </div>
       </div>
   `,
@@ -140,6 +170,8 @@ import {Endpoint} from '../../../administration/project/project.component';
     .confirm-message{color: #ef5c4b;font-size: 13px;min-height: 18px; text-align: center; padding-top: 20px}
     .checkbox{margin-right: 5px;vertical-align: middle; margin-bottom: 3px;}
     label{cursor: pointer}
+    .bottom-message{padding-top: 15px;}
+    .table-header{padding-bottom: 10px;}
 
 
   `]


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@dlab.apache.org
For additional commands, e-mail: commits-help@dlab.apache.org