query_aggregation_ctrl.ts 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import angular from 'angular';
  2. import _ from 'lodash';
  3. import * as options from './constants';
  4. import kbn from 'app/core/utils/kbn';
  5. export class StackdriverAggregation {
  6. constructor() {
  7. return {
  8. templateUrl: 'public/app/plugins/datasource/stackdriver/partials/query.aggregation.html',
  9. controller: 'StackdriverAggregationCtrl',
  10. restrict: 'E',
  11. scope: {
  12. target: '=',
  13. alignmentPeriod: '<',
  14. refresh: '&',
  15. },
  16. };
  17. }
  18. }
  19. export class StackdriverAggregationCtrl {
  20. alignmentPeriods: any[];
  21. aggOptions: any[];
  22. alignOptions: any[];
  23. target: any;
  24. constructor(private $scope) {
  25. this.$scope.ctrl = this;
  26. this.target = $scope.target;
  27. this.alignmentPeriods = options.alignmentPeriods;
  28. this.aggOptions = options.aggOptions;
  29. this.alignOptions = options.alignOptions;
  30. this.setAggOptions();
  31. this.setAlignOptions();
  32. $scope.$on('metricTypeChanged', this.setAlignOptions.bind(this));
  33. }
  34. setAlignOptions() {
  35. this.alignOptions = !this.target.valueType
  36. ? []
  37. : options.alignOptions.filter(i => {
  38. return (
  39. i.valueTypes.indexOf(this.target.valueType) !== -1 && i.metricKinds.indexOf(this.target.metricKind) !== -1
  40. );
  41. });
  42. if (!this.alignOptions.find(o => o.value === this.target.aggregation.perSeriesAligner)) {
  43. this.target.aggregation.perSeriesAligner = this.alignOptions.length > 0 ? this.alignOptions[0].value : '';
  44. }
  45. }
  46. setAggOptions() {
  47. this.aggOptions = !this.target.metricKind
  48. ? []
  49. : options.aggOptions.filter(i => {
  50. return (
  51. i.valueTypes.indexOf(this.target.valueType) !== -1 && i.metricKinds.indexOf(this.target.metricKind) !== -1
  52. );
  53. });
  54. if (!this.aggOptions.find(o => o.value === this.target.aggregation.crossSeriesReducer)) {
  55. const newValue = this.aggOptions.find(o => o.value !== 'REDUCE_NONE');
  56. this.target.aggregation.crossSeriesReducer = newValue ? newValue.value : '';
  57. }
  58. }
  59. formatAlignmentText() {
  60. const selectedAlignment = this.alignOptions.find(ap => ap.value === this.target.aggregation.perSeriesAligner);
  61. return `${kbn.secondsToHms(this.$scope.alignmentPeriod)} interval (${selectedAlignment.text})`;
  62. }
  63. }
  64. angular.module('grafana.controllers').directive('stackdriverAggregation', StackdriverAggregation);
  65. angular.module('grafana.controllers').controller('StackdriverAggregationCtrl', StackdriverAggregationCtrl);