queryCtrl.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. define([
  2. 'angular',
  3. 'lodash',
  4. './queryBuilder',
  5. ],
  6. function (angular, _, ElasticQueryBuilder) {
  7. 'use strict';
  8. var module = angular.module('grafana.controllers');
  9. module.controller('ElasticQueryCtrl', function($scope, $timeout, uiSegmentSrv, templateSrv, $q) {
  10. $scope.functionList = ['count', 'min', 'max', 'total', 'mean'];
  11. $scope.functionMenu = _.map($scope.functionList, function(func) {
  12. return { text: func, click: "changeFunction('" + func + "');" };
  13. });
  14. $scope.init = function() {
  15. $scope.queryBuilder = new ElasticQueryBuilder(target);
  16. var target = $scope.target;
  17. target.function = target.function || 'mean';
  18. target.timeField = target.timeField || '@timestamp';
  19. target.select = target.select || [{ agg: 'count' }];
  20. $scope.timeSegment = uiSegmentSrv.newSegment(target.timeField);
  21. $scope.groupByFieldSegment = uiSegmentSrv.getSegmentForValue(target.groupByField, 'add group by');
  22. $scope.selectSegments = _.map(target.select, function(select) {
  23. return uiSegmentSrv.newSegment(select.agg);
  24. });
  25. };
  26. $scope.getFields = function() {
  27. return $scope.datasource.metricFindQuery('fields()')
  28. .then($scope.transformToSegments(true));
  29. };
  30. $scope.transformToSegments = function(addTemplateVars) {
  31. return function(results) {
  32. var segments = _.map(results, function(segment) {
  33. return uiSegmentSrv.newSegment({ value: segment.text, expandable: segment.expandable });
  34. });
  35. if (addTemplateVars) {
  36. _.each(templateSrv.variables, function(variable) {
  37. segments.unshift(uiSegmentSrv.newSegment({ type: 'template', value: '$' + variable.name, expandable: true }));
  38. });
  39. }
  40. return segments;
  41. };
  42. };
  43. $scope.valueFieldChanged = function() {
  44. $scope.target.valueField = $scope.valueFieldSegment.value;
  45. $scope.$parent.get_data();
  46. };
  47. $scope.keyFieldChanged = function() {
  48. $scope.target.keyField = $scope.keyFieldSegment.value;
  49. $scope.$parent.get_data();
  50. };
  51. $scope.termValueSegmentChanged = function() {
  52. $scope.target.termValue = $scope.termValueSegment.value;
  53. $scope.$parent.get_data();
  54. };
  55. $scope.termKeySegmentChanged = function() {
  56. $scope.target.termKey = $scope.termKeySegment.value;
  57. $scope.$parent.get_data();
  58. };
  59. $scope.groupByFieldChanged = function() {
  60. $scope.target.groupBy = $scope.groupByFieldSegment.value;
  61. $scope.$parent.get_data();
  62. };
  63. $scope.changeFunction = function(func) {
  64. $scope.target.function = func;
  65. $scope.$parent.get_data();
  66. };
  67. $scope.handleQueryError = function(err) {
  68. $scope.parserError = err.message || 'Failed to issue metric query';
  69. return [];
  70. };
  71. $scope.transformToSegments = function(results) {
  72. return _.map(results, function(segment) {
  73. return new MetricSegment({ value: segment.text, expandable: segment.expandable });
  74. });
  75. };
  76. $scope.addTemplateVariableSegments = function(segments) {
  77. _.each(templateSrv.variables, function(variable) {
  78. segments.unshift(new MetricSegment({ type: 'template', value: '$' + variable.name, expandable: true }));
  79. });
  80. return segments;
  81. };
  82. $scope.toggleQueryMode = function () {
  83. $scope.target.rawQuery = !$scope.target.rawQuery;
  84. };
  85. $scope.init();
  86. });
  87. });