diff --git a/public/app/plugins/datasource/prometheus/datasource.ts b/public/app/plugins/datasource/prometheus/datasource.ts
index 5674e1353a1..ca80b3760a7 100644
--- a/public/app/plugins/datasource/prometheus/datasource.ts
+++ b/public/app/plugins/datasource/prometheus/datasource.ts
@@ -487,15 +487,21 @@ export class PrometheusDatasource {
.value();
for (const value of series.values) {
- if (value[1] === '1') {
+ const valueIsTrue = value[1] === '1'; // e.g. ALERTS
+ if (valueIsTrue || annotation.useValueForTime) {
const event = {
annotation: annotation,
- time: Math.floor(parseFloat(value[0])) * 1000,
title: self.resultTransformer.renderTemplate(titleFormat, series.metric),
tags: tags,
text: self.resultTransformer.renderTemplate(textFormat, series.metric),
};
+ if (annotation.useValueForTime) {
+ event['time'] = Math.floor(parseFloat(value[1]));
+ } else {
+ event['time'] = Math.floor(parseFloat(value[0])) * 1000;
+ }
+
eventList.push(event);
}
}
diff --git a/public/app/plugins/datasource/prometheus/partials/annotations.editor.html b/public/app/plugins/datasource/prometheus/partials/annotations.editor.html
index 09ee52bda45..6e5982123fd 100644
--- a/public/app/plugins/datasource/prometheus/partials/annotations.editor.html
+++ b/public/app/plugins/datasource/prometheus/partials/annotations.editor.html
@@ -10,7 +10,7 @@
+
+ Other options
+
diff --git a/public/app/plugins/datasource/prometheus/specs/datasource.test.ts b/public/app/plugins/datasource/prometheus/specs/datasource.test.ts
index ae91e6647e0..eef2bbd56b6 100644
--- a/public/app/plugins/datasource/prometheus/specs/datasource.test.ts
+++ b/public/app/plugins/datasource/prometheus/specs/datasource.test.ts
@@ -581,7 +581,7 @@ describe('PrometheusDatasource', () => {
describe('When performing annotationQuery', () => {
let results;
- const options = {
+ const options: any = {
annotation: {
expr: 'ALERTS{alertstate="firing"}',
tagKeys: 'job',
@@ -594,41 +594,61 @@ describe('PrometheusDatasource', () => {
},
};
- beforeEach(async () => {
- const response = {
- status: 'success',
+ const response = {
+ status: 'success',
+ data: {
data: {
- data: {
- resultType: 'matrix',
- result: [
- {
- metric: {
- __name__: 'ALERTS',
- alertname: 'InstanceDown',
- alertstate: 'firing',
- instance: 'testinstance',
- job: 'testjob',
- },
- values: [[123, '1']],
+ resultType: 'matrix',
+ result: [
+ {
+ metric: {
+ __name__: 'ALERTS',
+ alertname: 'InstanceDown',
+ alertstate: 'firing',
+ instance: 'testinstance',
+ job: 'testjob',
},
- ],
- },
+ values: [[123, '1']],
+ },
+ ],
},
- };
+ },
+ };
- backendSrv.datasourceRequest = jest.fn(() => Promise.resolve(response));
- ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv, timeSrv);
+ describe('not use useValueForTime', () => {
+ beforeEach(async () => {
+ options.annotation.useValueForTime = false;
+ backendSrv.datasourceRequest = jest.fn(() => Promise.resolve(response));
+ ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv, timeSrv);
- await ctx.ds.annotationQuery(options).then(data => {
- results = data;
+ await ctx.ds.annotationQuery(options).then(data => {
+ results = data;
+ });
+ });
+
+ it('should return annotation list', () => {
+ expect(results.length).toBe(1);
+ expect(results[0].tags).toContain('testjob');
+ expect(results[0].title).toBe('InstanceDown');
+ expect(results[0].text).toBe('testinstance');
+ expect(results[0].time).toBe(123 * 1000);
});
});
- it('should return annotation list', () => {
- expect(results.length).toBe(1);
- expect(results[0].tags).toContain('testjob');
- expect(results[0].title).toBe('InstanceDown');
- expect(results[0].text).toBe('testinstance');
- expect(results[0].time).toBe(123 * 1000);
+
+ describe('use useValueForTime', () => {
+ beforeEach(async () => {
+ options.annotation.useValueForTime = true;
+ backendSrv.datasourceRequest = jest.fn(() => Promise.resolve(response));
+ ctx.ds = new PrometheusDatasource(instanceSettings, q, backendSrv as any, templateSrv, timeSrv);
+
+ await ctx.ds.annotationQuery(options).then(data => {
+ results = data;
+ });
+ });
+
+ it('should return annotation list', () => {
+ expect(results[0].time).toEqual(1);
+ });
});
});