コード例 #1
0
ファイル: requester.js プロジェクト: gerencio/pivot
function properDruidRequesterFactory(options) {
    var druidHost = options.druidHost, retry = options.retry, timeout = options.timeout, verbose = options.verbose, concurrentLimit = options.concurrentLimit, requestDecorator = options.requestDecorator;
    var druidRequester = plywood_druid_requester_1.druidRequesterFactory({
        host: druidHost,
        timeout: timeout || 30000,
        requestDecorator: requestDecorator
    });
    if (retry) {
        druidRequester = plywood_1.helper.retryRequesterFactory({
            requester: druidRequester,
            retry: retry,
            delay: 500,
            retryOnTimeout: false
        });
    }
    if (verbose) {
        druidRequester = plywood_1.helper.verboseRequesterFactory({
            requester: druidRequester
        });
    }
    if (concurrentLimit) {
        druidRequester = plywood_1.helper.concurrentLimitRequesterFactory({
            requester: druidRequester,
            concurrentLimit: concurrentLimit
        });
    }
    return druidRequester;
}
コード例 #2
0
ファイル: data-source.js プロジェクト: gerencio/pivot
 DataSource.prototype.toJS = function () {
     var js = {
         name: this.name,
         title: this.title,
         engine: this.engine,
         source: this.source,
         subsetFilter: this.subsetFilter ? this.subsetFilter.toJS() : null,
         introspection: this.introspection,
         dimensions: this.dimensions.toArray().map(function (dimension) { return dimension.toJS(); }),
         measures: this.measures.toArray().map(function (measure) { return measure.toJS(); }),
         defaultTimezone: this.defaultTimezone.toJS(),
         defaultFilter: this.defaultFilter.toJS(),
         defaultDuration: this.defaultDuration.toJS(),
         defaultSortMeasure: this.defaultSortMeasure,
         defaultPinnedDimensions: this.defaultPinnedDimensions.toArray(),
         refreshRule: this.refreshRule.toJS()
     };
     if (this.rollup)
         js.rollup = true;
     if (this.timeAttribute)
         js.timeAttribute = this.timeAttribute.name;
     if (this.attributeOverrides.length)
         js.attributeOverrides = plywood_1.AttributeInfo.toJSs(this.attributeOverrides);
     if (this.attributes.length)
         js.attributes = plywood_1.AttributeInfo.toJSs(this.attributes);
     if (this.derivedAttributes)
         js.derivedAttributes = plywood_1.helper.expressionLookupToJS(this.derivedAttributes);
     if (Object.keys(this.options).length)
         js.options = this.options;
     if (this.maxTime)
         js.maxTime = this.maxTime.toJS();
     return js;
 };
コード例 #3
0
ファイル: data-source.js プロジェクト: gerencio/pivot
 dimensions.forEach(function (dimension) {
     var expression = dimension.expression;
     if (expression.equals(timeAttribute))
         return;
     var references = expression.getFreeReferences();
     for (var _i = 0; _i < references.length; _i++) {
         var reference = references[_i];
         if (plywood_1.helper.findByName(attributes, reference))
             continue;
         attributes.push(plywood_1.AttributeInfo.fromJS({ name: reference, type: 'STRING' }));
     }
 });
コード例 #4
0
ファイル: app-settings.js プロジェクト: ewgenius/pivot
 constructor(parameters) {
     const { clusters, customization, dataCubes, linkViewConfig } = parameters;
     for (var dataCube of dataCubes) {
         if (dataCube.clusterName === 'native')
             continue;
         if (!plywood_1.helper.findByName(clusters, dataCube.clusterName)) {
             throw new Error(`data cube ${dataCube.name} refers to an unknown cluster ${dataCube.clusterName}`);
         }
     }
     this.clusters = clusters;
     this.customization = customization;
     this.dataCubes = dataCubes;
     this.linkViewConfig = linkViewConfig;
 }
