Handle invalid metric response properly (#464)

* catch undefined and return default empty in normalizeMetrics

* fix crash on drilldown

Signed-off-by: Sebastian Malton <smalton@mirantis.com>

Co-authored-by: Sebastian Malton <smalton@mirantis.com>
This commit is contained in:
Sebastian MaltonandSebastian Malton authored and GitHub committed 2020-06-16 13:47:01 -04:00
1 parent b9ddb503ee
commit 1752b8d3d9
5 files changed
+35 -18

No files matched your search

+19 -2
View File
@@ -56,7 +56,21 @@ export const metricsApi = {
};
export function normalizeMetrics(metrics: IMetrics, frames = 60): IMetrics {
if (!metrics?.data?.result) {
return {
data: {
resultType: "",
result: [{
metric: {},
values: []
} as IMetricsResult],
},
status: "",
}
}
const { result } = metrics.data;
if (result.length) {
if (frames > 0) {
// fill the gaps
@@ -80,13 +94,16 @@ export function normalizeMetrics(metrics: IMetrics, frames = 60): IMetrics {
}
export function isMetricsEmpty(metrics: { [key: string]: IMetrics }) {
return Object.values(metrics).every(metric => !metric.data.result.length);
return Object.values(metrics).every(metric => !metric?.data?.result?.length);
}
export function getItemMetrics(metrics: { [key: string]: IMetrics }, itemName: string) {
export function getItemMetrics(metrics: { [key: string]: IMetrics }, itemName: string): { [key: string]: IMetrics } {
if (!metrics) return;
const itemMetrics = { ...metrics };
for (const metric in metrics) {
if (!metrics[metric]?.data?.result) {
continue
}
const results = metrics[metric].data.result;
const result = results.find(res => Object.values(res.metric)[0] == itemName);
itemMetrics[metric].data.result = result ? [result] : [];