Skip to content

Commit 7e2981f

Browse files
committed
Connect List,Add Clusters
1 parent 0fa1d4b commit 7e2981f

File tree

3 files changed

+95
-4
lines changed

3 files changed

+95
-4
lines changed

portal-ui/src/screens/Console/Clusters/ListClusters/AddCluster.tsx

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,26 @@ const AddCluster = ({
7979

8080
useEffect(() => {
8181
if (addSending) {
82+
let cleanZones: IZone[] = [];
83+
for (let zone of zones) {
84+
if (zone.name !== "") {
85+
cleanZones.push(zone);
86+
}
87+
}
88+
8289
api
8390
.invoke("POST", `/api/v1/clusters`, {
8491
name: clusterName,
92+
service_name: clusterName,
93+
enable_ssl: enableSSL,
94+
enable_mcs: enableMCS,
95+
access_key: accessKey,
96+
secret_key: secretKey,
97+
volumes_per_server: volumesPerServer,
98+
volume_configuration: {
99+
size: volumeConfiguration.size,
100+
},
101+
zones: cleanZones,
85102
})
86103
.then(() => {
87104
setAddSending(false);
@@ -175,7 +192,9 @@ const AddCluster = ({
175192
<ZonesMultiSelector
176193
label="Zones"
177194
name="zones_selector"
178-
onChange={() => {}}
195+
onChange={(elements: IZone[]) => {
196+
setZones(elements);
197+
}}
179198
elements={zones}
180199
/>
181200
</div>

portal-ui/src/screens/Console/Clusters/ListClusters/ListClusters.tsx

Lines changed: 59 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
// You should have received a copy of the GNU Affero General Public License
1515
// along with this program. If not, see <http://www.gnu.org/licenses/>.
1616

17-
import React, { useState } from "react";
17+
import React, { useEffect, useState } from "react";
1818
import Grid from "@material-ui/core/Grid";
1919
import Typography from "@material-ui/core/Typography";
2020
import TextField from "@material-ui/core/TextField";
@@ -28,6 +28,12 @@ import AddCluster from "./AddCluster";
2828
import { createStyles, Theme, withStyles } from "@material-ui/core/styles";
2929
import DeleteCluster from "./DeleteCluster";
3030
import { Link } from "react-router-dom";
31+
import api from "../../../../common/api";
32+
import { PolicyList } from "../../Policies/types";
33+
import { GroupsList } from "../../Groups/types";
34+
import { stringSort } from "../../../../utils/sortFunctions";
35+
import { ICluster, IClustersResponse } from "./types";
36+
import { niceBytes } from "../../../../common/utils";
3137

3238
interface IClustersList {
3339
classes: any;
@@ -85,8 +91,9 @@ const ListClusters = ({ classes }: IClustersList) => {
8591
const [filterClusters, setFilterClusters] = useState<string>("");
8692
const [records, setRecords] = useState<any[]>([]);
8793
const [offset, setOffset] = useState<number>(0);
88-
const [rowsPerPage, setRowsPerPage] = useState<number>(0);
94+
const [rowsPerPage, setRowsPerPage] = useState<number>(10);
8995
const [page, setPage] = useState<number>(0);
96+
const [error, setError] = useState<string>("");
9097

9198
const closeAddModalAndRefresh = (reloadData: boolean) => {
9299
setCreateClusterOpen(false);
@@ -140,6 +147,54 @@ const ListClusters = ({ classes }: IClustersList) => {
140147
}
141148
});
142149

150+
useEffect(() => {
151+
if (isLoading) {
152+
const fetchRecords = () => {
153+
const offset = page * rowsPerPage;
154+
api
155+
.invoke(
156+
"GET",
157+
`/api/v1/clusters?offset=${offset}&limit=${rowsPerPage}`
158+
)
159+
.then((res: IClustersResponse) => {
160+
if (res === null) {
161+
setIsLoading(false);
162+
return;
163+
}
164+
let resClusters: ICluster[] = [];
165+
if (res.clusters !== null) {
166+
resClusters = res.clusters;
167+
}
168+
169+
for (let i = 0; i < resClusters.length; i++) {
170+
const total =
171+
resClusters[i].volume_count * resClusters[i].volume_size;
172+
resClusters[i].capacity = niceBytes(total + "");
173+
}
174+
175+
setRecords(resClusters);
176+
setError("");
177+
setIsLoading(false);
178+
179+
// if we get 0 results, and page > 0 , go down 1 page
180+
if ((!res.clusters || res.clusters.length === 0) && page > 0) {
181+
const newPage = page - 1;
182+
setPage(newPage);
183+
}
184+
})
185+
.catch((err) => {
186+
setError(err);
187+
setIsLoading(false);
188+
});
189+
};
190+
fetchRecords();
191+
}
192+
}, [isLoading, page, rowsPerPage]);
193+
194+
useEffect(() => {
195+
setIsLoading(true);
196+
}, []);
197+
143198
return (
144199
<React.Fragment>
145200
{createClusterOpen && (
@@ -200,7 +255,8 @@ const ListClusters = ({ classes }: IClustersList) => {
200255
columns={[
201256
{ label: "Name", elementKey: "name" },
202257
{ label: "Capacity", elementKey: "capacity" },
203-
{ label: "# of Zones", elementKey: "zones_counter" },
258+
{ label: "# of Zones", elementKey: "zone_count" },
259+
{ label: "State", elementKey: "currentState" },
204260
]}
205261
isLoading={isLoading}
206262
records={filteredRecords}

portal-ui/src/screens/Console/Clusters/ListClusters/types.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,19 @@ export interface IVolumeConfiguration {
2323
size: string;
2424
storage_class: string;
2525
}
26+
27+
export interface ICluster {
28+
name: string;
29+
zone_count: number;
30+
currentState: string;
31+
instance_count: 4;
32+
creation_date: Date;
33+
volume_size: number;
34+
volume_count: number;
35+
// computed
36+
capacity: string;
37+
}
38+
39+
export interface IClustersResponse {
40+
clusters: ICluster[];
41+
}

0 commit comments

Comments
 (0)