コード例 #5
0
ファイル: app-settings.js プロジェクト: ewgenius/pivot
 var dataCubes = (parameters.dataCubes || parameters.dataSources || []).map((dataCubeJS) => {
     var dataCubeClusterName = dataCubeJS.clusterName || dataCubeJS.engine;
     if (dataCubeClusterName !== 'native') {
         var cluster = plywood_1.helper.findByName(clusters, dataCubeClusterName);
         if (!cluster)
             throw new Error(`Can not find cluster '${dataCubeClusterName}' for data cube '${dataCubeJS.name}'`);
     }
     var dataCubeObject = data_cube_1.DataCube.fromJS(dataCubeJS, { cluster: cluster });
     if (executorFactory) {
         var executor = executorFactory(dataCubeObject);
         if (executor)
             dataCubeObject = dataCubeObject.attachExecutor(executor);
     }
     return dataCubeObject;
 });
コード例 #6
0
ファイル: data-source.js プロジェクト: gerencio/pivot
 measures.forEach(function (measure) {
     var expression = measure.expression;
     var references = measure_1.Measure.getAggregateReferences(expression);
     var countDistinctReferences = measure_1.Measure.getCountDistinctReferences(expression);
     for (var _i = 0; _i < references.length; _i++) {
         var reference = references[_i];
         if (plywood_1.helper.findByName(attributes, reference))
             continue;
         if (countDistinctReferences.indexOf(reference) !== -1) {
             attributes.push(plywood_1.AttributeInfo.fromJS({ name: reference, special: 'unique' }));
         }
         else {
             attributes.push(plywood_1.AttributeInfo.fromJS({ name: reference, type: 'NUMBER' }));
         }
     }
 });
コード例 #7
0
ファイル: link-item.js プロジェクト: ewgenius/pivot
 static fromJS(parameters, context) {
     if (!context)
         throw new Error('LinkItem must have context');
     const { dataCubes, visualizations } = context;
     var dataCubeName = parameters.dataCube;
     var dataCube = plywood_1.helper.find(dataCubes, d => d.name === dataCubeName);
     if (!dataCube)
         throw new Error(`can not find dataCube '${dataCubeName}'`);
     var essence = essence_1.Essence.fromJS(parameters.essence, { dataCube: dataCube, visualizations: visualizations }).updateSplitsWithFilter();
     return new LinkItem({
         name: parameters.name,
         title: parameters.title,
         description: parameters.description,
         group: parameters.group,
         dataCube: dataCube,
         essence: essence
     });
 }
