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:08:33 UTC

[incubator-dlab] branch DLAB-1648 created (now e9043b9)

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

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


      at e9043b9  [DLAB-1648]: Conveyed all resources which will be terminated during edge deletion

This branch includes the following new commits:

     new e9043b9  [DLAB-1648]: Conveyed all resources which will be terminated during edge deletion

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



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


[incubator-dlab] 01/01: [DLAB-1648]: Conveyed all resources which will be terminated during edge deletion

Posted by dg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit e9043b9825144f6151a2e356da8f6eeee63c891d
Author: Dmytro Gnatyshyn <di...@ukr.net>
AuthorDate: Tue Mar 24 12:08:19 2020 +0200

    [DLAB-1648]: Conveyed all resources which will be terminated during edge deletion
---
 .../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