Exemplo n.º 1
0
function measuresFromLongForm(longForm) {
    var metricColumn = longForm.metricColumn, values = longForm.values, possibleAggregates = longForm.possibleAggregates, titleNameTrim = longForm.titleNameTrim;
    var myPossibleAggregates = {};
    for (var agg in possibleAggregates) {
        if (!general_1.hasOwnProperty(possibleAggregates, agg))
            continue;
        myPossibleAggregates[agg] = plywood_1.Expression.fromJSLoose(possibleAggregates[agg]);
    }
    var measures = [];
    for (var _i = 0; _i < values.length; _i++) {
        var value = values[_i];
        var aggregates = value.aggregates;
        if (!Array.isArray(aggregates)) {
            throw new Error('must have aggregates in longForm value');
        }
        for (var _a = 0; _a < aggregates.length; _a++) {
            var aggregate = aggregates[_a];
            var myExpression = myPossibleAggregates[aggregate];
            if (!myExpression)
                throw new Error("can not find aggregate " + aggregate + " for value " + value.value);
            var name = general_1.makeUrlSafeName(aggregate + "_" + value.value);
            measures.push(new measure_1.Measure({
                name: name,
                title: general_1.makeTitle(titleNameTrim ? name.replace(titleNameTrim, '') : name),
                expression: myExpression.substitute(function (ex) {
                    if (ex instanceof plywood_1.RefExpression && ex.name === 'filtered') {
                        return plywood_1.$('main').filter(plywood_1.$(metricColumn).is(plywood_1.r(value.value)));
                    }
                    return null;
                })
            }));
        }
    }
    return measures;
}
Exemplo n.º 2
0
 SplitCombine.fromJS = function (parameters, context) {
     if (typeof parameters === 'string') {
         if (!context)
             throw new Error('must have context for string split');
         var dimension = context.dimensions.find(function (d) { return d.name === parameters; });
         if (!dimension)
             throw new Error("can not find dimension " + parameters);
         return new SplitCombine({
             expression: dimension.expression,
             bucketAction: null,
             sortAction: null,
             limitAction: null
         });
     }
     else {
         var value = {
             expression: plywood_1.Expression.fromJSLoose(parameters.expression),
             bucketAction: null,
             sortAction: null,
             limitAction: null
         };
         if (parameters.bucketAction)
             value.bucketAction = plywood_1.Action.fromJS(parameters.bucketAction);
         if (parameters.sortAction)
             value.sortAction = plywood_1.SortAction.fromJS(parameters.sortAction);
         if (parameters.limitAction)
             value.limitAction = plywood_1.LimitAction.fromJS(parameters.limitAction);
         return new SplitCombine(value);
     }
 };
