The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
grafana/public/app/plugins/datasource/elasticsearch/query_def.ts

230 lines
5.8 KiB

import _ from 'lodash';
export const metricAggTypes = [
{ text: 'Count', value: 'count', requiresField: false },
{
text: 'Average',
value: 'avg',
requiresField: true,
supportsInlineScript: true,
supportsMissing: true,
},
{
text: 'Sum',
value: 'sum',
requiresField: true,
supportsInlineScript: true,
supportsMissing: true,
},
{
text: 'Max',
value: 'max',
requiresField: true,
supportsInlineScript: true,
supportsMissing: true,
},
{
text: 'Min',
value: 'min',
requiresField: true,
supportsInlineScript: true,
supportsMissing: true,
},
{
text: 'Extended Stats',
value: 'extended_stats',
requiresField: true,
supportsMissing: true,
supportsInlineScript: true,
},
{
text: 'Percentiles',
value: 'percentiles',
requiresField: true,
supportsMissing: true,
supportsInlineScript: true,
},
{
text: 'Unique Count',
value: 'cardinality',
requiresField: true,
supportsMissing: true,
},
{
text: 'Moving Average',
value: 'moving_avg',
requiresField: false,
isPipelineAgg: true,
minVersion: 2,
},
{
text: 'Derivative',
value: 'derivative',
requiresField: false,
isPipelineAgg: true,
minVersion: 2,
},
{ text: 'Raw Document', value: 'raw_document', requiresField: false },
];
export const bucketAggTypes = [
{ text: 'Terms', value: 'terms', requiresField: true },
{ text: 'Filters', value: 'filters' },
{ text: 'Geo Hash Grid', value: 'geohash_grid', requiresField: true },
{ text: 'Date Histogram', value: 'date_histogram', requiresField: true },
{ text: 'Histogram', value: 'histogram', requiresField: true },
];
export const orderByOptions = [{ text: 'Doc Count', value: '_count' }, { text: 'Term value', value: '_term' }];
export const orderOptions = [{ text: 'Top', value: 'desc' }, { text: 'Bottom', value: 'asc' }];
export const sizeOptions = [
{ text: 'No limit', value: '0' },
{ text: '1', value: '1' },
{ text: '2', value: '2' },
{ text: '3', value: '3' },
{ text: '5', value: '5' },
{ text: '10', value: '10' },
{ text: '15', value: '15' },
{ text: '20', value: '20' },
];
export const extendedStats = [
{ text: 'Avg', value: 'avg' },
{ text: 'Min', value: 'min' },
{ text: 'Max', value: 'max' },
{ text: 'Sum', value: 'sum' },
{ text: 'Count', value: 'count' },
{ text: 'Std Dev', value: 'std_deviation' },
{ text: 'Std Dev Upper', value: 'std_deviation_bounds_upper' },
{ text: 'Std Dev Lower', value: 'std_deviation_bounds_lower' },
];
export const intervalOptions = [
{ text: 'auto', value: 'auto' },
{ text: '10s', value: '10s' },
{ text: '1m', value: '1m' },
{ text: '5m', value: '5m' },
{ text: '10m', value: '10m' },
{ text: '20m', value: '20m' },
{ text: '1h', value: '1h' },
{ text: '1d', value: '1d' },
];
export const movingAvgModelOptions = [
{ text: 'Simple', value: 'simple' },
{ text: 'Linear', value: 'linear' },
{ text: 'Exponentially Weighted', value: 'ewma' },
{ text: 'Holt Linear', value: 'holt' },
{ text: 'Holt Winters', value: 'holt_winters' },
];
export const pipelineOptions = {
moving_avg: [
{ text: 'window', default: 5 },
{ text: 'model', default: 'simple' },
{ text: 'predict', default: undefined },
{ text: 'minimize', default: false },
],
derivative: [{ text: 'unit', default: undefined }],
};
export const movingAvgModelSettings = {
simple: [],
linear: [],
ewma: [{ text: 'Alpha', value: 'alpha', default: undefined }],
holt: [{ text: 'Alpha', value: 'alpha', default: undefined }, { text: 'Beta', value: 'beta', default: undefined }],
holt_winters: [
{ text: 'Alpha', value: 'alpha', default: undefined },
{ text: 'Beta', value: 'beta', default: undefined },
{ text: 'Gamma', value: 'gamma', default: undefined },
{ text: 'Period', value: 'period', default: undefined },
{ text: 'Pad', value: 'pad', default: undefined, isCheckbox: true },
],
};
export function getMetricAggTypes(esVersion) {
return _.filter(metricAggTypes, function(f) {
if (f.minVersion) {
return f.minVersion <= esVersion;
} else {
return true;
}
});
}
export function getPipelineOptions(metric) {
if (!isPipelineAgg(metric.type)) {
return [];
}
return pipelineOptions[metric.type];
}
export function isPipelineAgg(metricType) {
if (metricType) {
var po = pipelineOptions[metricType];
return po !== null && po !== undefined;
}
return false;
}
export function getPipelineAggOptions(targets) {
var result = [];
_.each(targets.metrics, function(metric) {
if (!isPipelineAgg(metric.type)) {
result.push({ text: describeMetric(metric), value: metric.id });
}
});
return result;
}
export function getMovingAvgSettings(model, filtered) {
var filteredResult = [];
if (filtered) {
_.each(movingAvgModelSettings[model], function(setting) {
if (!setting.isCheckbox) {
filteredResult.push(setting);
}
});
return filteredResult;
}
return movingAvgModelSettings[model];
}
export function getOrderByOptions(target) {
var metricRefs = [];
_.each(target.metrics, function(metric) {
if (metric.type !== 'count') {
metricRefs.push({ text: describeMetric(metric), value: metric.id });
}
});
return orderByOptions.concat(metricRefs);
}
export function describeOrder(order) {
var def = _.find(orderOptions, { value: order });
return def.text;
}
export function describeMetric(metric) {
var def = _.find(metricAggTypes, { value: metric.type });
return def.text + ' ' + metric.field;
}
export function describeOrderBy(orderBy, target) {
var def = _.find(orderByOptions, { value: orderBy });
if (def) {
return def.text;
}
var metric = _.find(target.metrics, { id: orderBy });
if (metric) {
return describeMetric(metric);
} else {
return 'metric not found';
}
}