mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
* Implements findMetricQuery() * Macros for template queries: measurements(), tags(), tag_values(), field_keys() * Tests for macro expansion
64 lines
2.0 KiB
TypeScript
64 lines
2.0 KiB
TypeScript
// MACROS
|
|
|
|
// List all measurements for a given database: `measurements(database)`
|
|
const MEASUREMENTS_REGEXP = /^\s*measurements\((.+)\)\s*$/;
|
|
|
|
// List all tags for a given database and measurement: `tags(database, measurement)`
|
|
const TAGS_REGEXP = /^\s*tags\((.+)\s*,\s*(.+)\)\s*$/;
|
|
|
|
// List all tag values for a given database, measurement, and tag: `tag_valuess(database, measurement, tag)`
|
|
const TAG_VALUES_REGEXP = /^\s*tag_values\((.+)\s*,\s*(.+)\s*,\s*(.+)\)\s*$/;
|
|
|
|
// List all field keys for a given database and measurement: `field_keys(database, measurement)`
|
|
const FIELD_KEYS_REGEXP = /^\s*field_keys\((.+)\s*,\s*(.+)\)\s*$/;
|
|
|
|
export default function expandMacros(query) {
|
|
const measurementsQuery = query.match(MEASUREMENTS_REGEXP);
|
|
if (measurementsQuery) {
|
|
const database = measurementsQuery[1];
|
|
return `from(db:"${database}")
|
|
|> range($range)
|
|
|> group(by:["_measurement"])
|
|
|> distinct(column:"_measurement")
|
|
|> group(none:true)`;
|
|
}
|
|
|
|
const tagsQuery = query.match(TAGS_REGEXP);
|
|
if (tagsQuery) {
|
|
const database = tagsQuery[1];
|
|
const measurement = tagsQuery[2];
|
|
return `from(db:"${database}")
|
|
|> range($range)
|
|
|> filter(fn:(r) => r._measurement == "${measurement}")
|
|
|> keys()`;
|
|
}
|
|
|
|
const tagValuesQuery = query.match(TAG_VALUES_REGEXP);
|
|
if (tagValuesQuery) {
|
|
const database = tagValuesQuery[1];
|
|
const measurement = tagValuesQuery[2];
|
|
const tag = tagValuesQuery[3];
|
|
return `from(db:"${database}")
|
|
|> range($range)
|
|
|> filter(fn:(r) => r._measurement == "${measurement}")
|
|
|> group(by:["${tag}"])
|
|
|> distinct(column:"${tag}")
|
|
|> group(none:true)`;
|
|
}
|
|
|
|
const fieldKeysQuery = query.match(FIELD_KEYS_REGEXP);
|
|
if (fieldKeysQuery) {
|
|
const database = fieldKeysQuery[1];
|
|
const measurement = fieldKeysQuery[2];
|
|
return `from(db:"${database}")
|
|
|> range($range)
|
|
|> filter(fn:(r) => r._measurement == "${measurement}")
|
|
|> group(by:["_field"])
|
|
|> distinct(column:"_field")
|
|
|> group(none:true)`;
|
|
}
|
|
|
|
// By default return pure query
|
|
return query;
|
|
}
|