Home Reference Source

src/reducers/index.js

import moment from 'moment';
import { combineReducers } from 'redux';
import auth, * as fromAuth from './auth';
import monitors, * as fromMonitors from './monitors';
import hosts, * as fromHosts from './hosts';
import liveCharts, * as fromLiveCharts from './liveCharts';
import historicalCharts, * as fromHistoricalCharts from './historicalCharts';

export const getAuthServer = state => fromAuth.getAuthServer(state.auth);
export const getToken = state => fromAuth.getToken(state.auth);
export const getTokenRequested = state => fromAuth.getTokenRequested(state.auth);

export const convertMonitorsFromObj = state => fromMonitors.convertMonitorsFromObj(state.monitors);
export const getMonitorsAddresses = state => fromMonitors.getMonitorsAddresses(state.monitors);
export const getMonitorsArray = state => fromMonitors.getMonitorsArray(state.monitors);
export const getMonitorsHostsInvalidated = state => fromMonitors.getMonitorsHostsInvalidated(state.monitors);

export const getMonitorByHost = (state, host) => fromHosts.getMonitorByHost(state.hosts, host);
export const getHostsArray = state => fromHosts.getHostsArray(state.hosts);
export const getMetricsAll = state => fromHosts.getMetricsAll(state.hosts);
export const getMetrics = state => fromHosts.getMetrics(state.hosts);

export const getLiveChartById = (state, id) => fromLiveCharts.getLiveChartById(state.liveCharts, id);
export const getLiveChartsAllIds = state => fromLiveCharts.getLiveChartsAllIds(state.liveCharts);
export const getLiveChartsArray = state => fromLiveCharts.getLiveChartsArray(state.liveCharts);

export const getHistoricalChartById = (state, id) => (
    fromHistoricalCharts.getHistoricalChartById(state.historicalCharts, id)
);
export const getHistoricalChartsArray = state => fromHistoricalCharts.getHistoricalChartsArray(state.historicalCharts);

export const getPathname = state => state.router.location.pathname;
export const getLocation = state => state.router.location;

export const getLiveChartByMonitors = (state, id) => {
    const chart = getLiveChartById(state, id);
    const hostsByMonitors = {};
    for (const host of chart.hosts) {
        const monitor = getMonitorByHost(state, host);
        if (monitor) {
            if (!hostsByMonitors[monitor]) {
                hostsByMonitors[monitor] = [];
            }
            hostsByMonitors[monitor].push(host);
        }
    }
    return {
        measurements: chart.measurements,
        hostsByMonitors
    };
};

export const getHistoricalChartsByMonitors = (state, id) => {
    const chart = getHistoricalChartById(state, id);
    const hostsByMetricsAndMonitors = {};
    for (const host of chart.hosts1) {
        const monitor = getMonitorByHost(state, host);
        if (!hostsByMetricsAndMonitors[monitor]) {
            hostsByMetricsAndMonitors[monitor] = { hosts1: [] };
        }
        hostsByMetricsAndMonitors[monitor].hosts1.push(host);
    }
    if (chart.metric2) {
        for (const host of chart.hosts2) {
            const monitor = getMonitorByHost(state, host);
            if (!hostsByMetricsAndMonitors[monitor]) {
                hostsByMetricsAndMonitors[monitor] = { hosts2: [] };
            }
            else if (!hostsByMetricsAndMonitors[monitor].hosts2) {
                hostsByMetricsAndMonitors[monitor].hosts2 = [];
            }
            hostsByMetricsAndMonitors[monitor].hosts2.push(host);
        }
    }
    return hostsByMetricsAndMonitors;
};

export const getLiveChartLastTime = (state, id, monitor) => {
    const chart = getLiveChartById(state, id);
    const monitorHosts = Object.values(chart.hosts).filter(host => state.hosts[host].monitor === monitor);
    return monitorHosts.reduce((c, host) => {
        const data = chart.measurements[host];
        if (!data || !data.length) {
            return c;
        }
        const lastPoint = data.slice(-1).pop();
        return c && moment(c).isAfter(lastPoint.time) ? c : lastPoint.time;
    }, null);
};

export default combineReducers({ auth, monitors, hosts, liveCharts, historicalCharts });