76 lines
2.4 KiB
JavaScript
76 lines
2.4 KiB
JavaScript
'use strict';
|
|
|
|
const debug = require('debug')('windshaft:dataview:histogram');
|
|
const NumericHistogram = require('./histograms/numeric-histogram');
|
|
const DateHistogram = require('./histograms/date-histogram');
|
|
|
|
const DATE_HISTOGRAM = 'DateHistogram';
|
|
const NUMERIC_HISTOGRAM = 'NumericHistogram';
|
|
|
|
module.exports = class Histogram {
|
|
constructor (query, options, queries) {
|
|
this.query = query;
|
|
this.options = options || {};
|
|
this.queries = queries;
|
|
|
|
this.histogramImplementation = this._getHistogramImplementation();
|
|
}
|
|
|
|
_getHistogramImplementation (override) {
|
|
let implementation = null;
|
|
|
|
switch (this._getHistogramSubtype(override)) {
|
|
case DATE_HISTOGRAM:
|
|
debug('Delegating to DateHistogram with options: %j and overriding: %j', this.options, override);
|
|
implementation = new DateHistogram(this.query, this.options, this.queries);
|
|
break;
|
|
case NUMERIC_HISTOGRAM:
|
|
debug('Delegating to NumericHistogram with options: %j and overriding: %j', this.options, override);
|
|
implementation = new NumericHistogram(this.query, this.options, this.queries);
|
|
break;
|
|
default:
|
|
throw new Error('Unsupported Histogram type');
|
|
}
|
|
|
|
return implementation;
|
|
}
|
|
|
|
_getHistogramSubtype (override) {
|
|
if (this._isDateHistogram(override)) {
|
|
return DATE_HISTOGRAM;
|
|
}
|
|
|
|
return NUMERIC_HISTOGRAM;
|
|
}
|
|
|
|
_isDateHistogram (override = {}) {
|
|
return (Object.prototype.hasOwnProperty.call(this.options, 'aggregation') ||
|
|
Object.prototype.hasOwnProperty.call(override, 'aggregation'));
|
|
}
|
|
|
|
getResult (psql, override, callback) {
|
|
this.histogramImplementation = this._getHistogramImplementation(override);
|
|
this.histogramImplementation.getResult(psql, override, callback);
|
|
}
|
|
|
|
// In order to keep previous behaviour with overviews,
|
|
// we have to expose the following methods to bypass
|
|
// the concrete overview implementation
|
|
|
|
sql (psql, override, callback) {
|
|
this.histogramImplementation.sql(psql, override, callback);
|
|
}
|
|
|
|
format (result, override) {
|
|
return this.histogramImplementation.format(result, override);
|
|
}
|
|
|
|
getType () {
|
|
return this.histogramImplementation.getType();
|
|
}
|
|
|
|
toString () {
|
|
return this.histogramImplementation.toString();
|
|
}
|
|
};
|