Skip to content

Commit 26d9e92

Browse files
committed
stackdriver: resolve merge conflict
2 parents a3b0539 + ea1859a commit 26d9e92

File tree

6 files changed

+419
-320
lines changed

6 files changed

+419
-320
lines changed

public/app/plugins/datasource/stackdriver/datasource.ts

Lines changed: 70 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
import { stackdriverUnitMappings } from './constants';
2-
/** @ngInject */
2+
import appEvents from 'app/core/app_events';
3+
34
export default class StackdriverDatasource {
45
id: number;
56
url: string;
67
baseUrl: string;
78
projectName: string;
89

10+
/** @ngInject */
911
constructor(instanceSettings, private backendSrv, private templateSrv, private timeSrv) {
1012
this.baseUrl = `/stackdriver/`;
1113
this.url = instanceSettings.url;
@@ -121,6 +123,49 @@ export default class StackdriverDatasource {
121123
return { data: result };
122124
}
123125

126+
async annotationQuery(options) {
127+
const annotation = options.annotation;
128+
const queries = [
129+
{
130+
refId: 'annotationQuery',
131+
datasourceId: this.id,
132+
metricType: this.templateSrv.replace(annotation.target.metricType, options.scopedVars || {}),
133+
primaryAggregation: 'REDUCE_NONE',
134+
perSeriesAligner: 'ALIGN_NONE',
135+
title: this.templateSrv.replace(annotation.target.title, options.scopedVars || {}),
136+
text: this.templateSrv.replace(annotation.target.text, options.scopedVars || {}),
137+
tags: this.templateSrv.replace(annotation.target.tags, options.scopedVars || {}),
138+
view: 'FULL',
139+
filters: (annotation.target.filters || []).map(f => {
140+
return this.templateSrv.replace(f, options.scopedVars || {});
141+
}),
142+
type: 'annotationQuery',
143+
},
144+
];
145+
146+
const { data } = await this.backendSrv.datasourceRequest({
147+
url: '/api/tsdb/query',
148+
method: 'POST',
149+
data: {
150+
from: options.range.from.valueOf().toString(),
151+
to: options.range.to.valueOf().toString(),
152+
queries,
153+
},
154+
});
155+
156+
const results = data.results['annotationQuery'].tables[0].rows.map(v => {
157+
return {
158+
annotation: annotation,
159+
time: Date.parse(v[0]),
160+
title: v[1],
161+
tags: [v[2]],
162+
text: v[3],
163+
};
164+
});
165+
166+
return results;
167+
}
168+
124169
testDatasource() {
125170
const path = `v3/projects/${this.projectName}/metricDescriptors`;
126171
return this.doRequest(`${this.baseUrl}${path}`)
@@ -161,12 +206,30 @@ export default class StackdriverDatasource {
161206
}
162207

163208
async getDefaultProject() {
164-
const projects = await this.getProjects();
165-
if (projects && projects.length > 0) {
166-
const test = projects.filter(p => p.id === this.projectName)[0];
167-
return test;
168-
} else {
169-
throw new Error('No projects found');
209+
try {
210+
const projects = await this.getProjects();
211+
if (projects && projects.length > 0) {
212+
const test = projects.filter(p => p.id === this.projectName)[0];
213+
return test;
214+
} else {
215+
throw new Error('No projects found');
216+
}
217+
} catch (error) {
218+
let message = 'Projects cannot be fetched: ';
219+
message += error.statusText ? error.statusText + ': ' : '';
220+
if (error && error.data && error.data.error && error.data.error.message) {
221+
if (error.data.error.code === 403) {
222+
message += `
223+
A list of projects could not be fetched from the Google Cloud Resource Manager API.
224+
You might need to enable it first:
225+
https://console.developers.google.com/apis/library/cloudresourcemanager.googleapis.com`;
226+
} else {
227+
message += error.data.error.code + '. ' + error.data.error.message;
228+
}
229+
} else {
230+
message += 'Cannot connect to Stackdriver API';
231+
}
232+
appEvents.emit('ds-request-error', message);
170233
}
171234
}
172235

public/app/plugins/datasource/stackdriver/partials/query.editor.html

Lines changed: 2 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,5 @@
11
<query-editor-row query-ctrl="ctrl" has-text-edit-mode="false">
2-
<div class="gf-form-inline">
3-
<div class="gf-form">
4-
<span class="gf-form-label width-9">Service</span>
5-
<gf-form-dropdown model="ctrl.service" get-options="ctrl.services" class="min-width-20" disabled type="text"
6-
allow-custom="true" lookup-text="true" css-class="min-width-12" on-change="ctrl.onServiceChange(ctrl.service)"></gf-form-dropdown>
7-
</div>
8-
<div class="gf-form gf-form--grow">
9-
<div class="gf-form-label gf-form-label--grow"></div>
10-
</div>
11-
</div>
12-
<div class="gf-form-inline">
13-
<div class="gf-form">
14-
<span class="gf-form-label width-9">Metric</span>
15-
<gf-form-dropdown model="ctrl.metricType" get-options="ctrl.metrics" class="min-width-20" disabled type="text"
16-
allow-custom="true" lookup-text="true" css-class="min-width-12" on-change="ctrl.onMetricTypeChange()"></gf-form-dropdown>
17-
</div>
18-
<div class="gf-form gf-form--grow">
19-
<div class="gf-form-label gf-form-label--grow"></div>
20-
</div>
21-
</div>
22-
<div class="gf-form-inline">
23-
<div class="gf-form">
24-
<span class="gf-form-label query-keyword width-9">Filter</span>
25-
<div class="gf-form" ng-repeat="segment in ctrl.filterSegments.filterSegments">
26-
<metric-segment segment="segment" get-options="ctrl.getFilters(segment, $index)" on-change="ctrl.filterSegmentUpdated(segment, $index)"></metric-segment>
27-
</div>
28-
</div>
29-
<div class="gf-form gf-form--grow">
30-
<div class="gf-form-label gf-form-label--grow"></div>
31-
</div>
32-
</div>
33-
<div class="gf-form-inline">
34-
<div class="gf-form">
35-
<span class="gf-form-label query-keyword width-9">Group By</span>
36-
<div class="gf-form" ng-repeat="segment in ctrl.groupBySegments">
37-
<metric-segment segment="segment" get-options="ctrl.getGroupBys(segment, $index)" on-change="ctrl.groupByChanged(segment, $index)"></metric-segment>
38-
</div>
39-
</div>
40-
<div class="gf-form gf-form--grow">
41-
<div class="gf-form-label gf-form-label--grow"></div>
42-
</div>
43-
</div>
2+
<stackdriver-filter target="ctrl.target" refresh="ctrl.refresh()" datasource="ctrl.datasource" default-dropdown-value="ctrl.defaultDropdownValue" default-service-value="ctrl.defaultServiceValue"></stackdriver-filter>
443
<stackdriver-aggregation target="ctrl.target" alignment-period="ctrl.lastQueryMeta.alignmentPeriod" refresh="ctrl.refresh()"></stackdriver-aggregation>
454
<div class="gf-form-inline">
465
<div class="gf-form">
@@ -100,4 +59,4 @@
10059
<div class="gf-form" ng-show="ctrl.lastQueryError">
10160
<pre class="gf-form-pre alert alert-error">{{ctrl.lastQueryError}}</pre>
10261
</div>
103-
</query-editor-row>
62+
</query-editor-row>
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<div class="gf-form-inline">
2+
<div class="gf-form">
3+
<span class="gf-form-label width-9">Service</span>
4+
<gf-form-dropdown model="ctrl.service" get-options="ctrl.services" class="min-width-20" disabled type="text"
5+
allow-custom="true" lookup-text="true" css-class="min-width-12" on-change="ctrl.onServiceChange(ctrl.service)"></gf-form-dropdown>
6+
</div>
7+
<div class="gf-form gf-form--grow">
8+
<div class="gf-form-label gf-form-label--grow"></div>
9+
</div>
10+
</div>
11+
<div class="gf-form-inline">
12+
<div class="gf-form">
13+
<span class="gf-form-label width-9">Metric</span>
14+
<gf-form-dropdown model="ctrl.metricType" get-options="ctrl.metrics" class="min-width-20" disabled type="text"
15+
allow-custom="true" lookup-text="true" css-class="min-width-12" on-change="ctrl.onMetricTypeChange()"></gf-form-dropdown>
16+
</div>
17+
<div class="gf-form gf-form--grow">
18+
<div class="gf-form-label gf-form-label--grow"></div>
19+
</div>
20+
</div>
21+
<div class="gf-form-inline">
22+
<div class="gf-form">
23+
<span class="gf-form-label query-keyword width-9">Filter</span>
24+
<div class="gf-form" ng-repeat="segment in ctrl.filterSegments.filterSegments">
25+
<metric-segment segment="segment" get-options="ctrl.getFilters(segment, $index)" on-change="ctrl.filterSegmentUpdated(segment, $index)"></metric-segment>
26+
</div>
27+
</div>
28+
<div class="gf-form gf-form--grow">
29+
<div class="gf-form-label gf-form-label--grow"></div>
30+
</div>
31+
</div>
32+
<div class="gf-form-inline">
33+
<div class="gf-form">
34+
<span class="gf-form-label query-keyword width-9">Group By</span>
35+
<div class="gf-form" ng-repeat="segment in ctrl.groupBySegments">
36+
<metric-segment segment="segment" get-options="ctrl.getGroupBys(segment, $index)" on-change="ctrl.groupByChanged(segment, $index)"></metric-segment>
37+
</div>
38+
</div>
39+
<div class="gf-form gf-form--grow">
40+
<div class="gf-form-label gf-form-label--grow"></div>
41+
</div>
42+
</div>

0 commit comments

Comments
 (0)