metric_find_query.ts 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. // MACROS
  2. // List all measurements for a given database: `measurements(database)`
  3. const MEASUREMENTS_REGEXP = /^\s*measurements\((.+)\)\s*$/;
  4. // List all tags for a given database and measurement: `tags(database, measurement)`
  5. const TAGS_REGEXP = /^\s*tags\((.+)\s*,\s*(.+)\)\s*$/;
  6. // List all tag values for a given database, measurement, and tag: `tag_valuess(database, measurement, tag)`
  7. const TAG_VALUES_REGEXP = /^\s*tag_values\((.+)\s*,\s*(.+)\s*,\s*(.+)\)\s*$/;
  8. // List all field keys for a given database and measurement: `field_keys(database, measurement)`
  9. const FIELD_KEYS_REGEXP = /^\s*field_keys\((.+)\s*,\s*(.+)\)\s*$/;
  10. export default function expandMacros(query) {
  11. const measurementsQuery = query.match(MEASUREMENTS_REGEXP);
  12. if (measurementsQuery) {
  13. const database = measurementsQuery[1];
  14. return `from(db:"${database}")
  15. |> range($range)
  16. |> group(by:["_measurement"])
  17. |> distinct(column:"_measurement")
  18. |> group(none:true)`;
  19. }
  20. const tagsQuery = query.match(TAGS_REGEXP);
  21. if (tagsQuery) {
  22. const database = tagsQuery[1];
  23. const measurement = tagsQuery[2];
  24. return `from(db:"${database}")
  25. |> range($range)
  26. |> filter(fn:(r) => r._measurement == "${measurement}")
  27. |> keys()`;
  28. }
  29. const tagValuesQuery = query.match(TAG_VALUES_REGEXP);
  30. if (tagValuesQuery) {
  31. const database = tagValuesQuery[1];
  32. const measurement = tagValuesQuery[2];
  33. const tag = tagValuesQuery[3];
  34. return `from(db:"${database}")
  35. |> range($range)
  36. |> filter(fn:(r) => r._measurement == "${measurement}")
  37. |> group(by:["${tag}"])
  38. |> distinct(column:"${tag}")
  39. |> group(none:true)`;
  40. }
  41. const fieldKeysQuery = query.match(FIELD_KEYS_REGEXP);
  42. if (fieldKeysQuery) {
  43. const database = fieldKeysQuery[1];
  44. const measurement = fieldKeysQuery[2];
  45. return `from(db:"${database}")
  46. |> range($range)
  47. |> filter(fn:(r) => r._measurement == "${measurement}")
  48. |> group(by:["_field"])
  49. |> distinct(column:"_field")
  50. |> group(none:true)`;
  51. }
  52. // By default return pure query
  53. return query;
  54. }