UNPKG

@grnsft/if

Version:

Impact Framework

52 lines 7.31 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.aggregateOutputsIntoOne = void 0; const utils_1 = require("@grnsft/if-core/utils"); const config_1 = require("../config"); const aggregate_1 = require("../lib/aggregate"); const { MissingAggregationParamError } = utils_1.ERRORS; const { METRIC_MISSING } = config_1.STRINGS; const { AGGREGATION_TIME_METRICS } = config_1.CONFIG; /** * Aggregates child node level metrics. Appends aggregation additional params to metrics. * Otherwise iterates over outputs by aggregating per given `metrics`. */ const aggregateOutputsIntoOne = (outputs, metrics, isTemporal) => { const metricsWithTime = metrics.concat(AGGREGATION_TIME_METRICS); return outputs.reduce((acc, output, index) => { for (const metric of metricsWithTime) { if (!(metric in output)) { throw new MissingAggregationParamError(METRIC_MISSING(metric, index)); } /** Checks if metric is timestamp or duration, then adds to aggregated value. */ if (AGGREGATION_TIME_METRICS.includes(metric)) { if (isTemporal) { acc[metric] = output[metric]; } } else { const aggregationParams = (0, aggregate_1.getAggregationInfoFor)(metric); /** Checks either its a temporal aggregation (vertical), then chooses `component`, otherwise `time`. */ const aggregationType = isTemporal ? 'component' : 'time'; if (aggregationParams[aggregationType] === 'none') { continue; } if (aggregationParams[aggregationType] === 'copy') { acc[metric] = output[metric]; continue; } acc[metric] = acc[metric] ?? 0; acc[metric] += parseFloat(output[metric]); /** Checks for the last iteration. */ if (index === outputs.length - 1) { if (aggregationParams[aggregationType] === 'avg') { acc[metric] /= outputs.length; } } } } return acc; }, {}); }; exports.aggregateOutputsIntoOne = aggregateOutputsIntoOne; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdncmVnYXRpb24taGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2lmLXJ1bi91dGlsL2FnZ3JlZ2F0aW9uLWhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpREFBNkM7QUFHN0Msc0NBQTBDO0FBSTFDLGdEQUF1RDtBQUV2RCxNQUFNLEVBQUMsNEJBQTRCLEVBQUMsR0FBRyxjQUFNLENBQUM7QUFDOUMsTUFBTSxFQUFDLGNBQWMsRUFBQyxHQUFHLGdCQUFPLENBQUM7QUFDakMsTUFBTSxFQUFDLHdCQUF3QixFQUFDLEdBQUcsZUFBTSxDQUFDO0FBRTFDOzs7R0FHRztBQUNJLE1BQU0sdUJBQXVCLEdBQUcsQ0FDckMsT0FBdUIsRUFDdkIsT0FBaUIsRUFDakIsVUFBb0IsRUFDcEIsRUFBRTtJQUNGLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUVqRSxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQzNDLEtBQUssTUFBTSxNQUFNLElBQUksZUFBZSxFQUFFO1lBQ3BDLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsRUFBRTtnQkFDdkIsTUFBTSxJQUFJLDRCQUE0QixDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQzthQUN2RTtZQUVELGdGQUFnRjtZQUNoRixJQUFJLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDN0MsSUFBSSxVQUFVLEVBQUU7b0JBQ2QsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFDOUI7YUFDRjtpQkFBTTtnQkFDTCxNQUFNLGlCQUFpQixHQUFHLElBQUEsaUNBQXFCLEVBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3hELHdHQUF3RztnQkFDeEcsTUFBTSxlQUFlLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztnQkFFMUQsSUFBSSxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsS0FBSyxNQUFNLEVBQUU7b0JBQ2pELFNBQVM7aUJBQ1Y7Z0JBRUQsSUFBSSxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsS0FBSyxNQUFNLEVBQUU7b0JBQ2pELEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQzdCLFNBQVM7aUJBQ1Y7Z0JBRUQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQy9CLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBRTFDLHFDQUFxQztnQkFDckMsSUFBSSxLQUFLLEtBQUssT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQ2hDLElBQUksaUJBQWlCLENBQUMsZUFBZSxDQUFDLEtBQUssS0FBSyxFQUFFO3dCQUNoRCxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQztxQkFDL0I7aUJBQ0Y7YUFDRjtTQUNGO1FBRUQsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBdUIsQ0FBQyxDQUFDO0FBQzlCLENBQUMsQ0FBQztBQTlDVyxRQUFBLHVCQUF1QiwyQkE4Q2xDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtFUlJPUlN9IGZyb20gJ0Bncm5zZnQvaWYtY29yZS91dGlscyc7XG5pbXBvcnQge1BsdWdpblBhcmFtc30gZnJvbSAnQGdybnNmdC9pZi1jb3JlL3R5cGVzJztcblxuaW1wb3J0IHtDT05GSUcsIFNUUklOR1N9IGZyb20gJy4uL2NvbmZpZyc7XG5cbmltcG9ydCB7QWdncmVnYXRpb25SZXN1bHR9IGZyb20gJy4uL3R5cGVzL2FnZ3JlZ2F0aW9uJztcblxuaW1wb3J0IHtnZXRBZ2dyZWdhdGlvbkluZm9Gb3J9IGZyb20gJy4uL2xpYi9hZ2dyZWdhdGUnO1xuXG5jb25zdCB7TWlzc2luZ0FnZ3JlZ2F0aW9uUGFyYW1FcnJvcn0gPSBFUlJPUlM7XG5jb25zdCB7TUVUUklDX01JU1NJTkd9ID0gU1RSSU5HUztcbmNvbnN0IHtBR0dSRUdBVElPTl9USU1FX01FVFJJQ1N9ID0gQ09ORklHO1xuXG4vKipcbiAqIEFnZ3JlZ2F0ZXMgY2hpbGQgbm9kZSBsZXZlbCBtZXRyaWNzLiBBcHBlbmRzIGFnZ3JlZ2F0aW9uIGFkZGl0aW9uYWwgcGFyYW1zIHRvIG1ldHJpY3MuXG4gKiBPdGhlcndpc2UgaXRlcmF0ZXMgb3ZlciBvdXRwdXRzIGJ5IGFnZ3JlZ2F0aW5nIHBlciBnaXZlbiBgbWV0cmljc2AuXG4gKi9cbmV4cG9ydCBjb25zdCBhZ2dyZWdhdGVPdXRwdXRzSW50b09uZSA9IChcbiAgb3V0cHV0czogUGx1Z2luUGFyYW1zW10sXG4gIG1ldHJpY3M6IHN0cmluZ1tdLFxuICBpc1RlbXBvcmFsPzogYm9vbGVhblxuKSA9PiB7XG4gIGNvbnN0IG1ldHJpY3NXaXRoVGltZSA9IG1ldHJpY3MuY29uY2F0KEFHR1JFR0FUSU9OX1RJTUVfTUVUUklDUyk7XG5cbiAgcmV0dXJuIG91dHB1dHMucmVkdWNlKChhY2MsIG91dHB1dCwgaW5kZXgpID0+IHtcbiAgICBmb3IgKGNvbnN0IG1ldHJpYyBvZiBtZXRyaWNzV2l0aFRpbWUpIHtcbiAgICAgIGlmICghKG1ldHJpYyBpbiBvdXRwdXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBNaXNzaW5nQWdncmVnYXRpb25QYXJhbUVycm9yKE1FVFJJQ19NSVNTSU5HKG1ldHJpYywgaW5kZXgpKTtcbiAgICAgIH1cblxuICAgICAgLyoqIENoZWNrcyBpZiBtZXRyaWMgaXMgdGltZXN0YW1wIG9yIGR1cmF0aW9uLCB0aGVuIGFkZHMgdG8gYWdncmVnYXRlZCB2YWx1ZS4gKi9cbiAgICAgIGlmIChBR0dSRUdBVElPTl9USU1FX01FVFJJQ1MuaW5jbHVkZXMobWV0cmljKSkge1xuICAgICAgICBpZiAoaXNUZW1wb3JhbCkge1xuICAgICAgICAgIGFjY1ttZXRyaWNdID0gb3V0cHV0W21ldHJpY107XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGFnZ3JlZ2F0aW9uUGFyYW1zID0gZ2V0QWdncmVnYXRpb25JbmZvRm9yKG1ldHJpYyk7XG4gICAgICAgIC8qKiBDaGVja3MgZWl0aGVyIGl0cyBhIHRlbXBvcmFsIGFnZ3JlZ2F0aW9uICh2ZXJ0aWNhbCksIHRoZW4gY2hvb3NlcyBgY29tcG9uZW50YCwgb3RoZXJ3aXNlIGB0aW1lYC4gICovXG4gICAgICAgIGNvbnN0IGFnZ3JlZ2F0aW9uVHlwZSA9IGlzVGVtcG9yYWwgPyAnY29tcG9uZW50JyA6ICd0aW1lJztcblxuICAgICAgICBpZiAoYWdncmVnYXRpb25QYXJhbXNbYWdncmVnYXRpb25UeXBlXSA9PT0gJ25vbmUnKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWdncmVnYXRpb25QYXJhbXNbYWdncmVnYXRpb25UeXBlXSA9PT0gJ2NvcHknKSB7XG4gICAgICAgICAgYWNjW21ldHJpY10gPSBvdXRwdXRbbWV0cmljXTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFjY1ttZXRyaWNdID0gYWNjW21ldHJpY10gPz8gMDtcbiAgICAgICAgYWNjW21ldHJpY10gKz0gcGFyc2VGbG9hdChvdXRwdXRbbWV0cmljXSk7XG5cbiAgICAgICAgLyoqIENoZWNrcyBmb3IgdGhlIGxhc3QgaXRlcmF0aW9uLiAqL1xuICAgICAgICBpZiAoaW5kZXggPT09IG91dHB1dHMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIGlmIChhZ2dyZWdhdGlvblBhcmFtc1thZ2dyZWdhdGlvblR5cGVdID09PSAnYXZnJykge1xuICAgICAgICAgICAgYWNjW21ldHJpY10gLz0gb3V0cHV0cy5sZW5ndGg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30gYXMgQWdncmVnYXRpb25SZXN1bHQpO1xufTtcbiJdfQ==