in client/web/src/metrics/MetricTopTenantsContainer.js [29:144]
export default function MetricTopTenantsContainer(props) {
const {
id,
name,
metric,
timePeriodName,
stat = "Sum",
nameSpace = "AWS/ApplicationELB",
tenants,
} = props;
const QUERY_ID = id;
let data = {
datasets: [],
labels: [],
};
let chartOpts = {
maintainAspectRatio: false,
legend: {
display: false,
},
scales: {
xAxes: [
{
ticks: { beginAtZero: true, suggestedMin: 0, suggestedMax: 100 },
},
],
yAxes: [],
},
};
const dispatch = useDispatch();
const albstats = useSelector((state) =>
selectMetricResultsById(state, QUERY_ID)
);
const queryState = useSelector((state) => selectQueryState(state, QUERY_ID));
if (albstats) {
let tenantLabels = [];
let tenantVals = [];
if (stat === "Average") {
chartOpts.scales.yAxes.push({
ticks: { suggestedMin: 0, suggestedMax: 100 },
});
}
albstats.metrics[0].topTenants.forEach((m, i) => {
tenantVals.push(m.value);
tenantLabels.push(m.id);
});
data.datasets.push({
data: tenantVals,
borderWidth: 1,
backgroundColor: _colors,
borderColor: _colors,
fill: false,
});
data.labels = _tenantLabels(tenantLabels, tenants);
}
const queryRequest = {
id: QUERY_ID,
timeRangeName: timePeriodName,
stat: stat,
dimensions: [{ metricName: metric, nameSpace: nameSpace }],
topTenants: true,
statsMap: false,
};
const refreshGraph = () => {
return dispatch(queryMetrics(queryRequest));
};
useEffect(() => {
const queryResponse = refreshGraph();
return () => {
if (queryResponse.PromiseStatus === "pending") {
queryResponse.abort();
}
};
}, [dispatch, QUERY_ID, metric, nameSpace, stat, timePeriodName]);
return (
<Col sm="12" md="6" lg="6">
<Card>
<CardBody>
<Row>
<Col sm="10">
<CardTitle className="mb-0">{name}</CardTitle>
<div className="small text-muted"> </div>
</Col>
<Col sm="2" className="d-flex justify-content-end">
<div className="mr-3">
<CircleLoader
size={20}
loading={queryState.loading === "pending"}
/>
{queryState.loading === "idle" && (
<a href="#" onClick={refreshGraph}>
<i className="fa fa-refresh text-muted" />
</a>
)}
</div>
</Col>
</Row>
<div className="chart-wrapper" style={{ height: 300 + "px" }}>
<HorizontalBar
data={data}
options={chartOpts}
height={300}
redraw={true}
/>
</div>
</CardBody>
</Card>
</Col>
);
}