query_aggregation_ctrl.ts 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import angular from 'angular';
  2. import _ from 'lodash';
  3. import * as options from './constants';
  4. export class StackdriverAggregation {
  5. constructor() {
  6. return {
  7. templateUrl: 'public/app/plugins/datasource/stackdriver/partials/query.aggregation.html',
  8. controller: 'StackdriverAggregationCtrl',
  9. restrict: 'E',
  10. scope: {
  11. target: '=',
  12. refresh: '&',
  13. },
  14. };
  15. }
  16. }
  17. export class StackdriverAggregationCtrl {
  18. target: any;
  19. alignOptions: any[];
  20. aggOptions: any[];
  21. refresh: () => void;
  22. constructor($scope) {
  23. this.aggOptions = options.aggOptions;
  24. this.alignOptions = options.alignOptions;
  25. $scope.alignmentPeriods = options.alignmentPeriods;
  26. $scope.getAlignOptions = this.getAlignOptions;
  27. $scope.getAggOptions = this.getAggOptions;
  28. $scope.onAlignmentChange = this.onAlignmentChange;
  29. $scope.onAggregationChange = this.onAggregationChange;
  30. this.refresh = $scope.refresh;
  31. }
  32. onAlignmentChange(newVal: string) {
  33. if (newVal === 'ALIGN_NONE') {
  34. this.target.aggregation.crossSeriesReducer = 'REDUCE_NONE';
  35. }
  36. this.refresh();
  37. }
  38. onAggregationChange(newVal: string) {
  39. if (newVal !== 'REDUCE_NONE' && this.target.aggregation.perSeriesAligner === 'ALIGN_NONE') {
  40. const newAlignmentOption = options.alignOptions.find(
  41. o =>
  42. o.value !== 'ALIGN_NONE' &&
  43. o.valueTypes.indexOf(this.target.valueType) !== -1 &&
  44. o.metricKinds.indexOf(this.target.metricKind) !== -1
  45. );
  46. this.target.aggregation.perSeriesAligner = newAlignmentOption ? newAlignmentOption.value : '';
  47. }
  48. this.refresh();
  49. }
  50. getAlignOptions() {
  51. return !this.target.valueType
  52. ? []
  53. : options.alignOptions.filter(i => {
  54. return (
  55. i.valueTypes.indexOf(this.target.valueType) !== -1 && i.metricKinds.indexOf(this.target.metricKind) !== -1
  56. );
  57. });
  58. }
  59. getAggOptions() {
  60. return !this.target.metricKind
  61. ? []
  62. : options.aggOptions.filter(i => {
  63. return (
  64. i.valueTypes.indexOf(this.target.valueType) !== -1 && i.metricKinds.indexOf(this.target.metricKind) !== -1
  65. );
  66. });
  67. }
  68. }
  69. angular.module('grafana.controllers').directive('stackdriverAggregation', StackdriverAggregation);
  70. angular.module('grafana.controllers').controller('StackdriverAggregationCtrl', StackdriverAggregationCtrl);