| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- import _ from 'lodash';
- import TimeSeries from 'app/core/time_series2';
- /**
- * Convert series into array of series values.
- * @param data Array of series
- */
- export function getSeriesValues(dataList: TimeSeries[]): number[] {
- const VALUE_INDEX = 0;
- const values = [];
- // Count histogam stats
- for (let i = 0; i < dataList.length; i++) {
- const series = dataList[i];
- const datapoints = series.datapoints;
- for (let j = 0; j < datapoints.length; j++) {
- if (datapoints[j][VALUE_INDEX] !== null) {
- values.push(datapoints[j][VALUE_INDEX]);
- }
- }
- }
- return values;
- }
- /**
- * Convert array of values into timeseries-like histogram:
- * [[val_1, count_1], [val_2, count_2], ..., [val_n, count_n]]
- * @param values
- * @param bucketSize
- */
- export function convertValuesToHistogram(values: number[], bucketSize: number, min: number, max: number): any[] {
- const histogram: any = {};
- const minBound = getBucketBound(min, bucketSize);
- const maxBound = getBucketBound(max, bucketSize);
- let bound = minBound;
- let n = 0;
- while (bound <= maxBound) {
- histogram[bound] = 0;
- bound = minBound + bucketSize * n;
- n++;
- }
- for (let i = 0; i < values.length; i++) {
- // filter out values outside the min and max boundaries
- if (values[i] < min || values[i] > max) {
- continue;
- }
- const bound = getBucketBound(values[i], bucketSize);
- histogram[bound] = histogram[bound] + 1;
- }
- const histogamSeries = _.map(histogram, (count, bound) => {
- return [Number(bound), count];
- });
- // Sort by Y axis values
- return _.sortBy(histogamSeries, point => point[0]);
- }
- /**
- * Convert series into array of histogram data.
- * @param data Array of series
- * @param bucketSize
- */
- export function convertToHistogramData(
- data: any,
- bucketSize: number,
- hiddenSeries: any,
- min: number,
- max: number
- ): any[] {
- return data.map((series: any) => {
- const values = getSeriesValues([series]);
- series.histogram = true;
- if (!hiddenSeries[series.alias]) {
- const histogram = convertValuesToHistogram(values, bucketSize, min, max);
- series.data = histogram;
- } else {
- series.data = [];
- }
- return series;
- });
- }
- function getBucketBound(value: number, bucketSize: number): number {
- return Math.floor(value / bucketSize) * bucketSize;
- }
|