|
@@ -27,7 +27,7 @@ function (angular, _, kbn) {
|
|
|
var qs = [];
|
|
var qs = [];
|
|
|
|
|
|
|
|
_.each(options.targets, function(target) {
|
|
_.each(options.targets, function(target) {
|
|
|
- qs.push(convertTargetToQuery(target, options.interval));
|
|
|
|
|
|
|
+ qs.push(convertTargetToQuery(target, options));
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
var queries = _.compact(qs);
|
|
var queries = _.compact(qs);
|
|
@@ -47,10 +47,10 @@ function (angular, _, kbn) {
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
return this.performTimeSeriesQuery(queries, start, end).then(function(response) {
|
|
return this.performTimeSeriesQuery(queries, start, end).then(function(response) {
|
|
|
- var metricToTargetMapping = mapMetricsToTargets(response.data, options.targets);
|
|
|
|
|
|
|
+ var metricToTargetMapping = mapMetricsToTargets(response.data, options);
|
|
|
var result = _.map(response.data, function(metricData, index) {
|
|
var result = _.map(response.data, function(metricData, index) {
|
|
|
index = metricToTargetMapping[index];
|
|
index = metricToTargetMapping[index];
|
|
|
- return transformMetricData(metricData, groupByTags, options.targets[index]);
|
|
|
|
|
|
|
+ return transformMetricData(metricData, groupByTags, options.targets[index], options);
|
|
|
});
|
|
});
|
|
|
return { data: result };
|
|
return { data: result };
|
|
|
});
|
|
});
|
|
@@ -125,6 +125,8 @@ function (angular, _, kbn) {
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
OpenTSDBDatasource.prototype.metricFindQuery = function(query) {
|
|
OpenTSDBDatasource.prototype.metricFindQuery = function(query) {
|
|
|
|
|
+ if (!query) { return $q.when([]); }
|
|
|
|
|
+
|
|
|
var interpolated;
|
|
var interpolated;
|
|
|
try {
|
|
try {
|
|
|
interpolated = templateSrv.replace(query);
|
|
interpolated = templateSrv.replace(query);
|
|
@@ -147,8 +149,8 @@ function (angular, _, kbn) {
|
|
|
if (metrics_query) {
|
|
if (metrics_query) {
|
|
|
return this._performSuggestQuery(metrics_query[1]).then(responseTransform);
|
|
return this._performSuggestQuery(metrics_query[1]).then(responseTransform);
|
|
|
}
|
|
}
|
|
|
- var tag_names_query = interpolated.match(tag_names_regex);
|
|
|
|
|
|
|
|
|
|
|
|
+ var tag_names_query = interpolated.match(tag_names_regex);
|
|
|
if (tag_names_query) {
|
|
if (tag_names_query) {
|
|
|
return this._performMetricKeyLookup(tag_names_query[1]).then(responseTransform);
|
|
return this._performMetricKeyLookup(tag_names_query[1]).then(responseTransform);
|
|
|
}
|
|
}
|
|
@@ -157,6 +159,8 @@ function (angular, _, kbn) {
|
|
|
if (tag_values_query) {
|
|
if (tag_values_query) {
|
|
|
return this._performMetricKeyValueLookup(tag_values_query[1], tag_values_query[2]).then(responseTransform);
|
|
return this._performMetricKeyValueLookup(tag_values_query[1], tag_values_query[2]).then(responseTransform);
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ return $q.when([]);
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
OpenTSDBDatasource.prototype.testDatasource = function() {
|
|
OpenTSDBDatasource.prototype.testDatasource = function() {
|
|
@@ -165,8 +169,8 @@ function (angular, _, kbn) {
|
|
|
});
|
|
});
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
- function transformMetricData(md, groupByTags, options) {
|
|
|
|
|
- var metricLabel = createMetricLabel(md, options, groupByTags);
|
|
|
|
|
|
|
+ function transformMetricData(md, groupByTags, target, options) {
|
|
|
|
|
+ var metricLabel = createMetricLabel(md, target, groupByTags, options);
|
|
|
var dps = [];
|
|
var dps = [];
|
|
|
|
|
|
|
|
// TSDB returns datapoints has a hash of ts => value.
|
|
// TSDB returns datapoints has a hash of ts => value.
|
|
@@ -178,13 +182,13 @@ function (angular, _, kbn) {
|
|
|
return { target: metricLabel, datapoints: dps };
|
|
return { target: metricLabel, datapoints: dps };
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- function createMetricLabel(md, options, groupByTags) {
|
|
|
|
|
- if (!_.isUndefined(options) && options.alias) {
|
|
|
|
|
- var scopedVars = {};
|
|
|
|
|
|
|
+ function createMetricLabel(md, target, groupByTags, options) {
|
|
|
|
|
+ if (target.alias) {
|
|
|
|
|
+ var scopedVars = _.clone(options.scopedVars || {});
|
|
|
_.each(md.tags, function(value, key) {
|
|
_.each(md.tags, function(value, key) {
|
|
|
scopedVars['tag_' + key] = {value: value};
|
|
scopedVars['tag_' + key] = {value: value};
|
|
|
});
|
|
});
|
|
|
- return templateSrv.replace(options.alias, scopedVars);
|
|
|
|
|
|
|
+ return templateSrv.replace(target.alias, scopedVars);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
var label = md.metric;
|
|
var label = md.metric;
|
|
@@ -205,13 +209,13 @@ function (angular, _, kbn) {
|
|
|
return label;
|
|
return label;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- function convertTargetToQuery(target, interval) {
|
|
|
|
|
|
|
+ function convertTargetToQuery(target, options) {
|
|
|
if (!target.metric || target.hide) {
|
|
if (!target.metric || target.hide) {
|
|
|
return null;
|
|
return null;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
var query = {
|
|
var query = {
|
|
|
- metric: templateSrv.replace(target.metric),
|
|
|
|
|
|
|
+ metric: templateSrv.replace(target.metric, options.scopedVars),
|
|
|
aggregator: "avg"
|
|
aggregator: "avg"
|
|
|
};
|
|
};
|
|
|
|
|
|
|
@@ -235,7 +239,7 @@ function (angular, _, kbn) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if (!target.disableDownsampling) {
|
|
if (!target.disableDownsampling) {
|
|
|
- interval = templateSrv.replace(target.downsampleInterval || interval);
|
|
|
|
|
|
|
+ var interval = templateSrv.replace(target.downsampleInterval || options.interval);
|
|
|
|
|
|
|
|
if (interval.match(/\.[0-9]+s/)) {
|
|
if (interval.match(/\.[0-9]+s/)) {
|
|
|
interval = parseFloat(interval)*1000 + "ms";
|
|
interval = parseFloat(interval)*1000 + "ms";
|
|
@@ -247,20 +251,20 @@ function (angular, _, kbn) {
|
|
|
query.tags = angular.copy(target.tags);
|
|
query.tags = angular.copy(target.tags);
|
|
|
if(query.tags){
|
|
if(query.tags){
|
|
|
for(var key in query.tags){
|
|
for(var key in query.tags){
|
|
|
- query.tags[key] = templateSrv.replace(query.tags[key]);
|
|
|
|
|
|
|
+ query.tags[key] = templateSrv.replace(query.tags[key], options.scopedVars);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
return query;
|
|
return query;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- function mapMetricsToTargets(metrics, targets) {
|
|
|
|
|
|
|
+ function mapMetricsToTargets(metrics, options) {
|
|
|
var interpolatedTagValue;
|
|
var interpolatedTagValue;
|
|
|
return _.map(metrics, function(metricData) {
|
|
return _.map(metrics, function(metricData) {
|
|
|
- return _.findIndex(targets, function(target) {
|
|
|
|
|
|
|
+ return _.findIndex(options.targets, function(target) {
|
|
|
return target.metric === metricData.metric &&
|
|
return target.metric === metricData.metric &&
|
|
|
_.all(target.tags, function(tagV, tagK) {
|
|
_.all(target.tags, function(tagV, tagK) {
|
|
|
- interpolatedTagValue = templateSrv.replace(tagV);
|
|
|
|
|
|
|
+ interpolatedTagValue = templateSrv.replace(tagV, options.scopedVars);
|
|
|
return metricData.tags[tagK] === interpolatedTagValue || interpolatedTagValue === "*";
|
|
return metricData.tags[tagK] === interpolatedTagValue || interpolatedTagValue === "*";
|
|
|
});
|
|
});
|
|
|
});
|
|
});
|