diff --git a/src/frontend/packages/core/src/features/cloud-foundry/edit-space/edit-space.component.spec.ts b/src/frontend/packages/core/src/features/cloud-foundry/edit-space/edit-space.component.spec.ts index 5d885983a3..d092e20514 100644 --- a/src/frontend/packages/core/src/features/cloud-foundry/edit-space/edit-space.component.spec.ts +++ b/src/frontend/packages/core/src/features/cloud-foundry/edit-space/edit-space.component.spec.ts @@ -6,6 +6,7 @@ import { generateTestCfEndpointServiceProvider, } from '../../../../test-framework/cloud-foundry-endpoint-service.helper'; import { ActiveRouteCfOrgSpace } from '../cf-page.types'; +import { CloudFoundryOrganizationService } from '../services/cloud-foundry-organization.service'; import { EditSpaceStepComponent } from './edit-space-step/edit-space-step.component'; import { EditSpaceComponent } from './edit-space.component'; @@ -17,7 +18,7 @@ describe('EditSpaceComponent', () => { TestBed.configureTestingModule({ declarations: [EditSpaceComponent, EditSpaceStepComponent], imports: [...BaseTestModules], - providers: [ActiveRouteCfOrgSpace, generateTestCfEndpointServiceProvider(), TabNavService] + providers: [ActiveRouteCfOrgSpace, generateTestCfEndpointServiceProvider(), TabNavService, CloudFoundryOrganizationService] }) .compileComponents(); })); diff --git a/src/frontend/packages/core/src/features/cloud-foundry/services/cloud-foundry-organization.service.ts b/src/frontend/packages/core/src/features/cloud-foundry/services/cloud-foundry-organization.service.ts index 0be8f48ddf..2df4967921 100644 --- a/src/frontend/packages/core/src/features/cloud-foundry/services/cloud-foundry-organization.service.ts +++ b/src/frontend/packages/core/src/features/cloud-foundry/services/cloud-foundry-organization.service.ts @@ -32,17 +32,14 @@ import { ActiveRouteCfOrgSpace } from '../cf-page.types'; import { getOrgRolesString } from '../cf.helpers'; import { CloudFoundryEndpointService } from './cloud-foundry-endpoint.service'; -export const createQuotaDefinition = (orgGuid: string): APIResource => ({ - entity: { - memory_limit: -1, - app_instance_limit: -1, - instance_memory_limit: -1, - name: 'None assigned', - organization_guid: orgGuid, - total_services: -1, - total_routes: -1 - }, - metadata: null +export const createQuotaDefinition = (orgGuid: string): IQuotaDefinition => ({ + memory_limit: -1, + app_instance_limit: -1, + instance_memory_limit: -1, + name: 'None assigned', + organization_guid: orgGuid, + total_services: -1, + total_routes: -1 }); @Injectable() diff --git a/src/frontend/packages/core/src/features/cloud-foundry/services/cloud-foundry-space.service.ts b/src/frontend/packages/core/src/features/cloud-foundry/services/cloud-foundry-space.service.ts index 4d52ed9d8e..4e90c98c17 100644 --- a/src/frontend/packages/core/src/features/cloud-foundry/services/cloud-foundry-space.service.ts +++ b/src/frontend/packages/core/src/features/cloud-foundry/services/cloud-foundry-space.service.ts @@ -1,6 +1,6 @@ import { Injectable } from '@angular/core'; import { Store } from '@ngrx/store'; -import { Observable } from 'rxjs'; +import { Observable, of } from 'rxjs'; import { filter, map, publishReplay, refCount, switchMap } from 'rxjs/operators'; import { GetSpace } from '../../../../../store/src/actions/space.actions'; @@ -30,7 +30,7 @@ import { fetchServiceInstancesCount } from '../../service-catalog/services-helpe import { ActiveRouteCfOrgSpace } from '../cf-page.types'; import { getSpaceRolesString } from '../cf.helpers'; import { CloudFoundryEndpointService } from './cloud-foundry-endpoint.service'; -import { createQuotaDefinition } from './cloud-foundry-organization.service'; +import { CloudFoundryOrganizationService, createQuotaDefinition } from './cloud-foundry-organization.service'; @Injectable() export class CloudFoundrySpaceService { @@ -39,7 +39,7 @@ export class CloudFoundrySpaceService { orgGuid: string; spaceGuid: string; userRole$: Observable; - quotaDefinition$: Observable>; + quotaDefinition$: Observable; allowSsh$: Observable; totalMem$: Observable; routes$: Observable[]>; @@ -59,7 +59,8 @@ export class CloudFoundrySpaceService { private cfUserService: CfUserService, private paginationMonitorFactory: PaginationMonitorFactory, private cfEndpointService: CloudFoundryEndpointService, - private cfUserProvidedServicesService: CloudFoundryUserProvidedServicesService + private cfUserProvidedServicesService: CloudFoundryUserProvidedServicesService, + private cfOrgService: CloudFoundryOrganizationService ) { this.spaceGuid = activeRouteCfOrgSpace.spaceGuid; @@ -133,13 +134,17 @@ export class CloudFoundrySpaceService { this.cfUserProvidedServicesService.fetchUserProvidedServiceInstancesCount(this.cfGuid, this.orgGuid, this.spaceGuid); this.routes$ = this.space$.pipe(map(o => o.entity.entity.routes)); this.allowSsh$ = this.space$.pipe(map(o => o.entity.entity.allow_ssh ? 'true' : 'false')); - this.quotaDefinition$ = this.space$.pipe(map(q => { - if (q.entity.entity.space_quota_definition) { - return q.entity.entity.space_quota_definition; - } else { - return createQuotaDefinition(this.orgGuid); - } - })); + this.quotaDefinition$ = this.space$.pipe( + map(q => q.entity.entity.space_quota_definition), + switchMap(def => def ? of(def.entity) : this.cfOrgService.quotaDefinition$), + map(def => def ? + { + ...def, + organization_guid: this.orgGuid + } : + createQuotaDefinition(this.orgGuid) + ) + ); } private initialiseAppObservables() { diff --git a/src/frontend/packages/core/src/features/cloud-foundry/tabs/cloud-foundry-organizations/cloud-foundry-organization-spaces/tabs/cloud-foundry-space-summary/cloud-foundry-space-summary.component.html b/src/frontend/packages/core/src/features/cloud-foundry/tabs/cloud-foundry-organizations/cloud-foundry-organization-spaces/tabs/cloud-foundry-space-summary/cloud-foundry-space-summary.component.html index a991e36ce2..3ec288a9fa 100644 --- a/src/frontend/packages/core/src/features/cloud-foundry/tabs/cloud-foundry-organizations/cloud-foundry-organization-spaces/tabs/cloud-foundry-space-summary/cloud-foundry-space-summary.component.html +++ b/src/frontend/packages/core/src/features/cloud-foundry/tabs/cloud-foundry-organizations/cloud-foundry-organization-spaces/tabs/cloud-foundry-space-summary/cloud-foundry-space-summary.component.html @@ -36,14 +36,14 @@ + limit="{{ (cfSpaceService.quotaDefinition$ | async)?.app_instance_limit}}"> + limit="{{ (cfSpaceService.quotaDefinition$ | async)?.total_routes}}"> @@ -59,7 +59,7 @@ link="/cloud-foundry/{{cfSpaceService.cfGuid}}/organizations/{{cfSpaceService.orgGuid}}/spaces/{{cfSpaceService.spaceGuid}}/service-instances" iconFont="stratos-icons" icon="service" label="Service Instances" value="{{ (cfSpaceService.serviceInstancesCount$ | async)}}" - limit="{{ (cfSpaceService.quotaDefinition$ | async)?.entity.total_services }}"> + limit="{{ (cfSpaceService.quotaDefinition$ | async)?.total_services }}"> + limit="{{ (cfSpaceService.quotaDefinition$ | async)?.memory_limit }}"> diff --git a/src/frontend/packages/core/src/shared/components/cards/card-cf-space-details/card-cf-space-details.component.html b/src/frontend/packages/core/src/shared/components/cards/card-cf-space-details/card-cf-space-details.component.html index 5f56236c8c..1eaff8b162 100644 --- a/src/frontend/packages/core/src/shared/components/cards/card-cf-space-details/card-cf-space-details.component.html +++ b/src/frontend/packages/core/src/shared/components/cards/card-cf-space-details/card-cf-space-details.component.html @@ -10,10 +10,11 @@ {{ (cfSpaceService.userRole$ | async) }} - {{ (cfSpaceService.quotaDefinition$ | async)?.entity.name }} + {{ (cfSpaceService.quotaDefinition$ | async)?.name }} - + diff --git a/src/frontend/packages/core/src/shared/components/cards/card-cf-space-details/card-cf-space-details.component.ts b/src/frontend/packages/core/src/shared/components/cards/card-cf-space-details/card-cf-space-details.component.ts index aef42dea12..2a04d12eef 100644 --- a/src/frontend/packages/core/src/shared/components/cards/card-cf-space-details/card-cf-space-details.component.ts +++ b/src/frontend/packages/core/src/shared/components/cards/card-cf-space-details/card-cf-space-details.component.ts @@ -1,9 +1,9 @@ -import { Component, OnInit } from '@angular/core'; - -import { CloudFoundrySpaceService } from '../../../../features/cloud-foundry/services/cloud-foundry-space.service'; +import { Component } from '@angular/core'; import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; +import { CloudFoundrySpaceService } from '../../../../features/cloud-foundry/services/cloud-foundry-space.service'; + @Component({ selector: 'app-card-cf-space-details', templateUrl: './card-cf-space-details.component.html', diff --git a/src/frontend/packages/core/src/shared/components/list/list-types/cf-orgs/cf-org-card/cf-org-card.component.ts b/src/frontend/packages/core/src/shared/components/list/list-types/cf-orgs/cf-org-card/cf-org-card.component.ts index 3dd1fa2407..897991978e 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-types/cf-orgs/cf-org-card/cf-org-card.component.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-types/cf-orgs/cf-org-card/cf-org-card.component.ts @@ -25,7 +25,7 @@ import { createQuotaDefinition } from '../../../../../../features/cloud-foundry/ import { CfUserService } from '../../../../../data-services/cf-user.service'; import { EntityMonitorFactory } from '../../../../../monitors/entity-monitor.factory.service'; import { PaginationMonitorFactory } from '../../../../../monitors/pagination-monitor.factory'; -import { StratosStatus, ComponentEntityMonitorConfig } from '../../../../../shared.types'; +import { ComponentEntityMonitorConfig, StratosStatus } from '../../../../../shared.types'; import { ConfirmationDialogConfig } from '../../../../confirmation-dialog.config'; import { ConfirmationDialogService } from '../../../../confirmation-dialog.service'; import { MetaCardMenuItem } from '../../../list-cards/meta-card/meta-card-base/meta-card.component'; @@ -128,7 +128,7 @@ export class CfOrgCardComponent extends CardCell> imp setValues = (role: string, apps: APIResource[]) => { this.userRolesInOrg = role; - const quotaDefinition = this.row.entity.quota_definition || createQuotaDefinition(this.orgGuid); + const quotaDefinition = this.row.entity.quota_definition || { entity: createQuotaDefinition(this.orgGuid), metadata: null }; if (apps) { this.setAppsDependentCounts(apps); diff --git a/src/frontend/packages/core/src/shared/components/list/list-types/cf-spaces/cf-space-card/cf-space-card.component.ts b/src/frontend/packages/core/src/shared/components/list/list-types/cf-spaces/cf-space-card/cf-space-card.component.ts index 9f65cdbe0e..cb3acaec7e 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-types/cf-spaces/cf-space-card/cf-space-card.component.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-types/cf-spaces/cf-space-card/cf-space-card.component.ts @@ -28,7 +28,7 @@ import { SpaceQuotaHelper } from '../../../../../../features/cloud-foundry/servi import { CfUserService } from '../../../../../data-services/cf-user.service'; import { EntityMonitorFactory } from '../../../../../monitors/entity-monitor.factory.service'; import { PaginationMonitorFactory } from '../../../../../monitors/pagination-monitor.factory'; -import { StratosStatus, ComponentEntityMonitorConfig } from '../../../../../shared.types'; +import { ComponentEntityMonitorConfig, StratosStatus } from '../../../../../shared.types'; import { ConfirmationDialogConfig } from '../../../../confirmation-dialog.config'; import { ConfirmationDialogService } from '../../../../confirmation-dialog.service'; import { MetaCardMenuItem } from '../../../list-cards/meta-card/meta-card-base/meta-card.component'; @@ -140,14 +140,15 @@ export class CfSpaceCardComponent extends CardCell> implemen setValues = (roles: string, apps: APIResource[]) => { this.userRolesInSpace = roles; - const quotaDefinition = this.row.entity.space_quota_definition || createQuotaDefinition(this.orgGuid); + const quotaDefinition = this.row.entity.space_quota_definition ? + this.row.entity.space_quota_definition.entity : createQuotaDefinition(this.orgGuid); if (apps) { this.setAppsDependentCounts(apps); this.memoryTotal = this.cfEndpointService.getMetricFromApps(apps, 'memory'); - this.normalisedMemoryUsage = this.memoryTotal / quotaDefinition.entity.memory_limit * 100; + this.normalisedMemoryUsage = this.memoryTotal / quotaDefinition.memory_limit * 100; } - this.appInstancesLimit = truthyIncludingZeroString(quotaDefinition.entity.app_instance_limit); - this.memoryLimit = truthyIncludingZeroString(quotaDefinition.entity.memory_limit); + this.appInstancesLimit = truthyIncludingZeroString(quotaDefinition.app_instance_limit); + this.memoryLimit = truthyIncludingZeroString(quotaDefinition.memory_limit); } ngOnDestroy = () => this.subscriptions.forEach(p => p.unsubscribe());