Exemplo n.º 3
0
 DataSource.fromJS = function (parameters, context) {
     if (context === void 0) { context = {}; }
     var executor = context.executor, external = context.external;
     var engine = parameters.engine;
     var introspection = parameters.introspection;
     var attributeOverrideJSs = parameters.attributeOverrides;
     // Back compat.
     var options = parameters.options || {};
     if (options.skipIntrospection) {
         if (!introspection)
             introspection = 'none';
         delete options.skipIntrospection;
     }
     if (options.disableAutofill) {
         if (!introspection)
             introspection = 'no-autofill';
         delete options.disableAutofill;
     }
     if (options.attributeOverrides) {
         if (!attributeOverrideJSs)
             attributeOverrideJSs = options.attributeOverrides;
         delete options.attributeOverrides;
     }
     if (options.defaultSplitDimension) {
         options.defaultSplits = options.defaultSplitDimension;
         delete options.defaultSplitDimension;
     }
     // End Back compat.
     introspection = introspection || DataSource.DEFAULT_INTROSPECTION;
     if (DataSource.INTROSPECTION_VALUES.indexOf(introspection) === -1) {
         throw new Error("invalid introspection value " + introspection + ", must be one of " + DataSource.INTROSPECTION_VALUES.join(', '));
     }
     var refreshRule = parameters.refreshRule ? refresh_rule_1.RefreshRule.fromJS(parameters.refreshRule) : refresh_rule_1.RefreshRule.query();
     var maxTime = parameters.maxTime ? max_time_1.MaxTime.fromJS(parameters.maxTime) : null;
     if (!maxTime && refreshRule.isRealtime()) {
         maxTime = max_time_1.MaxTime.fromNow();
     }
     var timeAttributeName = parameters.timeAttribute;
     if (engine === 'druid' && !timeAttributeName) {
         timeAttributeName = '__time';
     }
     var timeAttribute = timeAttributeName ? plywood_1.$(timeAttributeName) : null;
     var attributeOverrides = plywood_1.AttributeInfo.fromJSs(attributeOverrideJSs || []);
     var attributes = plywood_1.AttributeInfo.fromJSs(parameters.attributes || []);
     var derivedAttributes = null;
     if (parameters.derivedAttributes) {
         derivedAttributes = plywood_1.helper.expressionLookupFromJS(parameters.derivedAttributes);
     }
     var dimensions = makeUniqueDimensionList((parameters.dimensions || []).map(function (d) { return dimension_1.Dimension.fromJS(d); }));
     var measures = makeUniqueMeasureList((parameters.measures || []).map(function (m) { return measure_1.Measure.fromJS(m); }));
     if (timeAttribute && !dimension_1.Dimension.getDimensionByExpression(dimensions, timeAttribute)) {
         dimensions = dimensions.unshift(new dimension_1.Dimension({
             name: timeAttributeName,
             expression: timeAttribute,
             kind: 'time'
         }));
     }
     var subsetFilter = parameters.subsetFilter ? plywood_1.Expression.fromJSLoose(parameters.subsetFilter) : null;
     var longForm = parameters.longForm;
     if (longForm) {
         measures = measures.concat(measuresFromLongForm(longForm));
         if (longForm.addSubsetFilter) {
             if (!subsetFilter)
                 subsetFilter = plywood_1.Expression.TRUE;
             subsetFilter = subsetFilter.and(filterFromLongFrom(longForm)).simplify();
         }
     }
     var value = {
         executor: null,
         name: parameters.name,
         title: parameters.title,
         engine: engine,
         source: parameters.source,
         subsetFilter: subsetFilter,
         rollup: parameters.rollup,
         options: options,
         introspection: introspection,
         attributeOverrides: attributeOverrides,
         attributes: attributes,
         derivedAttributes: derivedAttributes,
         dimensions: dimensions,
         measures: measures,
         timeAttribute: timeAttribute,
         defaultTimezone: parameters.defaultTimezone ? chronoshift_1.Timezone.fromJS(parameters.defaultTimezone) : DataSource.DEFAULT_TIMEZONE,
         defaultFilter: parameters.defaultFilter ? filter_1.Filter.fromJS(parameters.defaultFilter) : filter_1.Filter.EMPTY,
         defaultDuration: parameters.defaultDuration ? chronoshift_1.Duration.fromJS(parameters.defaultDuration) : DataSource.DEFAULT_DURATION,
         defaultSortMeasure: parameters.defaultSortMeasure || (measures.size ? measures.first().name : null),
         defaultPinnedDimensions: immutable_1.OrderedSet(parameters.defaultPinnedDimensions || []),
         refreshRule: refreshRule,
         maxTime: maxTime
     };
     if (external)
         value.external = external;
     if (executor)
         value.executor = executor;
     return new DataSource(value);
 };
Exemplo n.º 4
0
router.post('/', (req, res) => {
    var { version, dataCube, dataSource, expression, timezone } = req.body;
    dataCube = dataCube || dataSource; // back compat
    if (version && version !== req.version) {
        res.status(412).send({
            error: 'incorrect version',
            action: 'reload'
        });
        return;
    }
    if (typeof dataCube !== 'string') {
        res.status(400).send({
            error: 'must have a dataCube'
        });
        return;
    }
    var queryTimezone = null;
    if (typeof timezone === 'string') {
        try {
            queryTimezone = chronoshift_1.Timezone.fromJS(timezone);
        }
        catch (e) {
            res.status(400).send({
                error: 'bad timezone',
                message: e.message
            });
            return;
        }
    }
    var ex = null;
    try {
        ex = plywood_1.Expression.fromJS(expression);
    }
    catch (e) {
        res.status(400).send({
            error: 'bad expression',
            message: e.message
        });
        return;
    }
    req.getSettings(dataCube)
        .then((appSettings) => {
        var myDataCube = appSettings.getDataCube(dataCube);
        if (!myDataCube) {
            res.status(400).send({ error: 'unknown data cube' });
            return;
        }
        if (!myDataCube.executor) {
            res.status(400).send({ error: 'un queryable data cube' });
            return;
        }
        return myDataCube.executor(ex, { timezone: queryTimezone }).then((data) => {
            res.json({
                result: plywood_1.Dataset.isDataset(data) ? data.toJS() : data
            });
        }, (e) => {
            console.log('error:', e.message);
            if (e.hasOwnProperty('stack')) {
                console.log(e.stack);
            }
            res.status(500).send({
                error: 'could not compute',
                message: e.message
            });
        });
    })
        .done();
});