コード例 #8
0
ファイル: data-source.js プロジェクト: gerencio/pivot
 DataSource.prototype.addAttributes = function (newAttributes) {
     var _this = this;
     var _a = this, introspection = _a.introspection, dimensions = _a.dimensions, measures = _a.measures, attributes = _a.attributes;
     if (introspection === 'none')
         return this;
     var autofillDimensions = introspection === 'autofill-dimensions-only' || introspection === 'autofill-all';
     var autofillMeasures = introspection === 'autofill-measures-only' || introspection === 'autofill-all';
     var $main = plywood_1.$('main');
     for (var _i = 0; _i < newAttributes.length; _i++) {
         var newAttribute = newAttributes[_i];
         var name = newAttribute.name, type = newAttribute.type, special = newAttribute.special;
         // Already exists
         if (attributes && plywood_1.helper.findByName(attributes, name))
             continue;
         var expression;
         switch (type) {
             case 'TIME':
                 if (!autofillDimensions)
                     continue;
                 expression = plywood_1.$(name);
                 if (this.getDimensionByExpression(expression))
                     continue;
                 // Add to the start
                 dimensions = dimensions.unshift(new dimension_1.Dimension({
                     name: general_1.makeUrlSafeName(name),
                     kind: 'time',
                     expression: expression
                 }));
                 break;
             case 'STRING':
                 if (special === 'unique' || special === 'theta') {
                     if (!autofillMeasures)
                         continue;
                     var newMeasures = measure_1.Measure.measuresFromAttributeInfo(newAttribute);
                     newMeasures.forEach(function (newMeasure) {
                         if (_this.getMeasureByExpression(newMeasure.expression))
                             return;
                         measures = measures.push(newMeasure);
                     });
                 }
                 else {
                     if (!autofillDimensions)
                         continue;
                     expression = plywood_1.$(name);
                     if (this.getDimensionByExpression(expression))
                         continue;
                     dimensions = dimensions.push(new dimension_1.Dimension({
                         name: general_1.makeUrlSafeName(name),
                         expression: expression
                     }));
                 }
                 break;
             case 'SET/STRING':
                 if (!autofillDimensions)
                     continue;
                 expression = plywood_1.$(name);
                 if (this.getDimensionByExpression(expression))
                     continue;
                 dimensions = dimensions.push(new dimension_1.Dimension({
                     name: general_1.makeUrlSafeName(name),
                     expression: expression
                 }));
                 break;
             case 'BOOLEAN':
                 if (!autofillDimensions)
                     continue;
                 expression = plywood_1.$(name);
                 if (this.getDimensionByExpression(expression))
                     continue;
                 dimensions = dimensions.push(new dimension_1.Dimension({
                     name: general_1.makeUrlSafeName(name),
                     kind: 'boolean',
                     expression: expression
                 }));
                 break;
             case 'NUMBER':
                 if (!autofillMeasures)
                     continue;
                 var newMeasures = measure_1.Measure.measuresFromAttributeInfo(newAttribute);
                 newMeasures.forEach(function (newMeasure) {
                     if (_this.getMeasureByExpression(newMeasure.expression))
                         return;
                     measures = (name === 'count') ? measures.unshift(newMeasure) : measures.push(newMeasure);
                 });
                 break;
             default:
                 throw new Error("unsupported type " + type);
         }
     }
     if (!this.rolledUp() && !measures.find(function (m) { return m.name === 'count'; })) {
         measures = measures.unshift(new measure_1.Measure({
             name: 'count',
             expression: $main.count()
         }));
     }
     var value = this.valueOf();
     value.attributes = attributes ? plywood_1.AttributeInfo.override(attributes, newAttributes) : newAttributes;
     value.dimensions = dimensions;
     value.measures = measures;
     if (!value.defaultSortMeasure) {
         value.defaultSortMeasure = measures.size ? measures.first().name : null;
     }
     // ToDo: remove this when Pivot can handle it
     if (!value.timeAttribute && dimensions.first().kind === 'time') {
         value.timeAttribute = dimensions.first().expression;
     }
     return new DataSource(value);
 };
コード例 #9
0
ファイル: data-source.js プロジェクト: gerencio/pivot
 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);
 };
コード例 #10
0
ファイル: settings-manager.js プロジェクト: ewgenius/pivot
 getFileManagerFor(uri) {
     return plywood_1.helper.find(this.fileManagers, (fileManager) => fileManager.uri === uri);
 }
コード例 #11
0
ファイル: app-settings.js プロジェクト: ewgenius/pivot
 addDataCube(dataCube) {
     return this.changeDataCubes(plywood_1.helper.overrideByName(this.dataCubes, dataCube));
 }
コード例 #12
0
ファイル: app-settings.js プロジェクト: ewgenius/pivot
 addCluster(cluster) {
     return this.changeClusters(plywood_1.helper.overrideByName(this.clusters, cluster));
 }
コード例 #13
0
ファイル: app-settings.js プロジェクト: ewgenius/pivot
 addOrUpdateDataCube(dataCube) {
     var value = this.valueOf();
     value.dataCubes = plywood_1.helper.overrideByName(value.dataCubes, dataCube);
     return new AppSettings(value);
 }
コード例 #14
0
ファイル: app-settings.js プロジェクト: ewgenius/pivot
 getDataCube(dataCubeName) {
     return plywood_1.helper.findByName(this.dataCubes, dataCubeName);
 }
コード例 #15
0
ファイル: index.js プロジェクト: ewgenius/pivot
function getVisualizationComponent(manifest) {
    var manifestName = manifest.name;
    return plywood_1.helper.find(VIS_COMPONENTS, (v) => v.id === manifestName);
}
コード例 #16
0
ファイル: cluster-manager.js プロジェクト: ewgenius/pivot
 getExternalByName(name) {
     var managedExternal = plywood_1.helper.findByName(this.managedExternals, name);
     return managedExternal ? managedExternal.external : null;
 }
コード例 #17
0
ファイル: settings-manager.js プロジェクト: ewgenius/pivot
 getClusterManagerFor(clusterName) {
     return plywood_1.helper.find(this.clusterManagers, (clusterManager) => clusterManager.cluster.name === clusterName);
 }