]> git.apps.os.sepia.ceph.com Git - ceph.git/blob
b1d41077092b76043aea1618a7354f34dc44855b
[ceph.git] /
1 import { Component, OnInit } from '@angular/core';
2 import { CdTableAction } from '~/app/shared/models/cd-table-action';
3 import { CdTableColumn } from '~/app/shared/models/cd-table-column';
4 import { CdTableSelection } from '~/app/shared/models/cd-table-selection';
5
6 import { RgwZonegroupService } from '~/app/shared/api/rgw-zonegroup.service';
7 import { ListWithDetails } from '~/app/shared/classes/list-with-details.class';
8 import {
9   StorageClass,
10   CLOUD_TIER,
11   ZoneGroup,
12   TierTarget,
13   Target,
14   ZoneGroupDetails
15 } from '../models/rgw-storage-class.model';
16
17 @Component({
18   selector: 'cd-rgw-storage-class-list',
19   templateUrl: './rgw-storage-class-list.component.html',
20   styleUrls: ['./rgw-storage-class-list.component.scss']
21 })
22 export class RgwStorageClassListComponent extends ListWithDetails implements OnInit {
23   columns: CdTableColumn[];
24   selection = new CdTableSelection();
25   tableActions: CdTableAction[];
26   storageClassList: StorageClass[] = [];
27
28   constructor(private rgwZonegroupService: RgwZonegroupService) {
29     super();
30   }
31
32   ngOnInit() {
33     this.columns = [
34       {
35         name: $localize`Zone Group`,
36         prop: 'zonegroup_name',
37         flexGrow: 2
38       },
39       {
40         name: $localize`Placement Target`,
41         prop: 'placement_target',
42         flexGrow: 2
43       },
44       {
45         name: $localize`Storage Class`,
46         prop: 'storage_class',
47         flexGrow: 2
48       },
49       {
50         name: $localize`Target Region`,
51         prop: 'region',
52         flexGrow: 2
53       },
54       {
55         name: $localize`Target Endpoint`,
56         prop: 'endpoint',
57         flexGrow: 2
58       }
59     ];
60   }
61
62   loadStorageClass(): Promise<void> {
63     return new Promise((resolve, reject) => {
64       this.rgwZonegroupService.getAllZonegroupsInfo().subscribe(
65         (data: ZoneGroupDetails) => {
66           this.storageClassList = [];
67
68           const tierObj = data.zonegroups.flatMap((zoneGroup: ZoneGroup) =>
69             zoneGroup.placement_targets
70               .filter((target: Target) => target.tier_targets)
71               .flatMap((target: Target) =>
72                 target.tier_targets
73                   .filter((tierTarget: TierTarget) => tierTarget.val.tier_type === CLOUD_TIER)
74                   .map((tierTarget: TierTarget) => {
75                     return this.getTierTargets(tierTarget, zoneGroup.name, target.name);
76                   })
77               )
78           );
79           this.storageClassList.push(...tierObj);
80           resolve();
81         },
82         (error) => {
83           reject(error);
84         }
85       );
86     });
87   }
88
89   getTierTargets(tierTarget: TierTarget, zoneGroup: string, targetName: string) {
90     if (tierTarget.val.tier_type !== CLOUD_TIER) return null;
91     return {
92       zonegroup_name: zoneGroup,
93       placement_target: targetName,
94       storage_class: tierTarget.val.storage_class,
95       ...tierTarget.val.s3
96     };
97   }
98
99   updateSelection(selection: CdTableSelection) {
100     this.selection = selection;
101   }
102
103   setExpandedRow(expandedRow: any) {
104     super.setExpandedRow(expandedRow);
105   }
106 }