pcon/sfdc-eventMonitoring

View on GitHub
src/login/apiversion-summary.js

Summary

Maintainability
A
0 mins
Test Coverage
var lo = require('lodash');
var Q = require('q');

var login = require('../lib/login.js');
var queries = require('../lib/queries.js');
var qutils = require('../lib/qutils.js');
var statics = require('../lib/statics.js');
var utils = require('../lib/utils.js');

var COLUMNS = [
    'version',
    'count'
];

var OUTPUT_INFO = statics.report.generateOutputInfo(COLUMNS);

/**
 * Generates the version
 * @param {object} log The log
 * @returns {string} The version
 */
function generateVersion(log) {
    return parseInt(log.API_VERSION);
}

/**
 * Groups the data by the version
 * @param {array} logs The Logs
 * @return {Promise} A promise for the logs grouped by version
 */
var groupByVersion = function (logs) {
    var deferred = Q.defer();
    var version;
    var grouping = {};

    lo.forEach(logs, function (log) {
        version = generateVersion(log);

        if (
            lo.isEmpty(log.API_TYPE) ||
            version >= global.config.maxversion
        ) {
            return;
        }

        if (!lo.has(grouping, version)) {
            grouping[version] = [];
        }

        grouping[version].push(log);
    });

    deferred.resolve(grouping);

    return deferred.promise;
};

/**
 * Generates the counts for a single version
 * @param {array} logs The logs
 * @param {string} version The version
 * @return {promise} A promise for a count for the version
 */
var generateCountsForVersion = function (logs, version) {
    var deferred = Q.defer();
    var counts = {
        version: parseInt(version),
        count: lo.size(logs)
    };

    deferred.resolve(counts);

    return deferred.promise;
};

/**
 * Generate the counts for every version
 * @param {object} grouping The grouping of version
 * @returns {Promise} A promise for all the counts for all the groupings
 */
var generateCounts = function (grouping) {
    var deferred = Q.defer();
    var promises = [];

    lo.forEach(grouping, function (logs, version) {
        promises.push(generateCountsForVersion(logs, version));
    });

    qutils.allSettledPushValue(deferred, promises, grouping, 'counts');

    return deferred.promise;
};

/**
 * Prints the counts based on the format
 * @param {object} data The data
 * @returns {Promise} A promise for when the data has been printed
 */
var printCounts = function (data) {
    return utils.printFormattedData(data.counts, COLUMNS, OUTPUT_INFO);
};

/**
 * The stuff to run
 * @returns {undefined}
 */
var run = function () {
    'use strict';

    login.run({
        query: queries.login(),
        groupBy: groupByVersion,
        generateCounts: generateCounts,
        printCounts: printCounts
    });
};

var cli = { run: run };

module.exports = cli;