Created ServerInfoCard element (#984)

This commit is contained in:
jinapurapu
2021-08-26 12:22:46 -07:00
committed by GitHub
parent 3e55683c2c
commit bb8460a118
2 changed files with 163 additions and 38 deletions

View File

@@ -24,9 +24,9 @@ import { Usage } from "../types";
import { niceBytes, niceDays } from "../../../../common/utils"; import { niceBytes, niceDays } from "../../../../common/utils";
import DnsIcon from "@material-ui/icons/Dns"; import DnsIcon from "@material-ui/icons/Dns";
import EgressIcon from "../../../../icons/EgressIcon"; import EgressIcon from "../../../../icons/EgressIcon";
import TableWrapper from "../../Common/TableWrapper/TableWrapper";
import ReportedUsageIcon from "../../../../icons/ReportedUsageIcon"; import ReportedUsageIcon from "../../../../icons/ReportedUsageIcon";
import { BucketsIcon } from "../../../../icons"; import { BucketsIcon } from "../../../../icons";
import {ServerInfoCard} from "./ServerInfoCard"
const styles = (theme: Theme) => const styles = (theme: Theme) =>
createStyles({ createStyles({
@@ -47,12 +47,32 @@ const styles = (theme: Theme) =>
"& svg": { "& svg": {
maxHeight: 18, maxHeight: 18,
}, },
},
infoHeight: {
height: 180,
minWidth: 247,
marginRight: 20,
padding: "25px 28px",
"& svg": {
maxHeight: 18,
},
}, },
consumptionValue: { consumptionValue: {
color: "#000000", color: "#000000",
fontSize: "60px", fontSize: "60px",
fontWeight: "bold", fontWeight: "bold",
}, },
endpoint: {
color: "#000000",
fontSize: "20px",
fontWeight: "bold",
},
infoValue: {
fontWeight: 500,
color: "#777777",
fontSize: 14,
marginTop: 9,
},
icon: { icon: {
marginRight: 10, marginRight: 10,
color: "#777777", color: "#777777",
@@ -95,6 +115,7 @@ interface IDashboardProps {
const BasicDashboard = ({ classes, usage }: IDashboardProps) => { const BasicDashboard = ({ classes, usage }: IDashboardProps) => {
const fixedHeightPaper = clsx(classes.paper, classes.fixedHeight); const fixedHeightPaper = clsx(classes.paper, classes.fixedHeight);
const prettyUsage = (usage: string | undefined) => { const prettyUsage = (usage: string | undefined) => {
if (usage === undefined) { if (usage === undefined) {
@@ -123,25 +144,7 @@ const BasicDashboard = ({ classes, usage }: IDashboardProps) => {
return usage.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); return usage.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}; };
const serverColumns = [
{
label: "Endpoint",
elementKey: "endpoint",
},
{
label: "Status",
elementKey: "state",
},
{
label: "Uptime",
elementKey: "uptime",
},
{
label: "Version",
elementKey: "version",
},
];
const makeServerArray = (usage: Usage | null) => { const makeServerArray = (usage: Usage | null) => {
if (usage != null) { if (usage != null) {
usage.servers.forEach((s) => (s.uptime = niceDays(s.uptime))); usage.servers.forEach((s) => (s.uptime = niceDays(s.uptime)));
@@ -213,24 +216,25 @@ const BasicDashboard = ({ classes, usage }: IDashboardProps) => {
{usage ? prettyNumber(usage.objects) : 0} {usage ? prettyNumber(usage.objects) : 0}
</Typography> </Typography>
</Paper> </Paper>
<Grid container direction="row" alignItems="center"> <Paper className={classes.paper}>
<Grid item className={classes.icon}> <Grid item className={classes.notationContainer}>
<DnsIcon /> <Grid item className={classes.icon}>
</Grid> <DnsIcon />
<Grid item> <Typography className={classes.elementTitle}>
<Typography className={classes.elementTitle}> Servers
{" "} </Typography>
Servers </Grid>
</Typography> <Grid item className={classes.notationContainer}>
</Grid> {serverArray.map((server) => {
<TableWrapper return(
columns={serverColumns} <ServerInfoCard server={server} classes={classes}/>
isLoading={false} )
records={serverArray} })}
entityName="Servers"
idField="endpoint" </Grid>
/>
</Grid> </Grid>
</Paper>
</Grid> </Grid>
</Grid> </Grid>
</Grid> </Grid>

View File

@@ -0,0 +1,121 @@
// This file is part of MinIO Console Server
// Copyright (c) 2021 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
import React, { Fragment } from "react";
import { createStyles, Theme, withStyles } from "@material-ui/core/styles";
import clsx from "clsx";
import Grid from "@material-ui/core/Grid";
import Paper from "@material-ui/core/Paper";
import Typography from "@material-ui/core/Typography";
import { Usage, ServerInfo } from "../types";
import { niceBytes, niceDays } from "../../../../common/utils";
import DnsIcon from "@material-ui/icons/Dns";
import EgressIcon from "../../../../icons/EgressIcon";
import ReportedUsageIcon from "../../../../icons/ReportedUsageIcon";
import { BucketsIcon } from "../../../../icons";
const styles = (theme: Theme) =>
createStyles({
paper: {
padding: theme.spacing(2),
display: "flex",
overflow: "auto",
flexDirection: "column",
border: "#eaedee 1px solid",
borderRadius: 5,
boxShadow: "none",
},
fixedHeight: {
height: 165,
minWidth: 247,
marginRight: 20,
padding: "25px 28px",
"& svg": {
maxHeight: 18,
},
},
infoHeight: {
height: 180,
minWidth: 247,
marginRight: 20,
padding: "25px 28px",
"& svg": {
maxHeight: 18,
},
},
consumptionValue: {
color: "#000000",
fontSize: "60px",
fontWeight: "bold",
},
endpoint: {
color: "#000000",
fontSize: "20px",
fontWeight: "bold",
},
infoValue: {
fontWeight: 500,
color: "#777777",
fontSize: 14,
marginTop: 9,
},
icon: {
marginRight: 10,
color: "#777777",
},
notationContainer: {
display: "flex",
flexWrap: "wrap",
},
elementTitle: {
fontWeight: 500,
color: "#777777",
fontSize: 14,
marginTop: -9,
},
});
interface ICardProps {
classes: any;
server: ServerInfo;
}
export const ServerInfoCard = ({classes, server}: ICardProps) => {
return(
<Paper className={classes.infoPaper}>
<Grid container direction="row" alignItems="center">
<Grid item>
<Typography className={classes.endpoint}>
{" "}
{server.endpoint}
</Typography>
<Typography className={classes.infoValue}>
Status: {server.state}
</Typography>
<Typography className={classes.infoValue}>
Uptime: {niceDays(server.uptime)}
</Typography>
<Typography className={classes.infoValue}>
Version: {server.version}
</Typography>
</Grid>
</Grid>
</Paper>
)
}