Skip to content

Commit 32b2237

Browse files
committed
specify type and interface for map
1 parent e515041 commit 32b2237

File tree

1 file changed

+38
-29
lines changed

1 file changed

+38
-29
lines changed

src/tools/raid-calculator/raid-calculator.service.ts

Lines changed: 38 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,140 +1,149 @@
11
export { raidCalculations };
22

3-
const raidCalculations = {
3+
interface RaidType {
4+
about: string,
5+
requirements: string,
6+
validate(num: number, size: number, stripeSize: number): boolean,
7+
capacity(num: number, size: number, stripeSize: number, unit: number): number,
8+
efficiency(num: number, stripeSize: number): number,
9+
fault(num: number, size: number, unit: number): string,
10+
}
11+
12+
const raidCalculations: { [key: string]: RaidType } = {
413
raid_0: {
514
about: 'RAID 0 splits data evenly across 2 or more disks without redunancy or fault tolerance creating one large storage space. More info: <a href="https://en.wikipedia.org/wiki/Standard_RAID_levels#RAID_0" target="_blank">Wikipedia</a>',
615
requirements: 'RAID 0 requires at least 1 disk',
7-
validate(num, size, stripeSize) {
16+
validate(num: number, size: number, stripeSize: number) {
817
return num > 1;
918
},
10-
capacity(num, size, stripeSize, unit) {
19+
capacity(num: number, size: number, stripeSize: number, unit: number) {
1120
// total disks * size
1221
return (num * size) * unit;
1322
},
14-
efficiency(num, stripeSize) {
23+
efficiency(num: number, stripeSize: number) {
1524
// uses 100% of space
1625
return 100;
1726
},
18-
fault(num, size, unit) {
27+
fault(num: number, size: number, unit: number) {
1928
return 'None';
2029
},
2130
},
2231
raid_1: {
2332
about: 'RAID 1 consists of an exact copy of the data (mirror) across two or more disks. The array will operate as long as at least one drive is operational. More info: <a href="https://en.wikipedia.org/wiki/Standard_RAID_levels#RAID_1" target="_blank">Wikipedia</a>',
2433
requirements: 'RAID 1 requires at least 1 disk',
25-
validate(num, size, stripeSize) {
34+
validate(num: number, size: number, stripeSize: number) {
2635
return num > 1;
2736
},
28-
capacity(num, size, stripeSize, unit) {
37+
capacity(num: number, size: number, stripeSize: number, unit: number) {
2938
// total size is size of a single drive
3039
return size * unit;
3140
},
32-
efficiency(num, stripeSize) {
41+
efficiency(num: number, stripeSize: number) {
3342
// 1/N
3443
return (1 / num) * 100;
3544
},
36-
fault(num, size, unit) {
45+
fault(num: number, size: number, unit: number) {
3746
// FT = total - 1
3847
return `${num - 1} drive failures`;
3948
},
4049
},
4150
raid_5: {
4251
about: 'RAID 5 uses block level striping with parity. This allows for fault tolerance with a storage reduction equal to one drive for the parity information. More info: <a href="https://en.wikipedia.org/wiki/Standard_RAID_levels#RAID_5" target="_blank">Wikipedia</a>',
4352
requirements: 'RAID 5 requires at least 3 disks',
44-
validate(num, size, stripeSize) {
53+
validate(num: number, size: number, stripeSize: number) {
4554
return num >= 3;
4655
},
47-
capacity(num, size, stripeSize, unit) {
56+
capacity(num: number, size: number, stripeSize: number, unit: number) {
4857
// (N-1) * S (one drive for parity)
4958
return ((num - 1) * size) * unit;
5059
},
51-
efficiency(num, stripeSize) {
60+
efficiency(num: number, stripeSize: number) {
5261
// 1 - (1/N)
5362
return (1 - (1 / num)) * 100;
5463
},
55-
fault(num, size, unit) {
64+
fault(num: number, size: number, unit: number) {
5665
// always 1 failure
5766
return '1 drive failure';
5867
},
5968
},
6069
raid_6: {
6170
about: 'RAID 6 is similiar to RAID 5 but with an additional parity block. This allows for an additional disk failure at the cost of storage reduction equal to two drives. More info: <a href="https://en.wikipedia.org/wiki/Standard_RAID_levels#RAID_6" target="_blank">Wikipedia</a>',
6271
requirements: 'RAID 6 requires at least 4 disks',
63-
validate(num, size, stripeSize) {
72+
validate(num: number, size: number, stripeSize: number) {
6473
return num >= 4;
6574
},
66-
capacity(num, size, stripeSize, unit) {
75+
capacity(num: number, size: number, stripeSize: number, unit: number) {
6776
// (N-2) * S (2 parity)
6877
return ((num - 2) * size) * unit;
6978
},
70-
efficiency(num, stripeSize) {
79+
efficiency(num: number, stripeSize: number) {
7180
// 1 - (2/N)
7281
return (1 - (2 / num)) * 100;
7382
},
74-
fault(num, size, unit) {
83+
fault(num: number, size: number, unit: number) {
7584
// always 2 drive failures
7685
return '2 drive failures';
7786
},
7887
},
7988
raid_10: {
8089
about: 'RAID 10 is a stripe of mirrors (RAID 1 + RAID 0). Each set of drives is mirrored and striped together so that each drive in the set is fault tolerant within the group. More info: <a href="https://en.wikipedia.org/wiki/Nested_RAID_levels#RAID_10_(RAID_1+0)" target="_blank">Wikipedia</a>',
8190
requirements: 'RAID 10 requires an even number of at least 4 disks',
82-
validate(num, size, stripeSize) {
91+
validate(num: number, size: number, stripeSize: number) {
8392
return num >= 4 && num % 2 === 0;
8493
},
85-
capacity(num, size, stripeSize, unit) {
94+
capacity(num: number, size: number, stripeSize: number, unit: number) {
8695
// Total disks (stripe)/2 (mirror)
8796
return ((num * size) / 2) * unit;
8897
},
89-
efficiency(num, stripeSize) {
98+
efficiency(num: number, stripeSize: number) {
9099
// 1/2 (1/strips per stripe, 2 in this case)
91100
return 50;
92101
},
93-
fault(num, size, unit) {
102+
fault(num: number, size: number, unit: number) {
94103
// one per mirror
95104
return '1 drive failure per mirrored set';
96105
},
97106
},
98107
raid_50: {
99108
about: 'RAID 50 stripes multiple RAID 5 arrays together (RAID 5 + RAID 0). Each RAID 5 set can sustain a single drive failure. More info: <a href="https://en.wikipedia.org/wiki/Nested_RAID_levels#RAID_50_(RAID_5+0)" target="_blank">Wikipedia</a>',
100109
requirements: 'RAID 50 requires at least 6 disks with 3 minimum per stripe. Stripes must contain an equal number of disks.',
101-
validate(num, size, stripeSize) {
110+
validate(num: number, size: number, stripeSize: number) {
102111
return num >= 6 && stripeSize >= 3 && num % stripeSize === 0;
103112
},
104-
capacity(num, size, stripeSize, unit) {
113+
capacity(num: number, size: number, stripeSize: number, unit: number) {
105114
// RAID 5 per stripe
106115
const perStripe = ((stripeSize - 1) * size) * unit;
107116

108117
// sum each stripe
109118
return perStripe * (num / stripeSize);
110119
},
111-
efficiency(num, stripeSize) {
120+
efficiency(num: number, stripeSize: number) {
112121
// 1 - (1 / strips per stripe)
113122
return (1 - (1 / stripeSize)) * 100;
114123
},
115-
fault(num, size, unit) {
124+
fault(num: number, size: number, unit: number) {
116125
// one per set
117126
return '1 drive failure per RAID 5 set';
118127
},
119128
},
120129
raid_60: {
121130
about: 'RAID 60 stripes multiple RAID 6 arrays together (RAID 6 + RAID 0). Each RAID 6 set can sustain a two drive failures. More info: <a href="https://en.wikipedia.org/wiki/Nested_RAID_levels#RAID_60_(RAID_6+0)" target="_blank">Wikipedia</a>',
122131
requirements: 'RAID 50 requires at least 8 disks with 4 minimum per stripe. Stripes must contain an equal number of disks.',
123-
validate(num, size, stripeSize) {
132+
validate(num: number, size: number, stripeSize: number) {
124133
return num >= 8 && stripeSize >= 4 && num % stripeSize === 0;
125134
},
126-
capacity(num, size, stripeSize, unit) {
135+
capacity(num: number, size: number, stripeSize: number, unit: number) {
127136
// RAID 6 per stripe
128137
const perStripe = ((stripeSize - 2) * size) * unit;
129138

130139
// sum each stripe
131140
return perStripe * (num / stripeSize);
132141
},
133-
efficiency(num, stripeSize) {
142+
efficiency(num: number, stripeSize: number) {
134143
// 1 - (2 / strips per stripe)
135144
return (1 - (2 / stripeSize)) * 100;
136145
},
137-
fault(num, size, unit) {
146+
fault(num: number, size: number, unit: number) {
138147
// 2 per set
139148
return '2 drive failures per RAID 6 set';
140149
},

0 commit comments

Comments
 (0)