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

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


The following commit(s) were added to refs/heads/DLAB-1546 by this push:
     new 21e893b  Made cluster name unique per project
     new 3819859  Merge remote-tracking branch 'origin/DLAB-1546' into DLAB-1546
21e893b is described below

commit 21e893bde70245da1c834256d05d0fc9cd892eb2
Author: Dmytro Gnatyshyn <di1...@ukr.net>
AuthorDate: Thu Mar 5 16:49:35 2020 +0200

    Made cluster name unique per project
---
 .../services/applicationServiceFacade.service.ts   |  9 +++++++
 .../src/app/core/services/userResource.service.ts  |  6 ++---
 .../reporting-grid/reporting-grid.component.html   |  2 +-
 ...utational-resource-create-dialog.component.html |  9 ++++---
 ...mputational-resource-create-dialog.component.ts | 30 ++++++++++++++--------
 5 files changed, 38 insertions(+), 18 deletions(-)

diff --git 
a/services/self-service/src/main/resources/webapp/src/app/core/services/applicationServiceFacade.service.ts
 
b/services/self-service/src/main/resources/webapp/src/app/core/services/applicationServiceFacade.service.ts
index a8fbdc0..ac698a7 100644
--- 
a/services/self-service/src/main/resources/webapp/src/app/core/services/applicationServiceFacade.service.ts
+++ 
b/services/self-service/src/main/resources/webapp/src/app/core/services/applicationServiceFacade.service.ts
@@ -47,6 +47,7 @@ export class ApplicationServiceFacade {
   private static readonly IMAGE = 'image';
   private static readonly SCHEDULER = 'scheduler';
   private static readonly TEMPLATES = 'templates';
+  private static readonly COMPUTATION_TEMPLATES = 'computation_templates';
   private static readonly COMPUTATIONAL_RESOURCES_TEMLATES = 
'computational_templates';
   private static readonly COMPUTATIONAL_RESOURCES = 'computational_resources';
   private static readonly COMPUTATIONAL_RESOURCES_DATAENGINE = 
'computational_resources_dataengine';
@@ -181,6 +182,12 @@ export class ApplicationServiceFacade {
       null);
   }
 
