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/01/14 14:20:02 UTC
[incubator-dlab] branch multiple-cloud updated: [DLAB-1125]:
Implement support a multiple cloud functionality
This is an automated email from the ASF dual-hosted git repository.
dgnatyshyn pushed a commit to branch multiple-cloud
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git
The following commit(s) were added to refs/heads/multiple-cloud by this push:
new 5988619 [DLAB-1125]: Implement support a multiple cloud functionality
5988619 is described below
commit 59886197755de6da37e2780630b3212c58c2d2a0
Author: Dmytro Gnatyshyn <di...@ukr.net>
AuthorDate: Tue Jan 14 16:18:39 2020 +0200
[DLAB-1125]: Implement support a multiple cloud functionality
---
.../project-form/project-form.component.html | 2 +-
.../project/project-form/project-form.component.ts | 3 +-
.../services/applicationServiceFacade.service.ts | 26 ++++++-------
.../services/dataengineConfiguration.service.ts | 8 ++--
.../src/app/core/services/userResource.service.ts | 10 ++---
.../webapp/src/app/login/login.component.html | 8 ++--
.../webapp/src/app/login/login.component.ts | 5 ---
.../reporting-grid/reporting-grid.component.html | 32 ++++++++--------
.../src/app/reporting/reporting.component.ts | 24 ++++++------
.../cluster-details/cluster-details.component.html | 26 ++++++-------
.../cluster-details/cluster-details.component.ts | 10 +++--
...utational-resource-create-dialog.component.html | 12 +++---
...mputational-resource-create-dialog.component.ts | 19 ++++++----
.../computational-resource-create.model.ts | 5 +--
.../computational-resources-list.component.ts | 18 +++++----
.../ami-create-dialog.component.html | 10 ++---
.../ami-create-dialog.component.ts | 7 ++--
.../cost-details-dialog.component.html | 22 +++++------
.../cost-details-dialog.component.ts | 2 +
.../create-environment.component.html | 10 ++---
.../create-environment.component.ts | 2 +-
.../detail-dialog/detail-dialog.component.html | 14 +++----
.../detail-dialog/detail-dialog.component.ts | 1 +
.../resources-grid/resources-grid.component.html | 8 ++--
.../resources-grid/resources-grid.component.ts | 15 ++++----
.../resources-grid/resources-grid.model.ts | 25 ++++++------
.../src/app/shared/navbar/navbar.component.ts | 1 -
.../webapp/src/dictionary/aws.dictionary.ts | 41 +-------------------
.../webapp/src/dictionary/azure.dictionary.ts | 42 +--------------------
.../webapp/src/dictionary/gcp.dictionary.ts | 43 +--------------------
.../webapp/src/dictionary/global.dictionary.ts | 44 ++++++++++++++++++++--
31 files changed, 211 insertions(+), 284 deletions(-)
diff --git a/services/self-service/src/main/resources/webapp/src/app/administration/project/project-form/project-form.component.html b/services/self-service/src/main/resources/webapp/src/app/administration/project/project-form/project-form.component.html
index e278dce..8c18309 100644
--- a/services/self-service/src/main/resources/webapp/src/app/administration/project/project-form/project-form.component.html
+++ b/services/self-service/src/main/resources/webapp/src/app/administration/project/project-form/project-form.component.html
@@ -77,7 +77,7 @@
Project name can only contain letters and numbers
</span>
<span class="error" *ngIf="projectForm?.controls.name.hasError('limit')">
- Project name cannot be longer than {{ DICTIONARY.max_project_name_length}} characters
+ Project name cannot be longer than {{ maxProjectNameLength }} characters
</span>
</div>
</div>
diff --git a/services/self-service/src/main/resources/webapp/src/app/administration/project/project-form/project-form.component.ts b/services/self-service/src/main/resources/webapp/src/app/administration/project/project-form/project-form.component.ts
index 5eb522a..d7ba0a1 100644
--- a/services/self-service/src/main/resources/webapp/src/app/administration/project/project-form/project-form.component.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/administration/project/project-form/project-form.component.ts
@@ -46,6 +46,7 @@ export class ProjectFormComponent implements OnInit {
public projectList: Project[] = [];
public accessKeyValid: boolean;
public keyLabel: string = '';
+ public maxProjectNameLength: number = 10;
@Input() item: any;
@Output() update: EventEmitter<{}> = new EventEmitter();
@@ -204,6 +205,6 @@ export class ProjectFormComponent implements OnInit {
}
private providerMaxLength(control) {
- return control.value.length <= DICTIONARY.max_project_name_length ? null : { limit: true };
+ return control.value.length <= this.maxProjectNameLength ? null : { limit: true };
}
}
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 e2059f8..6e2aab3 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
@@ -203,33 +203,33 @@ export class ApplicationServiceFacade {
public buildCreateComputationalResources_DataengineServiceRequest(data, provider): Observable<any> {
return this.buildRequest(HTTPMethod.PUT,
- '/api/'+ provider + this.requestRegistry.Item(ApplicationServiceFacade.COMPUTATIONAL_RESOURCES_DATAENGINESERVICE),
+ '/api/' + provider + this.requestRegistry.Item(ApplicationServiceFacade.COMPUTATIONAL_RESOURCES_DATAENGINESERVICE),
data,
{ observe: 'response' });
}
public buildCreateComputationalResources_DataengineRequest(data, provider): Observable<any> {
return this.buildRequest(HTTPMethod.PUT,
- '/api/'+ provider + this.requestRegistry.Item(ApplicationServiceFacade.COMPUTATIONAL_RESOURCES_DATAENGINE),
+ '/api/' + provider + this.requestRegistry.Item(ApplicationServiceFacade.COMPUTATIONAL_RESOURCES_DATAENGINE),
data,
{ observe: 'response' });
}
- public buildDeleteComputationalResourcesRequest(data): Observable<any> {
+ public buildDeleteComputationalResourcesRequest(data, provider): Observable<any> {
return this.buildRequest(HTTPMethod.DELETE,
- this.requestRegistry.Item(ApplicationServiceFacade.COMPUTATIONAL_RESOURCES),
+ '/api/' + provider + this.requestRegistry.Item(ApplicationServiceFacade.COMPUTATIONAL_RESOURCES),
data);
}
- public buildStopSparkClusterAction(data): Observable<any> {
+ public buildStopSparkClusterAction(data, provider): Observable<any> {
return this.buildRequest(HTTPMethod.DELETE,
- this.requestRegistry.Item(ApplicationServiceFacade.COMPUTATIONAL_RESOURCES),
+ '/api/' + provider + this.requestRegistry.Item(ApplicationServiceFacade.COMPUTATIONAL_RESOURCES),
data);
}
- public buildStartSparkClusterAction(params): Observable<any> {
+ public buildStartSparkClusterAction(params, provider): Observable<any> {
return this.buildRequest(HTTPMethod.PUT,
- this.requestRegistry.Item(ApplicationServiceFacade.COMPUTATIONAL_RESOURCES) + params,
+ '/api/' + provider + this.requestRegistry.Item(ApplicationServiceFacade.COMPUTATIONAL_RESOURCES) + params,
null);
}
@@ -497,15 +497,15 @@ export class ApplicationServiceFacade {
data);
}
- public buildGetClusterConfiguration(param): Observable<any> {
+ public buildGetClusterConfiguration(param, provider): Observable<any> {
return this.buildRequest(HTTPMethod.GET,
- this.requestRegistry.Item(ApplicationServiceFacade.COMPUTATIONAL_RESOURCES) + param,
+ '/api/' + provider + this.requestRegistry.Item(ApplicationServiceFacade.COMPUTATIONAL_RESOURCES) + param,
null);
}
- public buildEditClusterConfiguration(param, data): Observable<any> {
+ public buildEditClusterConfiguration(param, data, provider): Observable<any> {
return this.buildRequest(HTTPMethod.PUT,
- this.requestRegistry.Item(ApplicationServiceFacade.COMPUTATIONAL_RESOURCES) + param,
+ '/api/' + provider + this.requestRegistry.Item(ApplicationServiceFacade.COMPUTATIONAL_RESOURCES) + param,
data);
}
@@ -631,7 +631,7 @@ export class ApplicationServiceFacade {
// Computational Resources
this.requestRegistry.Add(ApplicationServiceFacade.COMPUTATIONAL_RESOURCES,
- '/api/infrastructure_provision/computational_resources');
+ '/infrastructure_provision/computational_resources');
this.requestRegistry.Add(ApplicationServiceFacade.COMPUTATIONAL_RESOURCES_DATAENGINESERVICE,
'/infrastructure_provision/computational_resources/dataengine-service'); // emr(aws)
this.requestRegistry.Add(ApplicationServiceFacade.COMPUTATIONAL_RESOURCES_DATAENGINE,
diff --git a/services/self-service/src/main/resources/webapp/src/app/core/services/dataengineConfiguration.service.ts b/services/self-service/src/main/resources/webapp/src/app/core/services/dataengineConfiguration.service.ts
index 5dcef3e..fe61c75 100644
--- a/services/self-service/src/main/resources/webapp/src/app/core/services/dataengineConfiguration.service.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/core/services/dataengineConfiguration.service.ts
@@ -28,19 +28,19 @@ import { ErrorUtils } from '../util';
export class DataengineConfigurationService {
constructor(private applicationServiceFacade: ApplicationServiceFacade) {}
- public getClusterConfiguration(exploratory, cluster): Observable<{}> {
+ public getClusterConfiguration(exploratory, cluster, provider): Observable<{}> {
const url = `/${exploratory}/${cluster}/config`;
return this.applicationServiceFacade
- .buildGetClusterConfiguration(url)
+ .buildGetClusterConfiguration(url, provider)
.pipe(
map(response => response),
catchError(ErrorUtils.handleServiceError));
}
- public editClusterConfiguration(data, exploratory, cluster): Observable<{}> {
+ public editClusterConfiguration(data, exploratory, cluster, provider): Observable<{}> {
const url = `/dataengine/${exploratory}/${cluster}/config`;
return this.applicationServiceFacade
- .buildEditClusterConfiguration(url, data)
+ .buildEditClusterConfiguration(url, data, provider)
.pipe(
map(response => response),
catchError(ErrorUtils.handleServiceError));
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 e540729..04acbb8 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
@@ -100,26 +100,26 @@ export class UserResourceService {
catchError(ErrorUtils.handleServiceError));
}
- public suspendComputationalResource(notebookName: string, computationalResourceName: string): Observable<{}> {
+ public suspendComputationalResource(notebookName: string, computationalResourceName: string, provider: string): Observable<{}> {
const body = JSON.stringify('/' + notebookName + '/' + computationalResourceName + '/terminate');
return this.applicationServiceFacade
- .buildDeleteComputationalResourcesRequest(body)
+ .buildDeleteComputationalResourcesRequest(body, provider)
.pipe(
map(response => response),
catchError(ErrorUtils.handleServiceError));
}
- public toggleStopStartAction(project: string, notebook: string, resource: string, action): Observable<{}> {
+ public toggleStopStartAction(project: string, notebook: string, resource: string, action, provider: string): Observable<{}> {
const url = `/${project}/${notebook}/${resource}/${action}`;
if (action === 'stop') {
return this.applicationServiceFacade
- .buildStopSparkClusterAction(JSON.stringify(url))
+ .buildStopSparkClusterAction(JSON.stringify(url), provider)
.pipe(
map(response => response),
catchError(ErrorUtils.handleServiceError));
} else if (action === 'start') {
return this.applicationServiceFacade
- .buildStartSparkClusterAction(url)
+ .buildStartSparkClusterAction(url, provider)
.pipe(
map(response => response),
catchError(ErrorUtils.handleServiceError));
diff --git a/services/self-service/src/main/resources/webapp/src/app/login/login.component.html b/services/self-service/src/main/resources/webapp/src/app/login/login.component.html
index 2266df3..d87e1d1 100644
--- a/services/self-service/src/main/resources/webapp/src/app/login/login.component.html
+++ b/services/self-service/src/main/resources/webapp/src/app/login/login.component.html
@@ -23,7 +23,7 @@
<img src="assets/img/logo.png" alt="">
</a>
<form name="form" class="form-wrap" #f="ngForm" novalidate>
- <!--
+ <!--
<div class="input-icon-group">
<span class="input-icon"><span class="login-icon icon-username"></span></span>
<input type="text" class="input-with-icon" name="username" [(ngModel)]="model.username" [pattern]="userPattern" #username="ngModel" placeholder="Username" required />
@@ -34,8 +34,8 @@
<input type="password" class="input-with-icon" placeholder="Password" name="password" [(ngModel)]="model.password" #password="ngModel" required />
</div>
-
- <div class="form-group" [ngClass]="{'flex': DICTIONARY.cloud_provider === 'azure'}">
+
+ <div class="form-group" [ngClass]="{'flex': DICTIONARY['aws'].cloud_provider === 'azure'}">
<button mat-raised-button [disabled]="loading || !username.valid || !password.valid"
(click)="login_btnClick();"
class="butt butt-login"
@@ -50,7 +50,7 @@
</span>
</span>
</button>
- <button *ngIf="DICTIONARY.cloud_provider === 'azure' && !DICTIONARY.use_ldap"
+ <button *ngIf="DICTIONARY['aws'].cloud_provider === 'azure' && !DICTIONARY['aws'].use_ldap"
class="butt butt-azure"
mat-raised-button (click)="loginWithAzure_btnClick();">
Login with Azure
diff --git a/services/self-service/src/main/resources/webapp/src/app/login/login.component.ts b/services/self-service/src/main/resources/webapp/src/app/login/login.component.ts
index 64314c6..bc50072 100644
--- a/services/self-service/src/main/resources/webapp/src/app/login/login.component.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/login/login.component.ts
@@ -22,7 +22,6 @@ import { Subscription } from 'rxjs';
import { LoginModel } from './login.model';
import { AppRoutingService, HealthStatusService, ApplicationSecurityService } from '../core/services';
-import { HTTP_STATUS_CODES } from '../core/util';
import { DICTIONARY } from '../../dictionary/global.dictionary';
@Component({
@@ -69,12 +68,8 @@ export class LoginComponent implements OnInit, OnDestroy {
return false;
}, error => {
- if (DICTIONARY.cloud_provider === 'azure' && error && error.status === HTTP_STATUS_CODES.FORBIDDEN) {
- window.location.href = error.headers.get('Location');
- } else {
this.error = error.message;
this.loading = false;
- }
});
return false;
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 f9bf7cf..e9b7e0d 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
@@ -30,7 +30,7 @@
</i>
</button>
</th>
- <td mat-cell *matCellDef="let element"> {{element[DICTIONARY.billing.dlabId]}} </td>
+ <td mat-cell *matCellDef="let element"> {{element[DICTIONARY['aws'].billing.dlabId]}} </td>
<td mat-footer-cell *matFooterCellDef> Total </td>
</ng-container>
@@ -72,7 +72,7 @@
</i>
</button>
</th>
- <td mat-cell *matCellDef="let element"> {{element[DICTIONARY.billing.resourceType]}} </td>
+ <td mat-cell *matCellDef="let element"> {{element[DICTIONARY['aws'].billing.resourceType]}} </td>
<td mat-footer-cell *matFooterCellDef></td>
</ng-container>
@@ -96,34 +96,34 @@
<ng-container matColumnDef="shape">
<th mat-header-cell *matHeaderCellDef class="th_shape">
- <span class="label"> {{ DICTIONARY.instance_size}} </span>
+ <span class="label"> {{ DICTIONARY['aws'].instance_size}} </span>
<button mat-icon-button aria-label="More" class="ar" (click)="toggleFilterRow()">
<i class="material-icons">
<span
- *ngIf="filteredReportData[DICTIONARY.billing.instance_size].length > 0; else shape_filtered">filter_list</span>
+ *ngIf="filteredReportData[DICTIONARY['aws'].billing.instance_size].length > 0; else shape_filtered">filter_list</span>
<ng-template #shape_filtered>more_vert</ng-template>
</i>
</button>
</th>
<td mat-cell *matCellDef="let element">
- <span [outerHTML]="element[DICTIONARY.billing.instance_size] | lineBreak"></span>
+ <span [outerHTML]="element[DICTIONARY['aws'].billing.instance_size] | lineBreak"></span>
</td>
<td mat-footer-cell *matFooterCellDef></td>
</ng-container>
<ng-container matColumnDef="service">
<th mat-header-cell *matHeaderCellDef class="service">
- <span class="label"> {{ DICTIONARY.service}} </span>
+ <span class="label"> {{ DICTIONARY['aws'].service}} </span>
<button mat-icon-button aria-label="More" class="ar" (click)="toggleFilterRow()">
<i class="material-icons">
<span
- *ngIf="filteredReportData[DICTIONARY.billing.instance_size].length > 0; else service_filtered">filter_list</span>
+ *ngIf="filteredReportData[DICTIONARY['aws'].billing.instance_size].length > 0; else service_filtered">filter_list</span>
<ng-template #service_filtered>more_vert</ng-template>
</i>
</button>
</th>
<td mat-cell *matCellDef="let element">
- {{ element[DICTIONARY.billing.service] }}
+ {{ element[DICTIONARY['aws'].billing.service] }}
<span *ngIf="element.resource_type">({{ element.resource_type }})</span>
</td>
<td mat-footer-cell *matFooterCellDef></td>
@@ -135,11 +135,11 @@
</th>
<td mat-cell *matCellDef="let element">
- {{ element[DICTIONARY.billing.cost] }} {{ element[DICTIONARY.billing.currencyCode] }}
+ {{ element[DICTIONARY['aws'].billing.cost] }} {{ element[DICTIONARY['aws'].billing.currencyCode] }}
</td>
<td mat-footer-cell *matFooterCellDef>
- <span *ngIf="reportData?.length">{{ fullReport[DICTIONARY.billing.costTotal] }}
- {{ fullReport[DICTIONARY.billing.currencyCode] }}</span>
+ <span *ngIf="reportData?.length">{{ fullReport[DICTIONARY['aws'].billing.costTotal] }}
+ {{ fullReport[DICTIONARY['aws'].billing.currencyCode] }}</span>
</td>
</ng-container>
@@ -178,16 +178,16 @@
<ng-container matColumnDef="shape-filter">
<th mat-header-cell *matHeaderCellDef>
<multi-select-dropdown *ngIf="filterConfiguration" (selectionChange)="onUpdate($event)"
- [type]="[DICTIONARY.billing.instance_size]" [items]="filterConfiguration[DICTIONARY.billing.instance_size]"
- [model]="filteredReportData[DICTIONARY.billing.instance_size]"></multi-select-dropdown>
+ [type]="[DICTIONARY['aws'].billing.instance_size]" [items]="filterConfiguration[DICTIONARY['aws'].billing.instance_size]"
+ [model]="filteredReportData[DICTIONARY['aws'].billing.instance_size]"></multi-select-dropdown>
</th>
</ng-container>
<ng-container matColumnDef="service-filter">
<th mat-header-cell *matHeaderCellDef>
<multi-select-dropdown *ngIf="filterConfiguration" (selectionChange)="onUpdate($event)"
- [type]="[DICTIONARY.billing.service_filter_key]"
- [items]="filterConfiguration[DICTIONARY.billing.service_filter_key]"
- [model]="filteredReportData[DICTIONARY.billing.service_filter_key]"></multi-select-dropdown>
+ [type]="[DICTIONARY['aws'].billing.service_filter_key]"
+ [items]="filterConfiguration[DICTIONARY['aws'].billing.service_filter_key]"
+ [model]="filteredReportData[DICTIONARY['aws'].billing.service_filter_key]"></multi-select-dropdown>
</th>
</ng-container>
<ng-container matColumnDef="actions" stickyEnd>
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 01126b9..7801c8f 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
@@ -95,8 +95,8 @@ export class ReportingComponent implements OnInit, OnDestroy {
this.reportingToolbar.reportData = this.data;
if (!localStorage.getItem('report_period')) {
localStorage.setItem('report_period', JSON.stringify({
- start_date: this.data[DICTIONARY.billing.dateFrom],
- end_date: this.data[DICTIONARY.billing.dateTo]
+ start_date: this.data[DICTIONARY['aws'].billing.dateFrom],
+ end_date: this.data[DICTIONARY['aws'].billing.dateTo]
}));
this.reportingToolbar.setDateRange();
}
@@ -140,30 +140,30 @@ export class ReportingComponent implements OnInit, OnDestroy {
if (item.project && projects.indexOf(item.project) === -1)
projects.push(item.project);
- if (item[DICTIONARY.billing.resourceType] && types.indexOf(item[DICTIONARY.billing.resourceType]) === -1)
- types.push(item[DICTIONARY.billing.resourceType]);
+ if (item[DICTIONARY['aws'].billing.resourceType] && types.indexOf(item[DICTIONARY['aws'].billing.resourceType]) === -1)
+ types.push(item[DICTIONARY['aws'].billing.resourceType]);
- if (item[DICTIONARY.billing.instance_size]) {
- if (item[DICTIONARY.billing.instance_size].indexOf('Master') > -1) {
- for (let shape of item[DICTIONARY.billing.instance_size].split('\n')) {
+ if (item[DICTIONARY['aws'].billing.instance_size]) {
+ if (item[DICTIONARY['aws'].billing.instance_size].indexOf('Master') > -1) {
+ for (let shape of item[DICTIONARY['aws'].billing.instance_size].split('\n')) {
shape = shape.replace('Master: ', '');
shape = shape.replace(/Slave:\s+\d+ x /, '');
shape = shape.replace(/\s+/g, '');
shapes.indexOf(shape) === -1 && shapes.push(shape);
}
- } else if (item[DICTIONARY.billing.instance_size].match(/\d x \S+/)) {
- const parsedShape = item[DICTIONARY.billing.instance_size].match(/\d x \S+/)[0].split(' x ')[1];
+ } else if (item[DICTIONARY['aws'].billing.instance_size].match(/\d x \S+/)) {
+ const parsedShape = item[DICTIONARY['aws'].billing.instance_size].match(/\d x \S+/)[0].split(' x ')[1];
if (shapes.indexOf(parsedShape) === -1) {
shapes.push(parsedShape);
}
} else {
- shapes.indexOf(item[DICTIONARY.billing.instance_size]) === -1 && shapes.push(item[DICTIONARY.billing.instance_size]);
+ shapes.indexOf(item[DICTIONARY['aws'].billing.instance_size]) === -1 && shapes.push(item[DICTIONARY['aws'].billing.instance_size]);
}
}
- if (item[DICTIONARY.billing.service] && services.indexOf(item[DICTIONARY.billing.service]) === -1)
- services.push(item[DICTIONARY.billing.service]);
+ if (item[DICTIONARY['aws'].billing.service] && services.indexOf(item[DICTIONARY['aws'].billing.service]) === -1)
+ services.push(item[DICTIONARY['aws'].billing.service]);
});
if (!this.reportingGrid.filterConfiguration || !localStorage.getItem('report_config')) {
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 41c145e..04ea086 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
@@ -35,7 +35,7 @@
{{resource.status}}
</span>
</td>
- <td>{{ resource[DICTIONARY[resource.image].master_node_shape] }}</td>
+ <td>{{ resource[DICTIONARY[PROVIDER][resource.image].master_node_shape] }}</td>
</tr>
</table>
<div class="detail-info content-box" *ngIf="!resource.error_message">
@@ -49,7 +49,7 @@
<div class="col">
<p>Cluster version:</p>
</div>
- <div class="col"><span>{{ resource[DICTIONARY.cluster_version] }}</span></div>
+ <div class="col"><span>{{ resource[DICTIONARY[PROVIDER].cluster_version] }}</span></div>
</div>
<div class="row-wrap">
<div class="col">
@@ -63,34 +63,34 @@
</div>
<div class="row-wrap">
<div class="col"
- *ngIf="DICTIONARY.cloud_provider === 'gcp' && resource.image === 'docker.dlab-dataengine-service'; else inst">
- <p>{{ DICTIONARY[resource.image].master_instance_number }}:</p>
+ *ngIf="DICTIONARY[PROVIDER].cloud_provider === 'gcp' && resource.image === 'docker.dlab-dataengine-service'; else inst">
+ <p>Master instance number:</p>
</div>
<ng-template #inst>
<div class="col">
- <p>{{ DICTIONARY[resource.image].instance_number }}:</p>
+ <p>Total instance number:</p>
</div>
</ng-template>
- <div class="col"><span>{{ resource[DICTIONARY[resource.image].total_instance_number] }}</span></div>
+ <div class="col"><span>{{ resource[DICTIONARY[PROVIDER][resource.image].total_instance_number] }}</span></div>
</div>
<div class="row-wrap"
- *ngIf="DICTIONARY.cloud_provider === 'gcp' && resource.image === 'docker.dlab-dataengine-service'">
+ *ngIf="DICTIONARY[PROVIDER].cloud_provider === 'gcp' && resource.image === 'docker.dlab-dataengine-service'">
<div class="col">
- <p>{{ DICTIONARY[resource.image].slave_instance_number }}:</p>
+ <p>Slave instance number:</p>
</div>
- <div class="col"><span>{{ resource[DICTIONARY[resource.image].total_slave_instance_number] }}</span></div>
+ <div class="col"><span>{{ resource[DICTIONARY[PROVIDER][resource.image].total_slave_instance_number] }}</span></div>
</div>
<div class="row-wrap">
<div class="col">
- <p>{{ DICTIONARY[resource.image].data_engine_master_instance_size }}:</p>
+ <p>Master instance size:</p>
</div>
- <div class="col"><span>{{ resource[DICTIONARY[resource.image].master_node_shape] }}</span></div>
+ <div class="col"><span>{{ resource[DICTIONARY[PROVIDER][resource.image].master_node_shape] }}</span></div>
</div>
<div class="row-wrap" *ngIf="resource.image === 'docker.dlab-dataengine-service'">
<div class="col">
- <p>{{ DICTIONARY[resource.image].data_engine_slave_instance_size }}:</p>
+ <p>Slave instance size:</p>
</div>
- <div class="col"><span>{{ resource[DICTIONARY[resource.image].slave_node_shape] }}</span></div>
+ <div class="col"><span>{{ resource[DICTIONARY[PROVIDER][resource.image].slave_node_shape] }}</span></div>
</div>
<div *ngIf="resource.status === 'running'">
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 cc0211b..75ea01e 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
@@ -35,6 +35,7 @@ import { CLUSTER_CONFIGURATION } from '../computational-resource-create-dialog/c
export class DetailComputationalResourcesComponent implements OnInit {
readonly DICTIONARY = DICTIONARY;
+ readonly PROVIDER = this.data.environment.cloud_provider;
resource: any;
environment: any;
@@ -55,7 +56,9 @@ export class DetailComputationalResourcesComponent implements OnInit {
) { }
ngOnInit() {
- this.open(this.data.environment, this.data.resource)
+ this.open(this.data.environment, this.data.resource);
+
+ console.log(this.PROVIDER);
}
public open(environment, resource): void {
@@ -63,6 +66,7 @@ export class DetailComputationalResourcesComponent implements OnInit {
this.resource = resource;
this.environment = environment;
+
this.upTimeInHours = (this.resource.up_time) ? DateUtils.diffBetweenDatesInHours(this.resource.up_time) : 0;
this.upTimeSince = (this.resource.up_time) ? new Date(this.resource.up_time).toString() : '';
this.initFormModel();
@@ -87,14 +91,14 @@ export class DetailComputationalResourcesComponent implements OnInit {
public getClusterConfiguration(): void {
this.dataengineConfigurationService
- .getClusterConfiguration(this.environment.name, this.resource.computational_name)
+ .getClusterConfiguration(this.environment.name, this.resource.computational_name, this.PROVIDER)
.subscribe((result: any) => this.config = result,
error => this.toastr.error(error.message || 'Configuration loading failed!', 'Oops!'));
}
public editClusterConfiguration(data): void {
this.dataengineConfigurationService
- .editClusterConfiguration(data.configuration_parameters, this.environment.name, this.resource.computational_name)
+ .editClusterConfiguration(data.configuration_parameters, this.environment.name, this.resource.computational_name, this.PROVIDER)
.subscribe(result => {
this.dialogRef.close();
},
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 b7a7b03..8daf498 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
@@ -78,7 +78,7 @@
<span class="error" *ngIf="!resourceForm?.controls.cluster_alias_name.valid
&& resourceForm?.controls['cluster_alias_name'].dirty
&& !resourceForm?.controls['cluster_alias_name'].hasError('duplication')">
- Cluster name cannot be longer than {{DICTIONARY.max_cluster_name_length}} characters
+ 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
</span>
@@ -88,7 +88,7 @@
<div class="col">
<div class="control-group" *ngIf="selectedImage?.image">
- <label class="label">{{ DICTIONARY[selectedImage.image].instance_number }}</label>
+ <label class="label">Total instance number</label>
<div class="control">
<input type="number" class="form-control" min="{{minInstanceNumber}}" max="{{maxInstanceNumber}}"
formControlName="instance_number" (keypress)="CheckUtils.isNumberKey($event)" />
@@ -100,10 +100,10 @@
</div>
<div class="control-group" *ngIf="selectedImage?.image">
- <label class="label">{{ DICTIONARY[selectedImage.image].data_engine_master_instance_size }}</label>
+ <label class="label">Master instance size</label>
<div class="control selector-wrapper">
<mat-form-field>
- <mat-label>Select {{ DICTIONARY.notebook_instance_size }}</mat-label>
+ <mat-label>Select instance size</mat-label>
<mat-select formControlName="shape_master" disableOptionCentering>
<mat-optgroup *ngFor="let item of (selectedImage.computation_resources_shapes | keys)"
[label]="item.key | underscoreless">
@@ -121,10 +121,10 @@
<div class="control-group" *ngIf="selectedImage?.image"
[hidden]="selectedImage?.image === 'docker.dlab-dataengine'">
- <label class="label">{{ DICTIONARY[selectedImage.image].data_engine_slave_instance_size }}</label>
+ <label class="label">Slave instance size</label>
<div class="control selector-wrapper">
<mat-form-field>
- <mat-label>Select {{ DICTIONARY.notebook_instance_size }}</mat-label>
+ <mat-label>Select instance size</mat-label>
<mat-select formControlName="shape_slave" disableOptionCentering>
<mat-optgroup *ngFor="let item of (selectedImage.computation_resources_shapes | keys)"
[label]="item.key | underscoreless">
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 c289c5d..4d20b50 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
@@ -122,7 +122,7 @@ export class ComputationalResourceCreateDialogComponent implements OnInit {
}
public isAvailableSpots(): boolean {
- if (DICTIONARY.cloud_provider === 'aws' && this.selectedImage.image === 'docker.dlab-dataengine-service')
+ if (this.PROVIDER === 'aws' && this.selectedImage.image === 'docker.dlab-dataengine-service')
return !!Object.keys(this.filterAvailableSpots()).length;
return false;
@@ -141,10 +141,13 @@ export class ComputationalResourceCreateDialogComponent implements OnInit {
version: [''],
shape_master: ['', Validators.required],
shape_slave: [''],
- cluster_alias_name: ['', [Validators.required, Validators.pattern(PATTERNS.namePattern), Validators.maxLength(DICTIONARY.max_cluster_name_length),
+ cluster_alias_name: ['', [Validators.required, Validators.pattern(PATTERNS.namePattern),
+ Validators.maxLength(DICTIONARY[this.PROVIDER].max_cluster_name_length),
this.checkDuplication.bind(this)]],
instance_number: ['', [Validators.required, Validators.pattern(PATTERNS.nodeCountPattern), this.validInstanceNumberRange.bind(this)]],
- preemptible_instance_number: [0, Validators.compose([Validators.pattern(PATTERNS.integerRegex), this.validPreemptibleRange.bind(this)])],
+ preemptible_instance_number: [0,
+ Validators.compose([Validators.pattern(PATTERNS.integerRegex),
+ this.validPreemptibleRange.bind(this)])],
instance_price: [0, [this.validInstanceSpotRange.bind(this)]],
configuration_parameters: ['', [this.validConfiguration.bind(this)]],
custom_tag: [this.notebook_instance.tags.custom_tag]
@@ -157,17 +160,17 @@ export class ComputationalResourceCreateDialogComponent implements OnInit {
private getComputationalResourceLimits(): void {
if (this.selectedImage && this.selectedImage.image) {
- const activeImage = DICTIONARY[this.selectedImage.image];
+ const activeImage = DICTIONARY[this.PROVIDER][this.selectedImage.image];
this.minInstanceNumber = this.selectedImage.limits[activeImage.total_instance_number_min];
this.maxInstanceNumber = this.selectedImage.limits[activeImage.total_instance_number_max];
- if (DICTIONARY.cloud_provider === 'gcp' && this.selectedImage.image === 'docker.dlab-dataengine-service') {
+ if (this.PROVIDER === 'gcp' && this.selectedImage.image === 'docker.dlab-dataengine-service') {
this.maxInstanceNumber = this.selectedImage.limits[activeImage.total_instance_number_max] - 1;
this.minPreemptibleInstanceNumber = this.selectedImage.limits.min_dataproc_preemptible_instance_count;
}
- if (DICTIONARY.cloud_provider === 'aws' && this.selectedImage.image === 'docker.dlab-dataengine-service') {
+ if (this.PROVIDER === 'aws' && this.selectedImage.image === 'docker.dlab-dataengine-service') {
this.minSpotPrice = this.selectedImage.limits.min_emr_spot_instance_bid_pct;
this.maxSpotPrice = this.selectedImage.limits.max_emr_spot_instance_bid_pct;
@@ -183,7 +186,7 @@ export class ComputationalResourceCreateDialogComponent implements OnInit {
// Validation
private validInstanceNumberRange(control) {
if (control && control.value)
- if (DICTIONARY.cloud_provider === 'gcp' && this.selectedImage.image === 'docker.dlab-dataengine-service') {
+ if (this.PROVIDER === 'gcp' && this.selectedImage.image === 'docker.dlab-dataengine-service') {
this.validPreemptibleNumberRange();
return control.value >= this.minInstanceNumber && control.value <= this.maxInstanceNumber ? null : { valid: false };
} else {
@@ -262,7 +265,7 @@ export class ComputationalResourceCreateDialogComponent implements OnInit {
return obj;
}, {});
- if (DICTIONARY.cloud_provider !== 'azure') {
+ if (this.PROVIDER !== 'azure') {
const images = this.clusterTypes.filter(image => image.image === 'docker.dlab-dataengine');
this.clusterTypes = images;
this.selectedImage = this.clusterTypes[0];
diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/computational/computational-resource-create-dialog/computational-resource-create.model.ts b/services/self-service/src/main/resources/webapp/src/app/resources/computational/computational-resource-create-dialog/computational-resource-create.model.ts
index b38fcdf..a64857d 100644
--- a/services/self-service/src/main/resources/webapp/src/app/resources/computational/computational-resource-create-dialog/computational-resource-create.model.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/resources/computational/computational-resource-create-dialog/computational-resource-create.model.ts
@@ -22,7 +22,6 @@ import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { UserResourceService } from '../../../core/services';
-import { DICTIONARY } from '../../../../dictionary/global.dictionary';
@Injectable()
export class ComputationalResourceModel {
@@ -32,7 +31,7 @@ export class ComputationalResourceModel {
public createComputationalResource(parameters, image, env, spot, provider): Observable<{}> {
const config = parameters.configuration_parameters ? JSON.parse(parameters.configuration_parameters) : null;
- if (DICTIONARY.cloud_provider === 'aws' && image.image === 'docker.dlab-dataengine-service') {
+ if (provider === 'aws' && image.image === 'docker.dlab-dataengine-service') {
return this.userResourceService.createComputationalResource_DataengineService({
name: parameters.cluster_alias_name,
emr_instance_count: parameters.instance_number,
@@ -48,7 +47,7 @@ export class ComputationalResourceModel {
project: env.project,
custom_tag: parameters.custom_tag
}, provider);
- } else if (DICTIONARY.cloud_provider === 'gcp' && image.image === 'docker.dlab-dataengine-service') {
+ } else if (provider=== 'gcp' && image.image === 'docker.dlab-dataengine-service') {
return this.userResourceService.createComputationalResource_DataengineService({
template_name: image.template_name,
image: image.image,
diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/computational/computational-resources-list/computational-resources-list.component.ts b/services/self-service/src/main/resources/webapp/src/app/resources/computational/computational-resources-list/computational-resources-list.component.ts
index bd175a6..f7bfa1d 100644
--- a/services/self-service/src/main/resources/webapp/src/app/resources/computational/computational-resources-list/computational-resources-list.component.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/resources/computational/computational-resources-list/computational-resources-list.component.ts
@@ -54,13 +54,13 @@ export class ComputationalResourcesListComponent {
dialogRef.afterClosed().subscribe(result => {
if (result && action === 'stop') {
this.userResourceService
- .toggleStopStartAction(this.environment.project, this.environment.name, resource.computational_name, action)
+ .toggleStopStartAction(this.environment.project, this.environment.name, resource.computational_name, action, this.environment.cloud_provider)
.subscribe(() => {
this.rebuildGrid();
});
} else if (result && action === 'terminate') {
this.userResourceService
- .suspendComputationalResource(this.environment.name, resource.computational_name)
+ .suspendComputationalResource(this.environment.name, resource.computational_name, this.environment.cloud_provider)
.subscribe(() => {
this.rebuildGrid();
});
@@ -68,7 +68,7 @@ export class ComputationalResourcesListComponent {
});
} else if (action === 'start') {
this.userResourceService
- .toggleStopStartAction(this.environment.project, this.environment.name, resource.computational_name, 'start')
+ .toggleStopStartAction(this.environment.project, this.environment.name, resource.computational_name, 'start', this.environment.cloud_provider)
.subscribe(
() => this.rebuildGrid(),
error => this.toastr.error(error.message || 'Computational resource starting failed!', 'Oops!'));
@@ -76,12 +76,14 @@ export class ComputationalResourcesListComponent {
}
public detailComputationalResources(environment, resource): void {
- this.dialog.open(DetailComputationalResourcesComponent, { data: { environment, resource }, panelClass: 'modal-sm' })
+ this.dialog.open(DetailComputationalResourcesComponent, { data:
+ { environment, resource }, panelClass: 'modal-sm' })
.afterClosed().subscribe(() => this.rebuildGrid());
- };
+ }
public openScheduleDialog(resource) {
- this.dialog.open(SchedulerComponent, { data: { notebook: this.environment, type: 'СOMPUTATIONAL', resource }, panelClass: 'modal-xl-s' })
+ this.dialog.open(SchedulerComponent, { data:
+ { notebook: this.environment, type: 'СOMPUTATIONAL', resource }, panelClass: 'modal-xl-s' })
.afterClosed().subscribe(() => this.rebuildGrid());
}
}
@@ -100,9 +102,9 @@ export class ComputationalResourcesListComponent {
<span class="strong" matTooltip="{{ data.resource.computational_name }}"
[matTooltipShowDelay]="2000"
matTooltipPosition="left"
- >
+ >
{{ data.resource.computational_name }}
- </span> will be
+ </span> will be
<span *ngIf="data.action === 'terminate'"> decommissioned.</span>
<span *ngIf="data.action === 'stop'">stopped.</span>
</div>
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 b3510c4..1e7c25c 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
@@ -19,7 +19,7 @@
<div class="ami-dialog" id="dialog-box">
<header class="dialog-header">
- <h4 class="modal-title">Create {{ DICTIONARY.image }}</h4>
+ <h4 class="modal-title">Create image</h4>
<button type="button" class="close" (click)="dialogRef.close()">×</button>
</header>
<div class="dialog-content">
@@ -28,13 +28,13 @@
<div class="control-group">
<label class="label">Name</label>
<div class="control">
- <input type="text" formControlName="name" placeholder="Enter {{ DICTIONARY.image }} name">
+ <input type="text" formControlName="name" placeholder="Enter image name">
<span class="error" *ngIf="createAMIForm.controls['name'].hasError('duplication')">This
- {{ DICTIONARY.image }} name already exists in project.</span>
+ image name already exists in project.</span>
<span class="error"
*ngIf="!createAMIForm.valid && createAMIForm.controls['name'].dirty && !createAMIForm.controls['name'].hasError('duplication')">
- {{ DICTIONARY.image }} name
- <span *ngIf="DICTIONARY.cloud_provider === 'azure'"> cannot be longer than 10 characters and</span>
+ image name
+ <span *ngIf="provider === 'azure'"> cannot be longer than 10 characters and</span>
can only contain letters, numbers, hyphens and '_'</span>
</div>
</div>
diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/ami-create-dialog/ami-create-dialog.component.ts b/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/ami-create-dialog/ami-create-dialog.component.ts
index 430f6cb..ff17382 100644
--- a/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/ami-create-dialog/ami-create-dialog.component.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/ami-create-dialog/ami-create-dialog.component.ts
@@ -35,7 +35,7 @@ export class AmiCreateDialogComponent implements OnInit {
readonly DICTIONARY = DICTIONARY;
public notebook: any;
public createAMIForm: FormGroup;
-
+ public provider: string;
namePattern = '[-_a-zA-Z0-9]+';
delimitersRegex = /[-_]?/g;
imagesList: any;
@@ -50,6 +50,7 @@ export class AmiCreateDialogComponent implements OnInit {
ngOnInit() {
this.notebook = this.data;
+ this.provider = this.data.cloud_provider;
this.initFormModel();
this._userResource.getImagesList(this.data.project).subscribe(res => this.imagesList = res);
@@ -58,7 +59,7 @@ export class AmiCreateDialogComponent implements OnInit {
public assignChanges(data) {
this._userResource.createAMI(data).subscribe(
response => response.status === HTTP_STATUS_CODES.ACCEPTED && this.dialogRef.close(),
- error => this.toastr.error(error.message || `${DICTIONARY.image.toLocaleUpperCase()} creation failed!`, 'Oops!'));
+ error => this.toastr.error(error.message || `Image creation failed!`, 'Oops!'));
}
private initFormModel(): void {
@@ -70,7 +71,7 @@ export class AmiCreateDialogComponent implements OnInit {
}
private providerMaxLength(control) {
- if (DICTIONARY.cloud_provider !== 'aws')
+ if (control && control.value)
return control.value.length <= 10 ? null : { valid: false };
}
diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/cost-details-dialog/cost-details-dialog.component.html b/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/cost-details-dialog/cost-details-dialog.component.html
index 700cc54..95ae591 100644
--- a/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/cost-details-dialog/cost-details-dialog.component.html
+++ b/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/cost-details-dialog/cost-details-dialog.component.html
@@ -34,25 +34,25 @@
<div class="billing-detail content-box">
<mat-list>
<mat-list-item class="list-header">
- <div class="resource-name ellipsis" [ngClass]="{ 'wide-name-field' : DICTIONARY.cloud_provider === 'azure' }">Name</div>
- <div class="service">{{ DICTIONARY.service }}</div>
- <div class="resource-type" *ngIf="DICTIONARY.cloud_provider === 'aws'">{{ DICTIONARY.type }}</div>
+ <div class="resource-name ellipsis" [ngClass]="{ 'wide-name-field' : provider === 'azure' }">Name</div>
+ <div class="service">{{ DICTIONARY[provider].service }}</div>
+ <div class="resource-type" *ngIf="provider === 'aws'">Type</div>
<div class="cost-currency">Cost</div>
<div class="usage-date-start">Start</div>
<div class="usage-date-end">End</div>
</mat-list-item>
<div class="scrolling-content" id="scrolling">
<mat-list-item *ngFor="let item of notebook.billing">
- <div class="resource-name" [ngClass]="{ 'wide-name-field' : DICTIONARY.cloud_provider === 'azure' }"
- matTooltip="{{ item[DICTIONARY.billing.resourceName] }}"
+ <div class="resource-name" [ngClass]="{ 'wide-name-field' : provider === 'azure' }"
+ matTooltip="{{ item[DICTIONARY[provider].billing.resourceName] }}"
matTooltipPosition="above">
- {{ item[DICTIONARY.billing.resourceName] }}
+ {{ item[DICTIONARY[provider].billing.resourceName] }}
</div>
- <div class="service">{{ item[DICTIONARY.billing.service] }}</div>
- <div class="resource-type" *ngIf="DICTIONARY.cloud_provider === 'aws'">{{ item[DICTIONARY.billing.type] }}</div>
- <div class="cost-currency">{{ item[DICTIONARY.billing.cost] }} {{ item[DICTIONARY.billing.currencyCode] }}</div>
- <div class="usage-date-start">{{ item[DICTIONARY.billing.dateFrom] | date }}</div>
- <div class="usage-date-end">{{ item[DICTIONARY.billing.dateTo] | date }}</div>
+ <div class="service">{{ item[DICTIONARY[provider].billing.service] }}</div>
+ <div class="resource-type" *ngIf="provider === 'aws'">{{ item[DICTIONARY[provider].billing.type] }}</div>
+ <div class="cost-currency">{{ item[DICTIONARY[provider].billing.cost] }} {{ item[DICTIONARY[provider].billing.currencyCode] }}</div>
+ <div class="usage-date-start">{{ item[DICTIONARY[provider].billing.dateFrom] | date }}</div>
+ <div class="usage-date-end">{{ item[DICTIONARY[provider].billing.dateTo] | date }}</div>
</mat-list-item>
</div>
</mat-list>
diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/cost-details-dialog/cost-details-dialog.component.ts b/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/cost-details-dialog/cost-details-dialog.component.ts
index 3243b77..e115cad 100644
--- a/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/cost-details-dialog/cost-details-dialog.component.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/cost-details-dialog/cost-details-dialog.component.ts
@@ -29,6 +29,7 @@ import { DICTIONARY } from '../../../../dictionary/global.dictionary';
export class CostDetailsDialogComponent implements OnInit {
readonly DICTIONARY = DICTIONARY;
public notebook: any;
+ public provider: string;
constructor(
@Inject(MAT_DIALOG_DATA) public data: any,
@@ -37,5 +38,6 @@ export class CostDetailsDialogComponent implements OnInit {
ngOnInit() {
this.notebook = this.data;
+ this.provider = this.notebook.cloud_provider;
}
}
diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/create-environment/create-environment.component.html b/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/create-environment/create-environment.component.html
index 0606e54..d532a10 100644
--- a/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/create-environment/create-environment.component.html
+++ b/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/create-environment/create-environment.component.html
@@ -85,10 +85,10 @@
</div>
<div class="control-group" *ngIf="images && images.length > 0">
- <label class="label">Select {{ DICTIONARY.image }}</label>
+ <label class="label">Select image</label>
<div class="control selector-wrapper">
<mat-form-field>
- <mat-label>Select {{ DICTIONARY.image }}</mat-label>
+ <mat-label>Select image</mat-label>
<mat-select formControlName="notebook_image_name" disableOptionCentering>
<mat-option [value]="null">None</mat-option>
<mat-option *ngFor="let image of images" [value]="image.name">{{ image.name }}</mat-option>
@@ -114,17 +114,17 @@
<span class="error" *ngIf="!createExploratoryForm?.controls.name.valid
&& createExploratoryForm?.controls['name'].dirty
&& !createExploratoryForm?.controls['name'].hasError('duplication')">Name
- <span *ngIf="DICTIONARY.cloud_provider !== 'aws'">cannot be longer than 10 characters and</span> can only
+ 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">
- <label class="label">{{ DICTIONARY.notebook_instance_size }}</label>
+ <label class="label">Instance size</label>
<div class="control selector-wrapper" [ngClass]="{ 'not-active': !currentTemplate }">
<mat-form-field>
- <mat-label>Select {{ DICTIONARY.notebook_instance_size }}</mat-label>
+ <mat-label>Select instance size</mat-label>
<mat-select formControlName="shape" disableOptionCentering [disabled]="!currentTemplate"
panelClass="create-resources-shapes">
<mat-optgroup *ngFor="let item of (shapes | keys)" [label]="item.key | underscoreless">
diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/create-environment/create-environment.component.ts b/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/create-environment/create-environment.component.ts
index 5b907f4..eb32cec 100644
--- a/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/create-environment/create-environment.component.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/create-environment/create-environment.component.ts
@@ -152,7 +152,7 @@ export class ExploratoryEnvironmentCreateComponent implements OnInit {
}
private providerMaxLength(control) {
- if (DICTIONARY.cloud_provider !== 'aws')
+ if (control && control.value)
return control.value.length <= 10 ? null : { valid: false };
}
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 22802ae..4977b22 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
@@ -59,23 +59,23 @@
<p class="flex" *ngIf="notebook.password">Password: <span
class="strong">{{ notebook.password }}</span></p>
- <p class="m-top-30">{{ DICTIONARY.personal_storage }}: </p>
+ <p class="m-top-30">{{ DICTIONARY[PROVIDER].personal_storage }}: </p>
<div class="links_block">
- <p *ngIf="DICTIONARY.cloud_provider === 'azure' && notebook.account_name">{{ DICTIONARY.account }}
+ <p *ngIf="DICTIONARY[PROVIDER].cloud_provider === 'azure' && notebook.account_name">{{ DICTIONARY[PROVIDER].account }}
<span class="bucket-info">{{ notebook.account_name}}</span></p>
- <p *ngIf="notebook.bucket_name">{{ DICTIONARY.container }} <span
+ <p *ngIf="notebook.bucket_name">{{ DICTIONARY[PROVIDER].container }} <span
class="bucket-info">{{ notebook.bucket_name }}</span></p>
</div>
- <p>{{ DICTIONARY.collaboration_storage }}: </p>
+ <p>Shared endpoint bucket: </p>
<div class="links_block">
- <p *ngIf="DICTIONARY.cloud_provider === 'azure' && notebook.shared_account_name">{{ DICTIONARY.account }}
+ <p *ngIf="DICTIONARY[PROVIDER].cloud_provider === 'azure' && notebook.shared_account_name">{{ DICTIONARY[PROVIDER].account }}
<span class="bucket-info">{{ notebook.shared_account_name}}</span></p>
- <p *ngIf="notebook.shared_bucket_name">{{ DICTIONARY.container }}
+ <p *ngIf="notebook.shared_bucket_name">{{ DICTIONARY[PROVIDER].container }}
<span class="bucket-info">{{ notebook.shared_bucket_name }}</span></p>
</div>
<br />
- <div *ngIf="DICTIONARY.cloud_provider === 'azure' && notebook.datalake_name">
+ <div *ngIf="DICTIONARY[PROVIDER].cloud_provider === 'azure' && notebook.datalake_name">
<p>Data Lake Store: </p>
<div class="links_block">
<p>Data Lake Store Account: <span class="bucket-info">{{ notebook.datalake_name }}</span></p>
diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/detail-dialog/detail-dialog.component.ts b/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/detail-dialog/detail-dialog.component.ts
index fa05b52..1fa43ca 100644
--- a/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/detail-dialog/detail-dialog.component.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/detail-dialog/detail-dialog.component.ts
@@ -35,6 +35,7 @@ import { CLUSTER_CONFIGURATION } from '../../computational/computational-resourc
export class DetailDialogComponent implements OnInit {
readonly DICTIONARY = DICTIONARY;
+ readonly PROVIDER = this.data.cloud_provider;
notebook: any;
upTimeInHours: number;
upTimeSince: string = '';
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 d71b66f..1a13600 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
@@ -62,7 +62,7 @@
</ng-container>
<ng-container matColumnDef="shapes">
<th mat-header-cell *matHeaderCellDef class="shape-col">
- <span class="label"> {{ DICTIONARY.instance_size }} </span>
+ <span class="label"> Size </span>
<button mat-icon-button aria-label="More" class="ar" (click)="toggleFilterRow()">
<i class="material-icons">
<span *ngIf="filtering && filterForm.shapes.length > 0 && !collapseFilterRow">filter_list</span>
@@ -78,7 +78,7 @@
</ng-container>
<ng-container matColumnDef="resources">
<th mat-header-cell *matHeaderCellDef class="resources-col">
- <span class="label"> {{ DICTIONARY.computational_resource }} </span>
+ <span class="label"> Computational resources </span>
<button mat-icon-button aria-label="More" class="ar" (click)="toggleFilterRow()">
<i class="material-icons">
<span *ngIf="filtering && filterForm.resources.length > 0 && !collapseFilterRow">filter_list</span>
@@ -197,7 +197,7 @@
<li (click)="exploratoryAction(element, 'ami')"
*ngIf="element.status === 'running' && element.cloud_provider !== 'gcp' && element.image !== 'docker.dlab-superset' && element.image !== 'docker.dlab-jupyterlab'">
<i class="material-icons">view_module</i>
- <span>Create {{ DICTIONARY.image }}</span>
+ <span>Create {{ DICTIONARY[element.cloud_provider].image }}</span>
</li>
<li (click)="exploratoryAction(element, 'install')"
*ngIf="element.image !== 'docker.dlab-superset' && element.image !== 'docker.dlab-jupyterlab'">
@@ -234,7 +234,7 @@
<ng-container matColumnDef="shape-filter">
<th mat-header-cell *matHeaderCellDef class="shape-col">
<multi-select-dropdown (selectionChange)="onUpdate($event)"
- [type]="DICTIONARY.cloud_provider === 'aws' ? 'shapes': 'sizes'" [items]="filterConfiguration.shapes"
+ [type]="'sizes'" [items]="filterConfiguration.shapes"
[model]="filterForm.shapes"></multi-select-dropdown>
</th>
</ng-container>
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 8c49782..78bb38a 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
@@ -39,7 +39,7 @@ import { ConfirmationDialogComponent } from '../../shared/modal-dialog/confirmat
import { SchedulerComponent } from '../scheduler';
import { DICTIONARY } from '../../../dictionary/global.dictionary';
-import {ProgressBarService} from "../../core/services/progress-bar.service";
+import {ProgressBarService} from '../../core/services/progress-bar.service';
@Component({
selector: 'resources-grid',
@@ -72,9 +72,9 @@ export class ResourcesGridComponent implements OnInit {
public filteringColumns: Array<any> = [
{ title: 'Environment name', name: 'name', class: 'name-col', filter_class: 'name-filter', filtering: true },
{ title: 'Status', name: 'statuses', class: 'status-col', filter_class: 'status-filter', filtering: true },
- { title: DICTIONARY.instance_size, name: 'shapes', class: 'shape-col', filter_class: 'shape-filter', filtering: true },
+ { title: 'Instance size', name: 'shapes', class: 'shape-col', filter_class: 'shape-filter', filtering: true },
{ title: 'Tags', name: 'tag', class: 'tag-col', filter_class: 'tag-filter', filtering: false },
- { title: DICTIONARY.computational_resource, name: 'resources', class: 'resources-col', filter_class: 'resource-filter', filtering: true },
+ { title: 'Computational resource', name: 'resources', class: 'resources-col', filter_class: 'resource-filter', filtering: true },
{ title: 'Cost', name: 'cost', class: 'cost-col', filter_class: 'cost-filter', filtering: false },
{ title: '', name: 'actions', class: 'actions-col', filter_class: 'action-filter', filtering: false }
];
@@ -91,12 +91,11 @@ export class ResourcesGridComponent implements OnInit {
) { }
ngOnInit(): void {
-
this.buildGrid();
}
public buildGrid(): void {
- setTimeout(() => {this.progressBarService.startProgressBar()} , 0);
+ setTimeout(() => {this.progressBarService.startProgressBar(); } , 0);
this.userResourceService.getUserProvisionedResources()
.subscribe((result: any) => {
this.environments = ExploratoryModel.loadEnvironments(result);
@@ -127,14 +126,15 @@ export class ResourcesGridComponent implements OnInit {
}
public containsNotebook(notebook_name: string): boolean {
- if (notebook_name)
+ if (notebook_name && this.environments && this.environments.length ) {
return this.environments
.filter(project => project.exploratory
.some(item => CheckUtils.delimitersFiltering(notebook_name) === CheckUtils.delimitersFiltering(item.name))).length > 0;
+ }
}
public isResourcesInProgress(notebook) {
- let env = this.getResourceByName(notebook.name);
+ const env = this.getResourceByName(notebook.name);
if (env && env.resources.length) {
return env.resources.filter(item => (item.status !== 'failed' && item.status !== 'terminated'
@@ -194,6 +194,7 @@ export class ResourcesGridComponent implements OnInit {
.afterClosed().subscribe(() => this.buildGrid());
} else if (action === 'ami') {
this.dialog.open(AmiCreateDialogComponent, { data: data, panelClass: 'modal-sm' })
+
.afterClosed().subscribe(() => this.buildGrid());
}
}
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 5540271..063c7fc 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
@@ -55,6 +55,7 @@ export class ExploratoryModel {
public static loadEnvironments(data: Array<any>) {
if (data) {
return data.map((value) => {
+ const provider = value.endpoints[0].cloudProvider.toLowerCase();
return {
project: value.project,
exploratory: value.exploratory.map(el => new ExploratoryModel(el.exploratory_name,
@@ -69,24 +70,24 @@ export class ExploratoryModel {
el.private_ip,
el.exploratory_user,
el.exploratory_pass,
- value.shared[el.endpoint][DICTIONARY.bucket_name],
- value.shared[el.endpoint][DICTIONARY.shared_bucket_name],
+ value.shared[el.endpoint][DICTIONARY[provider].bucket_name],
+ value.shared[el.endpoint][DICTIONARY[provider].shared_bucket_name],
el.error_message,
- el[DICTIONARY.billing.cost],
- el[DICTIONARY.billing.currencyCode],
+ el[DICTIONARY[provider].billing.cost],
+ el[DICTIONARY[provider].billing.currencyCode],
el.billing,
el.libs,
- value.shared[el.endpoint][DICTIONARY.user_storage_account_name],
- value.shared[el.endpoint][DICTIONARY.shared_storage_account_name],
- value.shared[el.endpoint][DICTIONARY.datalake_name],
- value.shared[el.endpoint][DICTIONARY.datalake_user_directory_name],
- value.shared[el.endpoint][DICTIONARY.datalake_shared_directory_name],
+ value.shared[el.endpoint][DICTIONARY[provider].user_storage_account_name],
+ value.shared[el.endpoint][DICTIONARY[provider].shared_storage_account_name],
+ value.shared[el.endpoint][DICTIONARY[provider].datalake_name],
+ value.shared[el.endpoint][DICTIONARY[provider].datalake_user_directory_name],
+ value.shared[el.endpoint][DICTIONARY[provider].datalake_shared_directory_name],
el.project,
el.endpoint,
el.tags,
- value.endpoints[0].cloudProvider.toLowerCase()
+ provider,
))
- }
+ };
});
}
}
@@ -94,5 +95,5 @@ export class ExploratoryModel {
export interface Exploratory {
project: string;
- exploratory: ExploratoryModel[]
+ exploratory: ExploratoryModel[];
}
diff --git a/services/self-service/src/main/resources/webapp/src/app/shared/navbar/navbar.component.ts b/services/self-service/src/main/resources/webapp/src/app/shared/navbar/navbar.component.ts
index 37ae148..78ddd3c 100644
--- a/services/self-service/src/main/resources/webapp/src/app/shared/navbar/navbar.component.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/shared/navbar/navbar.component.ts
@@ -75,7 +75,6 @@ import {ProgressBarService} from "../../core/services/progress-bar.service";
encapsulation: ViewEncapsulation.None
})
export class NavbarComponent implements OnInit, OnDestroy {
- readonly PROVIDER = DICTIONARY.cloud_provider;
private readonly CHECK_ACTIVE_SCHEDULE_TIMEOUT: number = 55000;
private readonly CHECK_ACTIVE_SCHEDULE_PERIOD: number = 15;
diff --git a/services/self-service/src/main/resources/webapp/src/dictionary/aws.dictionary.ts b/services/self-service/src/main/resources/webapp/src/dictionary/aws.dictionary.ts
index a37445f..f989415 100644
--- a/services/self-service/src/main/resources/webapp/src/dictionary/aws.dictionary.ts
+++ b/services/self-service/src/main/resources/webapp/src/dictionary/aws.dictionary.ts
@@ -17,15 +17,11 @@
* under the License.
*/
-export const NAMING_CONVENTION = {
+export const NAMING_CONVENTION_AWS = {
'cloud_provider': 'aws',
- 'use_ldap': true,
- 'notebook_instance_size': 'Instance shape',
'personal_storage': 'Project bucket',
- 'collaboration_storage': 'Shared endpoint bucket',
'account': '',
'container': '',
- 'data_engine': 'Deploy Spark Server / Deploy EMR',
'image': 'AMI',
'data_engine_master_instance_size': 'Master instance shape',
'data_engine_slave_instance_size': 'Slave instance shape',
@@ -52,7 +48,6 @@ export const NAMING_CONVENTION = {
'service': 'Service',
'type': 'Type',
'instance_size': 'Shape',
- 'computational_resource': 'Computational resources',
'user_storage_account_name': '',
'shared_storage_account_name': '',
'bucket_name': 'user_own_bicket_name',
@@ -65,9 +60,6 @@ export const NAMING_CONVENTION = {
'total_instance_number_max': 'max_emr_instance_count',
'min_emr_spot_instance_bid_pct': 'min_emr_spot_instance_bid_pct',
'max_emr_spot_instance_bid_pct': 'max_emr_spot_instance_bid_pct',
- 'data_engine_master_instance_size': 'Master instance shape',
- 'data_engine_slave_instance_size': 'Slave instance shape',
- 'instance_number': 'Total instance number',
'master_node_shape': 'master_node_shape',
'slave_node_shape': 'slave_node_shape',
'total_instance_number': 'total_instance_number',
@@ -76,40 +68,9 @@ export const NAMING_CONVENTION = {
'total_instance_number_min': 'min_spark_instance_count',
'total_instance_number_max': 'max_spark_instance_count',
'data_engine_master_instance_size': 'Node shape',
- 'instance_number': 'Total node number',
'master_node_shape': 'dataengine_instance_shape',
'total_instance_number': 'dataengine_instance_count',
},
- 'max_project_name_length': 40
};
-export class ReportingConfigModel {
- static getDefault(): ReportingConfigModel {
- return new ReportingConfigModel([], [], [], [], [], '', '', '', []);
- }
-
- constructor(
- public user: Array<string>,
- public product: Array<string>,
- public resource_type: Array<string>,
- public status: Array<string>,
- public shape: Array<string>,
- public date_start: string,
- public date_end: string,
- public dlab_id: string,
- public project?: Array<string>
- ) { }
-
- defaultConfigurations(): void {
- this.user = [];
- this.product = [];
- this.resource_type = [];
- this.status = [];
- this.shape = [];
- this.date_start = '';
- this.date_end = '';
- this.dlab_id = '';
- this.project = [];
- }
-}
diff --git a/services/self-service/src/main/resources/webapp/src/dictionary/azure.dictionary.ts b/services/self-service/src/main/resources/webapp/src/dictionary/azure.dictionary.ts
index 819c181..67ac627 100644
--- a/services/self-service/src/main/resources/webapp/src/dictionary/azure.dictionary.ts
+++ b/services/self-service/src/main/resources/webapp/src/dictionary/azure.dictionary.ts
@@ -17,22 +17,18 @@
* under the License.
*/
-export const NAMING_CONVENTION = {
+export const NAMING_CONVENTION_AZURE = {
'cloud_provider': 'azure',
- 'use_ldap': true,
- 'notebook_instance_size': 'Virtual machine size',
'personal_storage': 'Project bucket',
'collaboration_storage': 'Shared endpoint bucket',
'account': 'Account:',
'container': 'Container:',
- 'data_engine': 'Deploy Spark Server / Deploy HDInsight',
'image': 'image',
'data_engine_master_instance_size': 'Head node size',
'data_engine_slave_instance_size': 'Worker node size',
'master_node_shape': 'azure_dataengine_master_size',
'slave_node_shape': 'azure_dataengine_slave_size',
'total_instance_number': 'dataengine_instance_count',
-
'spot_instance': 'Low-priority virtual machines',
'cluster_version': '',
'max_cluster_name_length': 10,
@@ -53,7 +49,6 @@ export const NAMING_CONVENTION = {
'service': 'Category',
'type': '',
'instance_size': 'Size',
- 'computational_resource': 'Computational resources',
'user_storage_account_name': 'user_storage_account_name',
'shared_storage_account_name': 'shared_storage_account_name',
'bucket_name': 'user_container_name',
@@ -66,9 +61,6 @@ export const NAMING_CONVENTION = {
'total_instance_number_max': 'max_emr_instance_count',
'min_emr_spot_instance_bid_pct': 'min_emr_spot_instance_bid_pct',
'max_emr_spot_instance_bid_pct': 'max_emr_spot_instance_bid_pct',
- 'data_engine_master_instance_size': 'Master instance shape',
- 'data_engine_slave_instance_size': 'Slave instance shape',
- 'instance_number': 'Total instance number',
'master_node_shape': 'master_node_shape',
'slave_node_shape': 'slave_node_shape',
'total_instance_number': 'total_instance_number',
@@ -77,40 +69,8 @@ export const NAMING_CONVENTION = {
'total_instance_number_min': 'min_spark_instance_count',
'total_instance_number_max': 'max_spark_instance_count',
'data_engine_master_instance_size': 'Node size',
- 'instance_number': 'Total node number',
'master_node_shape': 'dataengine_instance_shape',
'total_instance_number': 'dataengine_instance_count'
},
- 'max_project_name_length': 30
};
-export class ReportingConfigModel {
-
- static getDefault(): ReportingConfigModel {
- return new ReportingConfigModel([], [], [], [], [], '', '', '', []);
- }
-
- constructor(
- public user: Array<string>,
- public category: Array<string>,
- public resource_type: Array<string>,
- public status: Array<string>,
- public size: Array<string>,
- public date_start: string,
- public date_end: string,
- public dlab_id: string,
- public project?: Array<string>
- ) { }
-
- defaultConfigurations(): void {
- this.user = [];
- this.category = [];
- this.resource_type = [];
- this.status = [];
- this.size = [];
- this.date_start = '';
- this.date_end = '';
- this.dlab_id = '';
- this.project = [];
- }
-}
diff --git a/services/self-service/src/main/resources/webapp/src/dictionary/gcp.dictionary.ts b/services/self-service/src/main/resources/webapp/src/dictionary/gcp.dictionary.ts
index 10d7cf2..0d02f63 100644
--- a/services/self-service/src/main/resources/webapp/src/dictionary/gcp.dictionary.ts
+++ b/services/self-service/src/main/resources/webapp/src/dictionary/gcp.dictionary.ts
@@ -17,23 +17,17 @@
* under the License.
*/
-export const NAMING_CONVENTION = {
+export const NAMING_CONVENTION_GCP = {
'cloud_provider': 'gcp',
- 'use_ldap': true,
- 'notebook_instance_size': 'Instance type',
'personal_storage': 'Project bucket',
- 'collaboration_storage': 'Shared endpoint bucket',
'account': '',
'container': '',
- 'data_engine': 'Deploy Spark Server / Deploy Dataproc',
'image': 'Not available',
'data_engine_master_instance_size': 'Master machine type',
'data_engine_slave_instance_size': 'Slave machine type',
-
'master_node_shape': 'master_node_shape',
'slave_node_shape': 'slave_node_shape',
'total_instance_number': 'total_instance_number',
-
'spot_instance': 'Preemptible worker nodes',
'cluster_version': 'dataproc_version',
'max_cluster_name_length': 7,
@@ -54,7 +48,6 @@ export const NAMING_CONVENTION = {
'service': 'Product',
'type': 'Resource',
'instance_size': 'Type',
- 'computational_resource': 'Computational resources',
'user_storage_account_name': '',
'shared_storage_account_name': '',
'bucket_name': 'user_own_bucket_name',
@@ -67,9 +60,6 @@ export const NAMING_CONVENTION = {
'total_instance_number_max': 'max_instance_count',
'min_emr_spot_instance_bid_pct': 'min_emr_spot_instance_bid_pct',
'max_emr_spot_instance_bid_pct': 'max_emr_spot_instance_bid_pct',
- 'data_engine_master_instance_size': 'Master machine type',
- 'data_engine_slave_instance_size': 'Slave machine type',
- 'instance_number': 'Total machine count',
'master_instance_number': 'Master node count',
'slave_instance_number': 'Worker node count',
'master_node_shape': 'master_node_shape',
@@ -81,41 +71,10 @@ export const NAMING_CONVENTION = {
'total_instance_number_min': 'min_spark_instance_count',
'total_instance_number_max': 'max_spark_instance_count',
'data_engine_master_instance_size': 'Machine type',
- 'instance_number': 'Total machine number',
'master_instance_number': 'Master machine number',
'master_node_shape': 'dataengine_instance_shape',
'total_instance_number': 'dataengine_instance_count',
},
- 'max_project_name_length': 10
};
-export class ReportingConfigModel {
-
- static getDefault(): ReportingConfigModel {
- return new ReportingConfigModel([], [], [], [], [], '', '', '', []);
- }
-
- constructor(
- public user: Array<string>,
- public product: Array<string>,
- public resource_type: Array<string>,
- public status: Array<string>,
- public shape: Array<string>,
- public date_start: string,
- public date_end: string,
- public dlab_id: string,
- public project?: Array<string>
- ) { }
- defaultConfigurations(): void {
- this.user = [];
- this.product = [];
- this.resource_type = [];
- this.status = [];
- this.shape = [];
- this.date_start = '';
- this.date_end = '';
- this.dlab_id = '';
- this.project = [];
- }
-}
diff --git a/services/self-service/src/main/resources/webapp/src/dictionary/global.dictionary.ts b/services/self-service/src/main/resources/webapp/src/dictionary/global.dictionary.ts
index 6d0d8ea..a4a7005 100644
--- a/services/self-service/src/main/resources/webapp/src/dictionary/global.dictionary.ts
+++ b/services/self-service/src/main/resources/webapp/src/dictionary/global.dictionary.ts
@@ -19,8 +19,46 @@
// from './{{ aws | gcp | azure }}.dictionary';
-import { NAMING_CONVENTION } from './CLOUD_PROVIDER.dictionary';
+import { NAMING_CONVENTION_AWS } from './aws.dictionary';
+import { NAMING_CONVENTION_GCP } from './gcp.dictionary';
+import { NAMING_CONVENTION_AZURE } from './azure.dictionary';
+
+export const DICTIONARY = Object.freeze({
+ aws: NAMING_CONVENTION_AWS,
+ gcp: NAMING_CONVENTION_GCP,
+ azure: NAMING_CONVENTION_AZURE
+});
+
+export class ReportingConfigModel {
+
+ static getDefault(): ReportingConfigModel {
+ return new ReportingConfigModel([], [], [], [], [], '', '', '', []);
+ }
+
+ constructor(
+ public user: Array<string>,
+ public product: Array<string>,
+ public resource_type: Array<string>,
+ public status: Array<string>,
+ public shape: Array<string>,
+ public date_start: string,
+ public date_end: string,
+ public dlab_id: string,
+ public project?: Array<string>
+ ) { }
+
+ defaultConfigurations(): void {
+ this.user = [];
+ this.product = [];
+ this.resource_type = [];
+ this.status = [];
+ this.shape = [];
+ this.date_start = '';
+ this.date_end = '';
+ this.dlab_id = '';
+ this.project = [];
+ }
+}
+
-export * from './CLOUD_PROVIDER.dictionary';
-export const DICTIONARY = Object.freeze(NAMING_CONVENTION);
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@dlab.apache.org
For additional commands, e-mail: commits-help@dlab.apache.org