From 39c7d4d68411571b4d3fe81409ef805ca874c141 Mon Sep 17 00:00:00 2001 From: Vitalii Lysak Date: Fri, 22 Jul 2022 20:09:09 +0300 Subject: add table, processor --- src/utilities/_sila/metricProperties.js | 84 +++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 src/utilities/_sila/metricProperties.js (limited to 'src/utilities/_sila/metricProperties.js') diff --git a/src/utilities/_sila/metricProperties.js b/src/utilities/_sila/metricProperties.js new file mode 100644 index 00000000..5dd58014 --- /dev/null +++ b/src/utilities/_sila/metricProperties.js @@ -0,0 +1,84 @@ +export function getItems(data) { + let filteredData = data.filter((metric) => { + return metric.MetricValue !== 'nan'; + }); + + let transform = filteredData.map((metric) => { + let date = new Date(metric.Timestamp); + let time = + date.getHours() + + ':' + + String(date.getMinutes()).padStart(2, '0') + + ' ' + + formatDate(date); + return { + ...metric, + Timestamp: time, + MetricValue: Math.round(metric.MetricValue), + }; + }); + + let group = transform.reduce(function (rv, x) { + (rv[x['MetricProperty']] = rv[x['MetricProperty']] || []).push(x); + return rv; + }, {}); + + return Object.keys(group).map((metric) => { + return { + name: metric, + currentTemperature: group[metric][group[metric].length - 1].MetricValue, + middleTemperature: findAverage(group[metric]), + minTemperature: findMin(group[metric]), + minDate: findDateOfMin(group[metric]), + maxTemperature: findMax(group[metric]), + maxDate: findDateOfMax(group[metric]), + }; + }); +} + +function padTo2Digits(num) { + return num.toString().padStart(2, '0'); +} + +function formatDate(date) { + return [ + padTo2Digits(date.getDate()), + padTo2Digits(date.getMonth() + 1), + date.getFullYear(), + ].join('.'); +} + +function findAverage(arr) { + const { length } = arr; + return Math.round( + arr.reduce((acc, val) => { + return acc + val.MetricValue / length; + }, 0) + ); +} + +function findMin(arr) { + return arr.reduce( + (min, p) => (p.MetricValue < min ? p.MetricValue : min), + arr[0].MetricValue + ); +} + +function findMax(arr) { + return arr.reduce( + (max, p) => (p.MetricValue > max ? p.MetricValue : max), + arr[0].MetricValue + ); +} + +function findDateOfMin(arr) { + return arr.reduce((res, obj) => + obj.MetricValue < res.MetricValue ? obj : res + ).Timestamp; +} + +function findDateOfMax(arr) { + return arr.reduce((res, obj) => + obj.MetricValue > res.MetricValue ? obj : res + ).Timestamp; +} -- cgit v1.2.3