32 lines
1.2 KiB
JavaScript
32 lines
1.2 KiB
JavaScript
/**
|
|
* @param {Array} queryResults - Array of Result objects
|
|
* @param {Object} defaultConfig - Default chart config values (e.g. lineStyle, name)
|
|
* @returns {Array} The formatted values
|
|
*/
|
|
// eslint-disable-next-line import/prefer-default-export
|
|
export const makeDataSeries = (queryResults, defaultConfig) =>
|
|
queryResults
|
|
.map(result => {
|
|
// NaN values may disrupt avg., max. & min. calculations in the legend, filter them out
|
|
const data = result.values.filter(([, value]) => !Number.isNaN(value));
|
|
if (!data.length) {
|
|
return null;
|
|
}
|
|
const relevantMetric = defaultConfig.name.toLowerCase().replace(' ', '_');
|
|
const name = result.metric[relevantMetric];
|
|
const series = { data };
|
|
if (name) {
|
|
series.name = `${defaultConfig.name}: ${name}`;
|
|
} else {
|
|
series.name = defaultConfig.name;
|
|
Object.keys(result.metric).forEach(templateVar => {
|
|
const value = result.metric[templateVar];
|
|
const regex = new RegExp(`{{\\s*${templateVar}\\s*}}`, 'g');
|
|
|
|
series.name = series.name.replace(regex, value);
|
|
});
|
|
}
|
|
|
|
return { ...defaultConfig, ...series };
|
|
})
|
|
.filter(series => series !== null);
|