+  public buildGetComputationTemplatesRequest(params, provider): 
Observable<any> {
+    return this.buildRequest(HTTPMethod.GET,
+      '/api/' + provider + 
this.requestRegistry.Item(ApplicationServiceFacade.COMPUTATION_TEMPLATES) + 
params,
+      null);
+  }
+
   public buildCreateExploratoryEnvironmentRequest(data): Observable<any> {
     return this.buildRequest(HTTPMethod.PUT,
       
this.requestRegistry.Item(ApplicationServiceFacade.EXPLORATORY_ENVIRONMENT),
@@ -631,6 +638,8 @@ export class ApplicationServiceFacade {
       '/api/infrastructure_provision/exploratory_environment');
     this.requestRegistry.Add(ApplicationServiceFacade.TEMPLATES,
       '/api/infrastructure_templates');
+    this.requestRegistry.Add(ApplicationServiceFacade.COMPUTATION_TEMPLATES,
+    '/infrastructure_provision/computational_resources');
     this.requestRegistry.Add(ApplicationServiceFacade.IMAGE,
       '/api/infrastructure_provision/exploratory_environment/image');
     this.requestRegistry.Add(ApplicationServiceFacade.SCHEDULER,
diff --git 
a/services/self-service/src/main/resources/webapp/src/app/core/services/userResource.service.ts
 
b/services/self-service/src/main/resources/webapp/src/app/core/services/userResource.service.ts
index a41bd29..340e216 100644
--- 
a/services/self-service/src/main/resources/webapp/src/app/core/services/userResource.service.ts
+++ 
b/services/self-service/src/main/resources/webapp/src/app/core/services/userResource.service.ts
@@ -37,10 +37,10 @@ export class UserResourceService {
         catchError(ErrorUtils.handleServiceError));
   }
 
-  public getComputationalTemplates(project, endpoint): Observable<any> {
-    const url = `/${project}/${endpoint}/computational_templates`;
+  public getComputationalTemplates(project, endpoint, provider): 
Observable<any> {
+    const url = `/${project}/${endpoint}/templates`;
     return this.applicationServiceFacade
-      .buildGetTemplatesRequest(url)
+      .buildGetComputationTemplatesRequest(url, provider)
       .pipe(
         map(response => response),
         catchError(ErrorUtils.handleServiceError));
diff --git 
a/services/self-service/src/main/resources/webapp/src/app/reporting/reporting-grid/reporting-grid.component.html
 
b/services/self-service/src/main/resources/webapp/src/app/reporting/reporting-grid/reporting-grid.component.html
index 4a92bc6..010dd77 100644
--- 
a/services/self-service/src/main/resources/webapp/src/app/reporting/reporting-grid/reporting-grid.component.html
+++ 
b/services/self-service/src/main/resources/webapp/src/app/reporting/reporting-grid/reporting-grid.component.html
@@ -135,7 +135,7 @@
       </th>
 
       <td mat-cell *matCellDef="let element">
-        {{ element[DICTIONARY[PROVIDER].billing.cost].toFixed(2) }} {{ 
element[DICTIONARY[PROVIDER].billing.currencyCode] }}
+        {{ element[DICTIONARY[PROVIDER].billing.cost] }} {{ 
element[DICTIONARY[PROVIDER].billing.currencyCode] }}
       </td>
       <td mat-footer-cell *matFooterCellDef class="table-footer">
         Total <span *ngIf="reportData?.length"> {{ fullReport['cost_total'] }}
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 aab4e24..ec3c3ac 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
@@ -69,15 +69,16 @@
               <label class="label">Cluster alias</label>
               <div class="control">
                 <input
-                  [class.danger_field]="computationalResourceExist || 
!resourceForm?.controls['cluster_alias_name'].valid
+                  
[class.danger_field]="!resourceForm?.controls['cluster_alias_name'].valid
                         && resourceForm?.controls['cluster_alias_name'].dirty 
&& resourceForm?.controls['cluster_alias_name'].hasError('duplication')"
                   type="text" class="form-control" placeholder="Enter cluster 
alias"
                   formControlName="cluster_alias_name" />
-                <span class="error" 
*ngIf="resourceForm?.controls['cluster_alias_name'].hasError('duplication')">This
-                  cluster name already exists.</span>
+                <span class="error" 
*ngIf="resourceForm?.controls['cluster_alias_name'].hasError('user-duplication')">You
 have cluster with this name in current project.</span>
+                <span class="error" 
*ngIf="resourceForm?.controls['cluster_alias_name'].hasError('other-user-duplication')">Other
 user has cluster with this name in current project.</span>
                 <span class="error" 
*ngIf="!resourceForm?.controls.cluster_alias_name.valid
                                             && 
resourceForm?.controls['cluster_alias_name'].dirty
-                                            && 
!resourceForm?.controls['cluster_alias_name'].hasError('duplication')">
+                                            && 
!resourceForm?.controls['cluster_alias_name'].hasError('user-duplication')
+                                            && 
!resourceForm?.controls['cluster_alias_name'].hasError('other-user-duplication')">
                   Cluster name cannot be longer than 
{{DICTIONARY[PROVIDER].max_cluster_name_length}} characters
                   and can only contain letters, numbers, hyphens and '_' but 
can not end with special
                   characters
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 29ef7d4..0c867f9 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
@@ -44,6 +44,8 @@ export class ComputationalResourceCreateDialogComponent 
implements OnInit {
   notebook_instance: any;
   resourcesList: any;
   clusterTypes = [];
+  userComputations = [];
+  projectComputations = [];
   selectedImage: any;
   spotInstance: boolean = true;
 
@@ -76,7 +78,7 @@ export class ComputationalResourceCreateDialogComponent 
implements OnInit {
     this.notebook_instance = this.data.notebook;
     this.resourcesList = this.data.full_list;
     this.initFormModel();
-    this.getTemplates(this.notebook_instance.project, 
this.notebook_instance.endpoint);
+    this.getTemplates(this.notebook_instance.project, 
this.notebook_instance.endpoint, this.notebook_instance.cloud_provider);
   }
 
   public selectImage($event) {
@@ -229,16 +231,24 @@ export class ComputationalResourceCreateDialogComponent 
implements OnInit {
   }
 
   private checkDuplication(control) {
-    if (this.containsComputationalResource(control.value))
-      return { duplication: true };
+    if (this.containsComputationalResource(control.value, 
this.userComputations)){
+      return { 'user-duplication': true };
+    }
+
+    if (this.containsComputationalResource(control.value, 
this.projectComputations)){
+      return { 'other-user-duplication': true };
+    }
   }
 
-  private getTemplates(project, endpoint) {
-    this.userResourceService.getComputationalTemplates(project, 
endpoint).subscribe(
+  private getTemplates(project, endpoint, provider) {
+    this.userResourceService.getComputationalTemplates(project, endpoint, 
provider).subscribe(
       clusterTypes => {
-        this.clusterTypes = clusterTypes;
+        this.clusterTypes = clusterTypes.templates;
+        this.userComputations = clusterTypes.user_computations;
+        this.projectComputations = clusterTypes.project_computations;
+
         this.clusterTypes.forEach((cluster, index) => 
this.clusterTypes[index].computation_resources_shapes = 
SortUtils.shapesSort(cluster.computation_resources_shapes));
-        this.selectedImage = clusterTypes[0];
+        this.selectedImage = clusterTypes.templates[0];
 
         if (this.selectedImage) {
           this._ref.detectChanges();
@@ -284,10 +294,10 @@ export class ComputationalResourceCreateDialogComponent 
implements OnInit {
     return filtered;
   }
 
-  private containsComputationalResource(conputational_resource_name: string): 
boolean {
+  private containsComputationalResource(conputational_resource_name: string, 
existNames: Array<string>): boolean {
     if (conputational_resource_name) {
-      return this.notebook_instance.resources.some(resource =>
-        CheckUtils.delimitersFiltering(conputational_resource_name) === 
CheckUtils.delimitersFiltering(resource.computational_name));
+      return existNames.some(resource =>
+        CheckUtils.delimitersFiltering(conputational_resource_name) === 
CheckUtils.delimitersFiltering(resource));
     }
   }
 }


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

Reply via email to