(ui): Add description to metrics charts

This commit is contained in:
Ken Hibino
2021-12-17 12:51:38 -08:00
parent 3998c4214c
commit df90fee568
2 changed files with 22 additions and 0 deletions

1
go.mod
View File

@@ -12,5 +12,6 @@ require (
) )
replace ( replace (
github.com/hibiken/asynq => ./../../../database/Redis/go/asynq
github.com/hibiken/asynq/x => ./../../../database/Redis/go/asynq/x github.com/hibiken/asynq/x => ./../../../database/Redis/go/asynq/x
) )

View File

@@ -7,10 +7,12 @@ import Container from "@material-ui/core/Container";
import Grid from "@material-ui/core/Grid"; import Grid from "@material-ui/core/Grid";
import Typography from "@material-ui/core/Typography"; import Typography from "@material-ui/core/Typography";
import WarningIcon from "@material-ui/icons/Warning"; import WarningIcon from "@material-ui/icons/Warning";
import InfoIcon from "@material-ui/icons/Info";
import prettyBytes from "pretty-bytes"; import prettyBytes from "pretty-bytes";
import { getMetricsAsync } from "../actions/metricsActions"; import { getMetricsAsync } from "../actions/metricsActions";
import { AppState } from "../store"; import { AppState } from "../store";
import QueueMetricsChart from "../components/QueueMetricsChart"; import QueueMetricsChart from "../components/QueueMetricsChart";
import Tooltip from "../components/Tooltip";
import { currentUnixtime } from "../utils"; import { currentUnixtime } from "../utils";
import MetricsFetchControls from "../components/MetricsFetchControls"; import MetricsFetchControls from "../components/MetricsFetchControls";
import { useQuery } from "../hooks"; import { useQuery } from "../hooks";
@@ -36,6 +38,12 @@ const useStyles = makeStyles((theme) => ({
chartInfo: { chartInfo: {
display: "flex", display: "flex",
alignItems: "center", alignItems: "center",
marginBottom: theme.spacing(1),
},
infoIcon: {
marginLeft: theme.spacing(1),
color: theme.palette.grey[500],
cursor: "pointer",
}, },
errorMessage: { errorMessage: {
marginLeft: "auto", marginLeft: "auto",
@@ -130,6 +138,7 @@ function MetricsView(props: Props) {
<Grid item xs={12}> <Grid item xs={12}>
<ChartRow <ChartRow
title="Tasks Processed" title="Tasks Processed"
description="Number of tasks processed (both succeeded and failed) per second."
metrics={data.tasks_processed_per_second} metrics={data.tasks_processed_per_second}
endTime={endTimeSec} endTime={endTimeSec}
startTime={endTimeSec - durationSec} startTime={endTimeSec - durationSec}
@@ -140,6 +149,7 @@ function MetricsView(props: Props) {
<Grid item xs={12}> <Grid item xs={12}>
<ChartRow <ChartRow
title="Tasks Failed" title="Tasks Failed"
description="Number of tasks failed per second."
metrics={data.tasks_failed_per_second} metrics={data.tasks_failed_per_second}
endTime={endTimeSec} endTime={endTimeSec}
startTime={endTimeSec - durationSec} startTime={endTimeSec - durationSec}
@@ -150,6 +160,7 @@ function MetricsView(props: Props) {
<Grid item xs={12}> <Grid item xs={12}>
<ChartRow <ChartRow
title="Error Rate" title="Error Rate"
description="Rate of task failures"
metrics={data.error_rate} metrics={data.error_rate}
endTime={endTimeSec} endTime={endTimeSec}
startTime={endTimeSec - durationSec} startTime={endTimeSec - durationSec}
@@ -160,6 +171,7 @@ function MetricsView(props: Props) {
<Grid item xs={12}> <Grid item xs={12}>
<ChartRow <ChartRow
title="Queue Size" title="Queue Size"
description="Total number of tasks in a given queue."
metrics={data.queue_size} metrics={data.queue_size}
endTime={endTimeSec} endTime={endTimeSec}
startTime={endTimeSec - durationSec} startTime={endTimeSec - durationSec}
@@ -170,6 +182,7 @@ function MetricsView(props: Props) {
<Grid item xs={12}> <Grid item xs={12}>
<ChartRow <ChartRow
title="Queue Latency" title="Queue Latency"
description="Latency of queue, measured by the oldest pending task in the queue."
metrics={data.queue_latency_seconds} metrics={data.queue_latency_seconds}
endTime={endTimeSec} endTime={endTimeSec}
startTime={endTimeSec - durationSec} startTime={endTimeSec - durationSec}
@@ -181,6 +194,7 @@ function MetricsView(props: Props) {
<Grid item xs={12}> <Grid item xs={12}>
<ChartRow <ChartRow
title="Queue Memory Usage (approx)" title="Queue Memory Usage (approx)"
description="Memory usage by queue. Approximate value by sampling a few tasks in a queue."
metrics={data.queue_memory_usage_approx_bytes} metrics={data.queue_memory_usage_approx_bytes}
endTime={endTimeSec} endTime={endTimeSec}
startTime={endTimeSec - durationSec} startTime={endTimeSec - durationSec}
@@ -198,6 +212,7 @@ function MetricsView(props: Props) {
<Grid item xs={12}> <Grid item xs={12}>
<ChartRow <ChartRow
title="Pending Tasks" title="Pending Tasks"
description="Number of pending tasks in a given queue."
metrics={data.pending_tasks_by_queue} metrics={data.pending_tasks_by_queue}
endTime={endTimeSec} endTime={endTimeSec}
startTime={endTimeSec - durationSec} startTime={endTimeSec - durationSec}
@@ -208,6 +223,7 @@ function MetricsView(props: Props) {
<Grid item xs={12}> <Grid item xs={12}>
<ChartRow <ChartRow
title="Retry Tasks" title="Retry Tasks"
description="Number of retry tasks in a given queue."
metrics={data.retry_tasks_by_queue} metrics={data.retry_tasks_by_queue}
endTime={endTimeSec} endTime={endTimeSec}
startTime={endTimeSec - durationSec} startTime={endTimeSec - durationSec}
@@ -218,6 +234,7 @@ function MetricsView(props: Props) {
<Grid item xs={12}> <Grid item xs={12}>
<ChartRow <ChartRow
title="Archived Tasks" title="Archived Tasks"
description="Number of archived tasks in a given queue."
metrics={data.archived_tasks_by_queue} metrics={data.archived_tasks_by_queue}
endTime={endTimeSec} endTime={endTimeSec}
startTime={endTimeSec - durationSec} startTime={endTimeSec - durationSec}
@@ -235,6 +252,7 @@ export default connector(MetricsView);
interface ChartRowProps { interface ChartRowProps {
title: string; title: string;
description: string;
metrics: PrometheusMetricsResponse; metrics: PrometheusMetricsResponse;
endTime: number; endTime: number;
startTime: number; startTime: number;
@@ -247,6 +265,9 @@ function ChartRow(props: ChartRowProps) {
<> <>
<div className={classes.chartInfo}> <div className={classes.chartInfo}>
<Typography color="textPrimary">{props.title}</Typography> <Typography color="textPrimary">{props.title}</Typography>
<Tooltip title={<div>{props.description}</div>}>
<InfoIcon fontSize="small" className={classes.infoIcon} />
</Tooltip>
{props.metrics.status === "error" && ( {props.metrics.status === "error" && (
<div className={classes.errorMessage}> <div className={classes.errorMessage}>
<WarningIcon fontSize="small" className={classes.warningIcon} /> <WarningIcon fontSize="small" className={classes.warningIcon} />