Show Tiers status (#2291)
closes https://github.com/miniohq/engineering/issues/681 Authored-by: Jillian Inapurapu <jillii@Jillians-MBP.attlocal.net>
This commit is contained in:
@@ -31,7 +31,12 @@ import {
|
|||||||
tableStyles,
|
tableStyles,
|
||||||
typesSelection,
|
typesSelection,
|
||||||
} from "../../Common/FormComponents/common/styleLibrary";
|
} from "../../Common/FormComponents/common/styleLibrary";
|
||||||
import { AddIcon, TiersIcon, TiersNotAvailableIcon } from "../../../../icons";
|
import {
|
||||||
|
AddIcon,
|
||||||
|
CircleIcon,
|
||||||
|
TiersIcon,
|
||||||
|
TiersNotAvailableIcon,
|
||||||
|
} from "../../../../icons";
|
||||||
|
|
||||||
import { ITierElement, ITierResponse } from "./types";
|
import { ITierElement, ITierResponse } from "./types";
|
||||||
import { ErrorResponseHandler } from "../../../../common/types";
|
import { ErrorResponseHandler } from "../../../../common/types";
|
||||||
@@ -105,16 +110,57 @@ const ListTiersConfiguration = ({ classes }: IListTiersConfig) => {
|
|||||||
const [records, setRecords] = useState<ITierElement[]>([]);
|
const [records, setRecords] = useState<ITierElement[]>([]);
|
||||||
const [filter, setFilter] = useState<string>("");
|
const [filter, setFilter] = useState<string>("");
|
||||||
const [isLoading, setIsLoading] = useState<boolean>(true);
|
const [isLoading, setIsLoading] = useState<boolean>(true);
|
||||||
|
const [checkTierStatus, setcheckTierStatus] = useState<boolean>(false);
|
||||||
const [updateCredentialsOpen, setUpdateCredentialsOpen] =
|
const [updateCredentialsOpen, setUpdateCredentialsOpen] =
|
||||||
useState<boolean>(false);
|
useState<boolean>(false);
|
||||||
const [selectedTier, setSelectedTier] = useState<ITierElement>({
|
const [selectedTier, setSelectedTier] = useState<ITierElement>({
|
||||||
type: "unsupported",
|
type: "unsupported",
|
||||||
|
status: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
const hasSetTier = hasPermission(CONSOLE_UI_RESOURCE, [
|
const hasSetTier = hasPermission(CONSOLE_UI_RESOURCE, [
|
||||||
IAM_SCOPES.ADMIN_SET_TIER,
|
IAM_SCOPES.ADMIN_SET_TIER,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (checkTierStatus) {
|
||||||
|
records.forEach((tier: ITierElement) => {
|
||||||
|
var endpoint: string;
|
||||||
|
switch (tier.type) {
|
||||||
|
case "minio":
|
||||||
|
endpoint = tier.minio?.endpoint + "/" + tier.minio?.bucket || "";
|
||||||
|
break;
|
||||||
|
case "s3":
|
||||||
|
endpoint = tier.s3?.endpoint + "/" + tier.s3?.bucket || "";
|
||||||
|
break;
|
||||||
|
case "gcs":
|
||||||
|
endpoint = tier.gcs?.endpoint + "/" + tier.gcs?.bucket || "";
|
||||||
|
break;
|
||||||
|
case "azure":
|
||||||
|
endpoint = tier.azure?.endpoint + "/" + tier.azure?.bucket || "";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
endpoint = "";
|
||||||
|
}
|
||||||
|
const xhr = new XMLHttpRequest();
|
||||||
|
xhr.open("HEAD", endpoint);
|
||||||
|
xhr.send();
|
||||||
|
xhr.onreadystatechange = () => {
|
||||||
|
if (xhr.readyState === 4 || xhr.readyState === 2) {
|
||||||
|
tier.status = true;
|
||||||
|
} else {
|
||||||
|
tier.status = false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
xhr.onerror = () => {
|
||||||
|
tier.status = false;
|
||||||
|
};
|
||||||
|
});
|
||||||
|
setRecords(records);
|
||||||
|
setcheckTierStatus(false);
|
||||||
|
}
|
||||||
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
|
}, [checkTierStatus]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (isLoading) {
|
if (isLoading) {
|
||||||
if (distributedSetup) {
|
if (distributedSetup) {
|
||||||
@@ -124,6 +170,7 @@ const ListTiersConfiguration = ({ classes }: IListTiersConfig) => {
|
|||||||
.then((res: ITierResponse) => {
|
.then((res: ITierResponse) => {
|
||||||
setRecords(res.items || []);
|
setRecords(res.items || []);
|
||||||
setIsLoading(false);
|
setIsLoading(false);
|
||||||
|
setcheckTierStatus(true);
|
||||||
})
|
})
|
||||||
.catch((err: ErrorResponseHandler) => {
|
.catch((err: ErrorResponseHandler) => {
|
||||||
dispatch(setErrorSnackMessage(err));
|
dispatch(setErrorSnackMessage(err));
|
||||||
@@ -183,6 +230,41 @@ const ListTiersConfiguration = ({ classes }: IListTiersConfig) => {
|
|||||||
return "";
|
return "";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const renderTierStatus = (item: boolean) => {
|
||||||
|
if (item) {
|
||||||
|
return (
|
||||||
|
<Box
|
||||||
|
sx={{
|
||||||
|
display: "flex",
|
||||||
|
alignItems: "center",
|
||||||
|
"& .min-icon": {
|
||||||
|
width: "18px",
|
||||||
|
height: "22px",
|
||||||
|
fill: "#4CCB92",
|
||||||
|
},
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<CircleIcon />
|
||||||
|
</Box>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return (
|
||||||
|
<Box
|
||||||
|
sx={{
|
||||||
|
display: "flex",
|
||||||
|
alignItems: "center",
|
||||||
|
"& .min-icon": {
|
||||||
|
width: "18px",
|
||||||
|
height: "22px",
|
||||||
|
fill: "#C83B51",
|
||||||
|
},
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<CircleIcon />
|
||||||
|
</Box>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
const renderTierPrefix = (item: ITierElement) => {
|
const renderTierPrefix = (item: ITierElement) => {
|
||||||
const prefix = get(item, `${item.type}.prefix`, "");
|
const prefix = get(item, `${item.type}.prefix`, "");
|
||||||
|
|
||||||
@@ -344,6 +426,12 @@ const ListTiersConfiguration = ({ classes }: IListTiersConfig) => {
|
|||||||
renderFunction: renderTierName,
|
renderFunction: renderTierName,
|
||||||
renderFullObject: true,
|
renderFullObject: true,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
label: "Status",
|
||||||
|
elementKey: "status",
|
||||||
|
renderFunction: renderTierStatus,
|
||||||
|
width: 50,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
label: "Type",
|
label: "Type",
|
||||||
elementKey: "type",
|
elementKey: "type",
|
||||||
|
|||||||
@@ -75,6 +75,7 @@ export interface ITierElement {
|
|||||||
gcs?: ITierGCS;
|
gcs?: ITierGCS;
|
||||||
azure?: ITierAzure;
|
azure?: ITierAzure;
|
||||||
minio?: ITierMinio;
|
minio?: ITierMinio;
|
||||||
|
status: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ITierResponse {
|
export interface ITierResponse {
|
||||||
|
|||||||
Reference in New Issue
Block a user