ravendb
Version:
RavenDB client for Node.js
126 lines • 4.67 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.TypedTimeSeriesRollupEntry = void 0;
const TimeSeriesValuesHelper_js_1 = require("./TimeSeriesValuesHelper.js");
class TypedTimeSeriesRollupEntry {
_clazz;
timestamp;
tag;
rollup;
_first;
_last;
_max;
_min;
_sum;
_count;
_average;
constructor(clazz, timestamp) {
this._clazz = clazz;
this.rollup = true;
this.timestamp = timestamp;
}
_createInstance() {
return new this._clazz();
}
get max() {
if (!this._max) {
this._max = this._createInstance();
}
return this._max;
}
get min() {
if (!this._min) {
this._min = this._createInstance();
}
return this._min;
}
get count() {
if (!this._count) {
this._count = this._createInstance();
}
return this._count;
}
get first() {
if (!this._first) {
this._first = this._createInstance();
}
return this._first;
}
get last() {
if (!this._last) {
this._last = this._createInstance();
}
return this._last;
}
get sum() {
if (!this._sum) {
this._sum = this._createInstance();
}
return this._sum;
}
get average() {
if (this._average) {
return this._average;
}
const valuesCount = TimeSeriesValuesHelper_js_1.TimeSeriesValuesHelper.getFieldsMapping(this._clazz).length;
const sums = TimeSeriesValuesHelper_js_1.TimeSeriesValuesHelper.getValues(this._clazz, this._sum);
const counts = TimeSeriesValuesHelper_js_1.TimeSeriesValuesHelper.getValues(this._clazz, this._count);
const averages = new Array(valuesCount);
for (let i = 0; i < valuesCount; i++) {
if (!counts[i]) {
averages[i] = Number.NaN;
}
else {
averages[i] = sums[i] / counts[i];
}
}
this._average = TimeSeriesValuesHelper_js_1.TimeSeriesValuesHelper.setFields(this._clazz, averages);
return this._average;
}
getValuesFromMembers() {
const valuesCount = TimeSeriesValuesHelper_js_1.TimeSeriesValuesHelper.getFieldsMapping(this._clazz).length;
const result = new Array(valuesCount * 6);
this._assignRollup(result, this._first, 0);
this._assignRollup(result, this._last, 1);
this._assignRollup(result, this._min, 2);
this._assignRollup(result, this._max, 3);
this._assignRollup(result, this._sum, 4);
this._assignRollup(result, this._count, 5);
return result;
}
_assignRollup(target, source, offset) {
if (source) {
const values = TimeSeriesValuesHelper_js_1.TimeSeriesValuesHelper.getValues(this._clazz, source);
if (values) {
for (let i = 0; i < values.length; i++) {
target[i * 6 + offset] = values[i];
}
}
}
}
static fromEntry(entry, clazz) {
const result = new TypedTimeSeriesRollupEntry(clazz, entry.timestamp);
result.rollup = true;
result.tag = entry.tag;
const values = entry.values;
result._first = TimeSeriesValuesHelper_js_1.TimeSeriesValuesHelper.setFields(clazz, TypedTimeSeriesRollupEntry._extractValues(values, 0));
result._last = TimeSeriesValuesHelper_js_1.TimeSeriesValuesHelper.setFields(clazz, TypedTimeSeriesRollupEntry._extractValues(values, 1));
result._min = TimeSeriesValuesHelper_js_1.TimeSeriesValuesHelper.setFields(clazz, TypedTimeSeriesRollupEntry._extractValues(values, 2));
result._max = TimeSeriesValuesHelper_js_1.TimeSeriesValuesHelper.setFields(clazz, TypedTimeSeriesRollupEntry._extractValues(values, 3));
result._sum = TimeSeriesValuesHelper_js_1.TimeSeriesValuesHelper.setFields(clazz, TypedTimeSeriesRollupEntry._extractValues(values, 4));
result._count = TimeSeriesValuesHelper_js_1.TimeSeriesValuesHelper.setFields(clazz, TypedTimeSeriesRollupEntry._extractValues(values, 5));
return result;
}
static _extractValues(input, offset) {
const length = Math.ceil((input.length - offset) / 6);
let idx = 0;
const result = new Array(length);
while (idx < length) {
result[idx] = input[offset + idx * 6];
idx++;
}
return result;
}
}
exports.TypedTimeSeriesRollupEntry = TypedTimeSeriesRollupEntry;
//# sourceMappingURL=TypedTimeSeriesRollupEntry.js.map