From e2e95589e3e2a8f257b4c60b4710122f859a50e0 Mon Sep 17 00:00:00 2001 From: Daniel Lee Date: Fri, 14 Sep 2018 00:13:23 +0200 Subject: [PATCH] stackdriver: adds remove group by option Adds a -- remove group by -- option to the group by segment. When chosen it removes the group by. --- .../datasource/stackdriver/query_ctrl.ts | 12 +++++++--- .../stackdriver/specs/query_ctrl.test.ts | 22 ++++++++++++++++--- 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/public/app/plugins/datasource/stackdriver/query_ctrl.ts b/public/app/plugins/datasource/stackdriver/query_ctrl.ts index 5d40c32a003..366e188324d 100644 --- a/public/app/plugins/datasource/stackdriver/query_ctrl.ts +++ b/public/app/plugins/datasource/stackdriver/query_ctrl.ts @@ -67,6 +67,7 @@ export class StackdriverQueryCtrl extends QueryCtrl { lastQueryError?: string; metricLabels: LabelType[]; resourceLabels: LabelType[]; + removeSegment: any; /** @ngInject */ constructor($scope, $injector, private uiSegmentSrv, private timeSrv) { @@ -83,6 +84,7 @@ export class StackdriverQueryCtrl extends QueryCtrl { this.groupBySegments = this.target.aggregation.groupBys.map(groupBy => { return uiSegmentSrv.getSegmentForValue(groupBy); }); + this.removeSegment = uiSegmentSrv.newSegment({ fake: true, value: '-- remove group by --' }); this.ensurePlusButton(this.groupBySegments); } @@ -174,11 +176,15 @@ export class StackdriverQueryCtrl extends QueryCtrl { }); }); - return Promise.resolve([...metricLabels, ...resourceLabels]); + return Promise.resolve([...metricLabels, ...resourceLabels, this.removeSegment]); } - groupByChanged(segment) { - segment.type = 'value'; + groupByChanged(segment, index) { + if (segment.value === this.removeSegment.value) { + this.groupBySegments.splice(index, 1); + } else { + segment.type = 'value'; + } const reducer = (memo, seg) => { if (!seg.fake) { diff --git a/public/app/plugins/datasource/stackdriver/specs/query_ctrl.test.ts b/public/app/plugins/datasource/stackdriver/specs/query_ctrl.test.ts index 6f1abcab1a3..6a36f133c7e 100644 --- a/public/app/plugins/datasource/stackdriver/specs/query_ctrl.test.ts +++ b/public/app/plugins/datasource/stackdriver/specs/query_ctrl.test.ts @@ -17,9 +17,10 @@ describe('StackdriverQueryCtrl', () => { }); it('should populate group bys segments', () => { - expect(result.length).toBe(2); + expect(result.length).toBe(3); expect(result[0].value).toBe('metric.label.metric-key-1'); expect(result[1].value).toBe('resource.label.resource-key-1'); + expect(result[2].value).toBe('-- remove group by --'); }); }); @@ -39,16 +40,18 @@ describe('StackdriverQueryCtrl', () => { }); it('should not be used to populate group bys segments', () => { - expect(result.length).toBe(2); + expect(result.length).toBe(3); expect(result[0].value).toBe('metric.label.metric-key-2'); expect(result[1].value).toBe('resource.label.resource-key-2'); + expect(result[2].value).toBe('-- remove group by --'); }); }); describe('when a group by is selected', () => { beforeEach(() => { + const removeSegment = { fake: true, value: '-- remove group by --' }; const segment = { value: 'groupby1' }; - ctrl.groupBySegments = [segment]; + ctrl.groupBySegments = [segment, removeSegment]; ctrl.groupByChanged(segment); }); @@ -56,6 +59,19 @@ describe('StackdriverQueryCtrl', () => { expect(ctrl.target.aggregation.groupBys.length).toBe(1); }); }); + + describe('when a selected group by is removed', () => { + beforeEach(() => { + const removeSegment = { fake: true, value: '-- remove group by --' }; + const segment = { value: 'groupby1' }; + ctrl.groupBySegments = [segment, removeSegment]; + ctrl.groupByChanged(removeSegment); + }); + + it('should be added to group bys list', () => { + expect(ctrl.target.aggregation.groupBys.length).toBe(0); + }); + }); }); function createCtrlWithFakes() {