diff --git a/public/app/plugins/datasource/stackdriver/StackdriverMetricFindQuery.ts b/public/app/plugins/datasource/stackdriver/StackdriverMetricFindQuery.ts
index 226bdf7ee22..2dea8c0405a 100644
--- a/public/app/plugins/datasource/stackdriver/StackdriverMetricFindQuery.ts
+++ b/public/app/plugins/datasource/stackdriver/StackdriverMetricFindQuery.ts
@@ -1,4 +1,3 @@
-import has from 'lodash/has';
import isString from 'lodash/isString';
import { alignmentPeriods } from './constants';
import { MetricFindQueryTypes } from './types';
@@ -12,9 +11,10 @@ export default class StackdriverMetricFindQuery {
switch (query.selectedQueryType) {
case MetricFindQueryTypes.MetricTypes:
return this.handleMetricTypesQuery(query);
- case MetricFindQueryTypes.MetricLabels:
- case MetricFindQueryTypes.ResourceLabels:
- return this.handleLabelQuery(query);
+ case MetricFindQueryTypes.LabelKeys:
+ return this.handleLabelKeysQuery(query);
+ case MetricFindQueryTypes.LabelValues:
+ return this.handleLabelValuesQuery(query);
case MetricFindQueryTypes.ResourceTypes:
return this.handleResourceTypeQuery(query);
case MetricFindQueryTypes.Aligners:
@@ -44,16 +44,33 @@ export default class StackdriverMetricFindQuery {
}));
}
- async handleLabelQuery({ selectedQueryType, selectedMetricType, labelKey }) {
+ async handleLabelKeysQuery({ selectedQueryType, selectedMetricType, labelKey }) {
if (!selectedMetricType) {
return [];
}
- const refId = 'handleLabelsQueryType';
+ const refId = 'handleLabelKeysQuery';
const response = await this.datasource.getLabels(selectedMetricType, refId);
- if (!has(response, `meta.${selectedQueryType}.${labelKey}`)) {
+ const labelKeys = response.meta
+ ? [...Object.keys(response.meta.resourceLabels), ...Object.keys(response.meta.metricLabels)]
+ : [];
+ return labelKeys.map(this.toFindQueryResult);
+ }
+
+ async handleLabelValuesQuery({ selectedQueryType, selectedMetricType, labelKey }) {
+ if (!selectedMetricType) {
return [];
}
- return response.meta[selectedQueryType][labelKey].map(this.toFindQueryResult);
+ const refId = 'handleLabelValuesQuery';
+ const response = await this.datasource.getLabels(selectedMetricType, refId);
+
+ let values = [];
+ if (response.meta && response.meta.metricLabels && response.meta.metricLabels.hasOwnProperty(labelKey)) {
+ values = response.meta.metricLabels[labelKey];
+ } else if (response.meta && response.meta.resourceLabels && response.meta.resourceLabels.hasOwnProperty(labelKey)) {
+ values = response.meta.resourceLabels[labelKey];
+ }
+
+ return values.map(this.toFindQueryResult);
}
async handleResourceTypeQuery({ selectedMetricType }) {
@@ -62,7 +79,7 @@ export default class StackdriverMetricFindQuery {
}
const refId = 'handleResourceTypeQueryQueryType';
const response = await this.datasource.getLabels(selectedMetricType, refId);
- return response.meta.resourceTypes.map(this.toFindQueryResult);
+ return response.meta.resourceTypes ? response.meta.resourceTypes.map(this.toFindQueryResult) : [];
}
async handleAlignersQuery({ selectedMetricType }) {
diff --git a/public/app/plugins/datasource/stackdriver/components/VariableQueryEditor.test.tsx b/public/app/plugins/datasource/stackdriver/components/VariableQueryEditor.test.tsx
index d3b1aa54656..5143348f0fe 100644
--- a/public/app/plugins/datasource/stackdriver/components/VariableQueryEditor.test.tsx
+++ b/public/app/plugins/datasource/stackdriver/components/VariableQueryEditor.test.tsx
@@ -34,9 +34,9 @@ describe('VariableQueryEditor', () => {
describe('and an existing variable is edited', () => {
it('should trigger new query using the saved query type', done => {
- props.query = { selectedQueryType: MetricFindQueryTypes.MetricLabels };
+ props.query = { selectedQueryType: MetricFindQueryTypes.LabelKeys };
props.onChange = (query, definition) => {
- expect(definition).toBe('Stackdriver - Metric Labels');
+ expect(definition).toBe('Stackdriver - Labels Keys');
done();
};
renderer.create().toJSON();
diff --git a/public/app/plugins/datasource/stackdriver/components/VariableQueryEditor.tsx b/public/app/plugins/datasource/stackdriver/components/VariableQueryEditor.tsx
index dae612fcc64..4ce5910e191 100644
--- a/public/app/plugins/datasource/stackdriver/components/VariableQueryEditor.tsx
+++ b/public/app/plugins/datasource/stackdriver/components/VariableQueryEditor.tsx
@@ -8,8 +8,8 @@ import { MetricFindQueryTypes, VariableQueryData } from '../types';
export class StackdriverVariableQueryEditor extends PureComponent {
queryTypes: Array<{ value: string; name: string }> = [
{ value: MetricFindQueryTypes.MetricTypes, name: 'Metric Types' },
- { value: MetricFindQueryTypes.MetricLabels, name: 'Metric Labels' },
- { value: MetricFindQueryTypes.ResourceLabels, name: 'Resource Labels' },
+ { value: MetricFindQueryTypes.LabelKeys, name: 'Label Keys' },
+ { value: MetricFindQueryTypes.LabelValues, name: 'Label Values' },
{ value: MetricFindQueryTypes.ResourceTypes, name: 'Resource Types' },
{ value: MetricFindQueryTypes.Aggregations, name: 'Aggregations' },
{ value: MetricFindQueryTypes.Aligners, name: 'Aligners' },
@@ -57,7 +57,7 @@ export class StackdriverVariableQueryEditor extends PureComponent l === this.state.labelKey) ? this.state.labelKey : labels[0];
result = { labels, labelKey };
}
@@ -127,8 +123,8 @@ export class StackdriverVariableQueryEditor extends PureComponent
);
- case MetricFindQueryTypes.MetricLabels:
- case MetricFindQueryTypes.ResourceLabels:
+ case MetricFindQueryTypes.LabelKeys:
+ case MetricFindQueryTypes.LabelValues:
case MetricFindQueryTypes.ResourceTypes:
return (
@@ -144,16 +140,12 @@ export class StackdriverVariableQueryEditor extends PureComponent this.onMetricTypeChange(e)}
label="Metric Types"
/>
- {queryType !== MetricFindQueryTypes.ResourceTypes && (
+ {queryType === MetricFindQueryTypes.LabelValues && (
({ value: l, name: l }))}
onValueChange={e => this.onLabelKeyChange(e)}
- label={
- this.state.selectedQueryType === MetricFindQueryTypes.ResourceLabels
- ? 'Resource Label Key'
- : 'Metric Label Key'
- }
+ label="Label Keys"
/>
)}
diff --git a/public/app/plugins/datasource/stackdriver/types.ts b/public/app/plugins/datasource/stackdriver/types.ts
index 80d416cbe5a..f88bd427b28 100644
--- a/public/app/plugins/datasource/stackdriver/types.ts
+++ b/public/app/plugins/datasource/stackdriver/types.ts
@@ -1,7 +1,7 @@
export enum MetricFindQueryTypes {
MetricTypes = 'metricTypes',
- MetricLabels = 'metricLabels',
- ResourceLabels = 'resourceLabels',
+ LabelKeys = 'labelKeys',
+ LabelValues = 'labelValues',
ResourceTypes = 'resourceTypes',
Aggregations = 'aggregations',
Aligners = 'aligners',