mirror of
https://github.com/grafana/grafana.git
synced 2025-08-01 23:53:20 +08:00
Fix "Link to Prometheus" button for proxied Prometheus sources.
This commit is contained in:
@ -81,6 +81,11 @@ func getFrontendSettingsMap(c *middleware.Context) (map[string]interface{}, erro
|
|||||||
dsMap["index"] = ds.Database
|
dsMap["index"] = ds.Database
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ds.Type == m.DS_PROMETHEUS {
|
||||||
|
// add unproxied server URL for link to Prometheus web UI
|
||||||
|
dsMap["directUrl"] = ds.Url
|
||||||
|
}
|
||||||
|
|
||||||
datasources[ds.Name] = dsMap
|
datasources[ds.Name] = dsMap
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,6 +12,7 @@ const (
|
|||||||
DS_ES = "elasticsearch"
|
DS_ES = "elasticsearch"
|
||||||
DS_OPENTSDB = "opentsdb"
|
DS_OPENTSDB = "opentsdb"
|
||||||
DS_CLOUDWATCH = "cloudwatch"
|
DS_CLOUDWATCH = "cloudwatch"
|
||||||
|
DS_PROMETHEUS = "prometheus"
|
||||||
DS_ACCESS_DIRECT = "direct"
|
DS_ACCESS_DIRECT = "direct"
|
||||||
DS_ACCESS_PROXY = "proxy"
|
DS_ACCESS_PROXY = "proxy"
|
||||||
)
|
)
|
||||||
|
@ -21,12 +21,8 @@ function (angular, _, moment, dateMath) {
|
|||||||
this.name = datasource.name;
|
this.name = datasource.name;
|
||||||
this.supportMetrics = true;
|
this.supportMetrics = true;
|
||||||
|
|
||||||
var url = datasource.url;
|
this.url = datasource.url.replace(/\/$/g, '');
|
||||||
if (url[url.length-1] === '/') {
|
this.directUrl = datasource.directUrl.replace(/\/$/g, '');
|
||||||
// remove trailing slash
|
|
||||||
url = url.substr(0, url.length - 1);
|
|
||||||
}
|
|
||||||
this.url = url;
|
|
||||||
this.basicAuth = datasource.basicAuth;
|
this.basicAuth = datasource.basicAuth;
|
||||||
this.lastErrors = {};
|
this.lastErrors = {};
|
||||||
}
|
}
|
||||||
|
@ -111,7 +111,7 @@ function (angular, _, kbn, dateMath) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
var hash = encodeURIComponent(JSON.stringify([expr]));
|
var hash = encodeURIComponent(JSON.stringify([expr]));
|
||||||
return $scope.datasource.url + '/graph#' + hash;
|
return $scope.datasource.directUrl + '/graph#' + hash;
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.calculateInterval = function() {
|
$scope.calculateInterval = function() {
|
||||||
|
@ -10,11 +10,11 @@ describe('PrometheusDatasource', function() {
|
|||||||
beforeEach(angularMocks.module('grafana.services'));
|
beforeEach(angularMocks.module('grafana.services'));
|
||||||
beforeEach(ctx.createService('PrometheusDatasource'));
|
beforeEach(ctx.createService('PrometheusDatasource'));
|
||||||
beforeEach(function() {
|
beforeEach(function() {
|
||||||
ctx.ds = new ctx.service({ url: '', user: 'test', password: 'mupp' });
|
ctx.ds = new ctx.service({ url: 'proxied', directUrl: 'direct', user: 'test', password: 'mupp' });
|
||||||
});
|
});
|
||||||
describe('When querying prometheus with one target using query editor target spec', function() {
|
describe('When querying prometheus with one target using query editor target spec', function() {
|
||||||
var results;
|
var results;
|
||||||
var urlExpected = '/api/v1/query_range?query=' +
|
var urlExpected = 'proxied/api/v1/query_range?query=' +
|
||||||
encodeURIComponent('test{job="testjob"}') +
|
encodeURIComponent('test{job="testjob"}') +
|
||||||
'&start=1443438675&end=1443460275&step=60s';
|
'&start=1443438675&end=1443460275&step=60s';
|
||||||
var query = {
|
var query = {
|
||||||
@ -53,7 +53,7 @@ describe('PrometheusDatasource', function() {
|
|||||||
status: "success",
|
status: "success",
|
||||||
data: ["value1", "value2", "value3"]
|
data: ["value1", "value2", "value3"]
|
||||||
};
|
};
|
||||||
ctx.$httpBackend.expect('GET', '/api/v1/label/resource/values').respond(response);
|
ctx.$httpBackend.expect('GET', 'proxied/api/v1/label/resource/values').respond(response);
|
||||||
ctx.ds.metricFindQuery('label_values(resource)').then(function(data) { results = data; });
|
ctx.ds.metricFindQuery('label_values(resource)').then(function(data) { results = data; });
|
||||||
ctx.$httpBackend.flush();
|
ctx.$httpBackend.flush();
|
||||||
ctx.$rootScope.$apply();
|
ctx.$rootScope.$apply();
|
||||||
@ -71,7 +71,7 @@ describe('PrometheusDatasource', function() {
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
ctx.$httpBackend.expect('GET', /\/api\/v1\/query\?query=count\(metric\)%20by%20\(resource\)&time=.*/).respond(response);
|
ctx.$httpBackend.expect('GET', /proxied\/api\/v1\/query\?query=count\(metric\)%20by%20\(resource\)&time=.*/).respond(response);
|
||||||
ctx.ds.metricFindQuery('label_values(metric, resource)').then(function(data) { results = data; });
|
ctx.ds.metricFindQuery('label_values(metric, resource)').then(function(data) { results = data; });
|
||||||
ctx.$httpBackend.flush();
|
ctx.$httpBackend.flush();
|
||||||
ctx.$rootScope.$apply();
|
ctx.$rootScope.$apply();
|
||||||
@ -82,7 +82,7 @@ describe('PrometheusDatasource', function() {
|
|||||||
status: "success",
|
status: "success",
|
||||||
data: ["metric1","metric2","metric3","nomatch"]
|
data: ["metric1","metric2","metric3","nomatch"]
|
||||||
};
|
};
|
||||||
ctx.$httpBackend.expect('GET', '/api/v1/label/__name__/values').respond(response);
|
ctx.$httpBackend.expect('GET', 'proxied/api/v1/label/__name__/values').respond(response);
|
||||||
ctx.ds.metricFindQuery('metrics(metric.*)').then(function(data) { results = data; });
|
ctx.ds.metricFindQuery('metrics(metric.*)').then(function(data) { results = data; });
|
||||||
ctx.$httpBackend.flush();
|
ctx.$httpBackend.flush();
|
||||||
ctx.$rootScope.$apply();
|
ctx.$rootScope.$apply();
|
||||||
|
Reference in New Issue
Block a user