mirror of
https://github.com/prometheus/alertmanager
synced 2024-12-18 04:15:24 +00:00
display group and alert
Signed-off-by: Augustin Husson <augustin.husson@amadeus.com>
This commit is contained in:
parent
210b64f0cb
commit
dbddca6ebb
@ -11,7 +11,7 @@ export interface Receiver {
|
|||||||
export interface AlertStatus {
|
export interface AlertStatus {
|
||||||
state: 'active' | 'unprocessed' | 'suppressed';
|
state: 'active' | 'unprocessed' | 'suppressed';
|
||||||
inhibitedBy: string[];
|
inhibitedBy: string[];
|
||||||
silenceby: string[];
|
silenceBy: string[];
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface Alert {
|
export interface Alert {
|
||||||
@ -33,7 +33,7 @@ export interface AlertGroup {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function useAlertGroups() {
|
export function useAlertGroups() {
|
||||||
return useQuery<AlertGroup[], Error>([], () => {
|
return useQuery<AlertGroup[], Error>([resource], () => {
|
||||||
const url = buildURL({ resource: resource });
|
const url = buildURL({ resource: resource });
|
||||||
return fetchJson<AlertGroup[]>(url);
|
return fetchJson<AlertGroup[]>(url);
|
||||||
});
|
});
|
||||||
|
@ -34,7 +34,7 @@ export interface AMStatus {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function useAMStatus() {
|
export function useAMStatus() {
|
||||||
return useQuery<AMStatus, Error>([], () => {
|
return useQuery<AMStatus, Error>([resource], () => {
|
||||||
const url = buildURL({ resource: resource });
|
const url = buildURL({ resource: resource });
|
||||||
return fetchJson<AMStatus>(url);
|
return fetchJson<AMStatus>(url);
|
||||||
});
|
});
|
||||||
|
@ -1,15 +1,107 @@
|
|||||||
import { useAlertGroups } from '../client/alert';
|
import React, { useState } from 'react';
|
||||||
import { Container, Typography } from '@mui/material';
|
import ExpandedIcon from 'mdi-material-ui/ChevronDown';
|
||||||
|
import BellOff from 'mdi-material-ui/BellOff';
|
||||||
|
import {
|
||||||
|
Card,
|
||||||
|
CardActions,
|
||||||
|
CardContent,
|
||||||
|
Chip,
|
||||||
|
Collapse,
|
||||||
|
Container,
|
||||||
|
Divider,
|
||||||
|
IconButton,
|
||||||
|
IconButtonProps,
|
||||||
|
List,
|
||||||
|
ListItem,
|
||||||
|
styled,
|
||||||
|
Tooltip,
|
||||||
|
Typography,
|
||||||
|
} from '@mui/material';
|
||||||
|
import Grid from '@mui/material/Unstable_Grid2';
|
||||||
|
import { AlertGroup, useAlertGroups } from '../client/alert';
|
||||||
|
|
||||||
|
interface ExpandMoreProps extends IconButtonProps {
|
||||||
|
expand: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
const ExpandMore = styled((props: ExpandMoreProps) => {
|
||||||
|
const { ...other } = props;
|
||||||
|
return <IconButton {...other} />;
|
||||||
|
})(({ theme, expand }) => ({
|
||||||
|
transform: !expand ? 'rotate(0deg)' : 'rotate(180deg)',
|
||||||
|
marginLeft: 'auto',
|
||||||
|
transition: theme.transitions.create('transform', {
|
||||||
|
duration: theme.transitions.duration.shortest,
|
||||||
|
}),
|
||||||
|
}));
|
||||||
|
|
||||||
|
interface AlertCardProps {
|
||||||
|
group: AlertGroup;
|
||||||
|
}
|
||||||
|
|
||||||
|
function renderLabels(labels: Record<string, string>) {
|
||||||
|
const result = [];
|
||||||
|
for (const k in labels) {
|
||||||
|
result.push(<Chip key={k} size="small" label={`${k}: ${labels[k]}`} />);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
function AlertCard(props: AlertCardProps) {
|
||||||
|
const { group } = props;
|
||||||
|
const [expanded, setExpanded] = useState(false);
|
||||||
|
const handleExpandClick = () => {
|
||||||
|
setExpanded(!expanded);
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Card>
|
||||||
|
<CardContent>{renderLabels(group.labels)}</CardContent>
|
||||||
|
<CardActions disableSpacing>
|
||||||
|
<Tooltip title="Silence this group">
|
||||||
|
<IconButton>
|
||||||
|
<BellOff />
|
||||||
|
</IconButton>
|
||||||
|
</Tooltip>
|
||||||
|
<ExpandMore expand={expanded} onClick={handleExpandClick} aria-expanded={expanded} aria-label="show more">
|
||||||
|
<ExpandedIcon />
|
||||||
|
</ExpandMore>
|
||||||
|
</CardActions>
|
||||||
|
<Collapse in={expanded} timeout="auto" unmountOnExit>
|
||||||
|
<Divider />
|
||||||
|
<CardContent>
|
||||||
|
{group.alerts.map((alert, index) => {
|
||||||
|
return (
|
||||||
|
<List key={`alert-${index}`}>
|
||||||
|
<ListItem sx={{ flexWrap: 'wrap', justifyContent: 'flex-start' }}>
|
||||||
|
{renderLabels(alert.labels)}
|
||||||
|
</ListItem>
|
||||||
|
</List>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</CardContent>
|
||||||
|
</Collapse>
|
||||||
|
</Card>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
export default function AlertView() {
|
export default function AlertView() {
|
||||||
const { data } = useAlertGroups();
|
const { data } = useAlertGroups();
|
||||||
if (data === undefined || data === null) {
|
if (data === undefined || data === null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Container maxWidth="md">
|
<Container>
|
||||||
<Typography variant="h4">Alert</Typography>
|
<Typography variant="h4">Alert</Typography>
|
||||||
|
<Grid container spacing={{ xs: 2, md: 3 }} columns={{ xs: 4, sm: 8, md: 12 }}>
|
||||||
|
{data.map((group, index) => {
|
||||||
|
return (
|
||||||
|
<Grid key={index} xs={4} sm={4} md={4}>
|
||||||
|
<AlertCard group={group} />
|
||||||
|
</Grid>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</Grid>
|
||||||
</Container>
|
</Container>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -44,9 +44,10 @@ function CustomTableCell(props: tableCellProperties) {
|
|||||||
|
|
||||||
export default function StatusView() {
|
export default function StatusView() {
|
||||||
const { data } = useAMStatus();
|
const { data } = useAMStatus();
|
||||||
if (data === undefined || data === null || (Array.isArray(data) && data.length === 0)) {
|
if (data === undefined || data === null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
console.log(data);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Container maxWidth="md">
|
<Container maxWidth="md">
|
||||||
|
Loading…
Reference in New Issue
Block a user