Home Reference Source Repository

js/models/metrics.js

import {List} from 'models/base';
import log from 'logger';
import moment from 'moment';


export default class Metrics extends List {
    constructor(options) {
        super(options);
        this.$options.ns = 'site';
        this.$options.fetch = 'metrics_for';
    }

    /**
     * Consolidate data
     */
    timeserie(series) {
        if (!this.items || !this.items.length) {
            return [];
        }

        var names = series || Object.keys(last_item.values),
            data = [],
            values = {},
            previous= {};

        // Extract values
        for (var i=0; i < this.items.length; i++) {
            var item = this.items[i];
            values[item.date] = item.values;
        }

        var sorted = Object.keys(values).sort(),
            first_date = sorted[0],
            last_date = sorted[sorted.length -1],
            start = moment(first_date),
            end = moment(last_date),
            days = end.diff(start, 'days');


        for (i=0; i <= days; i++) {
            var date = start.clone().add(i, 'days'),
                key = date.format('YYYY-MM-DD'),
                row = {date: date, key: key};

            names.forEach(function(name) {
                if (values.hasOwnProperty(key) && values[key].hasOwnProperty(name)) {
                    row[name] = values[key][name];
                } else if (previous.hasOwnProperty(name)) {
                    row[name] = previous[name];
                } else {
                    row[name] = 0;
                }
            });

            previous = row;
            data.push(row);
        }

        return data;
    }
};