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; }
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; };
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' })); } });
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; }
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; });
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' })); } } });
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 }); }
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); };
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); };
getFileManagerFor(uri) { return plywood_1.helper.find(this.fileManagers, (fileManager) => fileManager.uri === uri); }
addDataCube(dataCube) { return this.changeDataCubes(plywood_1.helper.overrideByName(this.dataCubes, dataCube)); }
addCluster(cluster) { return this.changeClusters(plywood_1.helper.overrideByName(this.clusters, cluster)); }
addOrUpdateDataCube(dataCube) { var value = this.valueOf(); value.dataCubes = plywood_1.helper.overrideByName(value.dataCubes, dataCube); return new AppSettings(value); }
getDataCube(dataCubeName) { return plywood_1.helper.findByName(this.dataCubes, dataCubeName); }
function getVisualizationComponent(manifest) { var manifestName = manifest.name; return plywood_1.helper.find(VIS_COMPONENTS, (v) => v.id === manifestName); }
getExternalByName(name) { var managedExternal = plywood_1.helper.findByName(this.managedExternals, name); return managedExternal ? managedExternal.external : null; }
getClusterManagerFor(clusterName) { return plywood_1.helper.find(this.clusterManagers, (clusterManager) => clusterManager.cluster.name === clusterName); }