import _ from 'underscore'; function sortMetrics(metrics) { return _.chain(metrics) .sortBy('title') .sortBy('weight') .value(); } function normalizeMetrics(metrics) { return metrics.map(metric => ({ ...metric, queries: metric.queries.map(query => ({ ...query, result: query.result.map(result => ({ ...result, values: result.values.map(([timestamp, value]) => ({ time: new Date(timestamp * 1000), value: Number(value), })), })), })), })); } export default class MonitoringStore { constructor() { this.groups = []; this.deploymentData = []; this.environmentsData = []; } storeMetrics(groups = []) { this.groups = groups.map(group => ({ ...group, metrics: normalizeMetrics(sortMetrics(group.metrics)), })); } storeDeploymentData(deploymentData = []) { this.deploymentData = deploymentData; } storeEnvironmentsData(environmentsData = []) { this.environmentsData = environmentsData.filter( environment => !!environment.latest.last_deployment, ); } getMetricsCount() { return this.groups.reduce((count, group) => count + group.metrics.length, 0); } }