Merge pull request #1760 from masaori335/kairosdb-cleanup

Cleanup KairosDB Plugin
This commit is contained in:
Torkel Ödegaard
2015-04-12 15:37:45 +02:00
2 changed files with 96 additions and 108 deletions

View File

@@ -27,10 +27,11 @@ function (angular, _, kbn) {
var end = options.range.to; var end = options.range.to;
var queries = _.compact(_.map(options.targets, _.partial(convertTargetToQuery, options))); var queries = _.compact(_.map(options.targets, _.partial(convertTargetToQuery, options)));
var plotParams = _.compact(_.map(options.targets, function(target){ var plotParams = _.compact(_.map(options.targets, function(target) {
var alias = target.alias; var alias = target.alias;
if (typeof target.alias == 'undefined' || target.alias == "") if (typeof target.alias === 'undefined' || target.alias === "") {
alias = target.metric; alias = target.metric;
}
return !target.hide return !target.hide
? {alias: alias, ? {alias: alias,
exouter: target.exOuter} exouter: target.exOuter}
@@ -54,7 +55,7 @@ function (angular, _, kbn) {
var reqBody = { var reqBody = {
metrics: queries metrics: queries
}; };
reqBody.cache_time=0; reqBody.cache_time = 0;
convertToKairosTime(start,reqBody,'start'); convertToKairosTime(start,reqBody,'start');
convertToKairosTime(end,reqBody,'end'); convertToKairosTime(end,reqBody,'end');
var options = { var options = {
@@ -86,7 +87,7 @@ function (angular, _, kbn) {
}; };
KairosDBDatasource.prototype.performTagSuggestQuery = function(metricname,range,type,keyValue) { KairosDBDatasource.prototype.performTagSuggestQuery = function(metricname,range,type,keyValue) {
if(tagList && (metricname === tagList.metricName) && (range.from === tagList.range.from) && if (tagList && (metricname === tagList.metricName) && (range.from === tagList.range.from) &&
(range.to === tagList.range.to)) { (range.to === tagList.range.to)) {
return getTagListFromResponse(tagList.results,type,keyValue); return getTagListFromResponse(tagList.results,type,keyValue);
} }
@@ -119,10 +120,10 @@ function (angular, _, kbn) {
if (!results.data) { if (!results.data) {
return []; return [];
} }
if(type==="key") { if (type === "key") {
return _.keys(results.data.queries[0].results[0].tags); return _.keys(results.data.queries[0].results[0].tags);
} }
else if(type==="value" && _.has(results.data.queries[0].results[0].tags,keyValue)) { else if (type === "value" && _.has(results.data.queries[0].results[0].tags,keyValue)) {
return results.data.queries[0].results[0].tags[keyValue]; return results.data.queries[0].results[0].tags[keyValue];
} }
return []; return [];
@@ -134,13 +135,13 @@ function (angular, _, kbn) {
* @returns {*} * @returns {*}
*/ */
function handleQueryError(results) { function handleQueryError(results) {
if(results.data.errors && !_.isEmpty(results.data.errors)) { if (results.data.errors && !_.isEmpty(results.data.errors)) {
var errors = { var errors = {
message: results.data.errors[0] message: results.data.errors[0]
}; };
return $q.reject(errors); return $q.reject(errors);
} }
else{ else {
return $q.reject(results); return $q.reject(results);
} }
} }
@@ -148,31 +149,32 @@ function (angular, _, kbn) {
function handleKairosDBQueryResponse(plotParams, results) { function handleKairosDBQueryResponse(plotParams, results) {
var output = []; var output = [];
var index = 0; var index = 0;
_.each(results.data.queries, function (series) { _.each(results.data.queries, function(series) {
var sample_size = series.sample_size; var sample_size = series.sample_size;
console.log("sample_size:" + sample_size + " samples"); console.log("sample_size:" + sample_size + " samples");
_.each(series.results, function (result) { _.each(series.results, function(result) {
//var target = result.name; //var target = result.name;
var target = plotParams[index].alias; var target = plotParams[index].alias;
var details = " ( "; var details = " ( ";
_.each(result.group_by,function(element) { _.each(result.group_by, function(element) {
if(element.name==="tag") { if (element.name === "tag") {
_.each(element.group,function(value, key) { _.each(element.group, function(value, key) {
details+= key+"="+value+" "; details += key + "=" + value + " ";
}); });
} }
else if(element.name==="value") { else if (element.name === "value") {
details+= 'value_group='+element.group.group_number+" "; details += 'value_group=' + element.group.group_number + " ";
} }
else if(element.name==="time") { else if (element.name === "time") {
details+= 'time_group='+element.group.group_number+" "; details += 'time_group=' + element.group.group_number + " ";
} }
}); });
details+= ") "; details += ") ";
if (details != " ( ) ") if (details !== " ( ) ") {
target += details; target += details;
}
var datapoints = []; var datapoints = [];
for (var i = 0; i < result.values.length; i++) { for (var i = 0; i < result.values.length; i++) {
@@ -180,8 +182,9 @@ function (angular, _, kbn) {
var v = result.values[i][1]; var v = result.values[i][1];
datapoints[i] = [v, t]; datapoints[i] = [v, t];
} }
if (plotParams[index].exouter) if (plotParams[index].exouter) {
datapoints = PeakFilter(datapoints, 10); datapoints = new PeakFilter(datapoints, 10);
}
output.push({ target: target, datapoints: datapoints }); output.push({ target: target, datapoints: datapoints });
}); });
index ++; index ++;
@@ -201,7 +204,7 @@ function (angular, _, kbn) {
}; };
query.aggregators = []; query.aggregators = [];
if(target.downsampling!=='(NONE)') { if (target.downsampling !== '(NONE)') {
query.aggregators.push({ query.aggregators.push({
name: target.downsampling, name: target.downsampling,
align_sampling: true, align_sampling: true,
@@ -209,47 +212,47 @@ function (angular, _, kbn) {
sampling: KairosDBDatasource.prototype.convertToKairosInterval(target.sampling || options.interval) sampling: KairosDBDatasource.prototype.convertToKairosInterval(target.sampling || options.interval)
}); });
} }
if(target.horizontalAggregators) { if (target.horizontalAggregators) {
_.each(target.horizontalAggregators,function(chosenAggregator) { _.each(target.horizontalAggregators, function(chosenAggregator) {
var returnedAggregator = { var returnedAggregator = {
name:chosenAggregator.name name:chosenAggregator.name
}; };
if(chosenAggregator.sampling_rate) { if (chosenAggregator.sampling_rate) {
returnedAggregator.sampling = KairosDBDatasource.prototype.convertToKairosInterval(chosenAggregator.sampling_rate); returnedAggregator.sampling = KairosDBDatasource.prototype.convertToKairosInterval(chosenAggregator.sampling_rate);
returnedAggregator.align_sampling = true; returnedAggregator.align_sampling = true;
returnedAggregator.align_start_time =true; returnedAggregator.align_start_time =true;
} }
if(chosenAggregator.unit) { if (chosenAggregator.unit) {
returnedAggregator.unit = chosenAggregator.unit+'s'; returnedAggregator.unit = chosenAggregator.unit + 's';
} }
if(chosenAggregator.factor && chosenAggregator.name==='div') { if (chosenAggregator.factor && chosenAggregator.name === 'div') {
returnedAggregator.divisor = chosenAggregator.factor; returnedAggregator.divisor = chosenAggregator.factor;
} }
else if(chosenAggregator.factor && chosenAggregator.name==='scale') { else if (chosenAggregator.factor && chosenAggregator.name === 'scale') {
returnedAggregator.factor = chosenAggregator.factor; returnedAggregator.factor = chosenAggregator.factor;
} }
if(chosenAggregator.percentile) { if (chosenAggregator.percentile) {
returnedAggregator.percentile = chosenAggregator.percentile; returnedAggregator.percentile = chosenAggregator.percentile;
} }
query.aggregators.push(returnedAggregator); query.aggregators.push(returnedAggregator);
}); });
} }
if(_.isEmpty(query.aggregators)) { if (_.isEmpty(query.aggregators)) {
delete query.aggregators; delete query.aggregators;
} }
if(target.tags) { if (target.tags) {
query.tags = angular.copy(target.tags); query.tags = angular.copy(target.tags);
} }
if(target.groupByTags || target.nonTagGroupBys) { if (target.groupByTags || target.nonTagGroupBys) {
query.group_by = []; query.group_by = [];
if(target.groupByTags) {query.group_by.push({name: "tag", tags: angular.copy(target.groupByTags)});} if (target.groupByTags) {query.group_by.push({name: "tag", tags: angular.copy(target.groupByTags)});}
if(target.nonTagGroupBys) { if (target.nonTagGroupBys) {
_.each(target.nonTagGroupBys,function(rawGroupBy) { _.each(target.nonTagGroupBys, function(rawGroupBy) {
var formattedGroupBy = angular.copy(rawGroupBy); var formattedGroupBy = angular.copy(rawGroupBy);
if(formattedGroupBy.name==='time') { if (formattedGroupBy.name === 'time') {
formattedGroupBy.range_size=KairosDBDatasource.prototype.convertToKairosInterval(formattedGroupBy.range_size); formattedGroupBy.range_size = KairosDBDatasource.prototype.convertToKairosInterval(formattedGroupBy.range_size);
} }
query.group_by.push(formattedGroupBy); query.group_by.push(formattedGroupBy);
}); });
@@ -266,7 +269,7 @@ function (angular, _, kbn) {
var interval_regex = /(\d+(?:\.\d+)?)([Mwdhmsy])/; var interval_regex = /(\d+(?:\.\d+)?)([Mwdhmsy])/;
var interval_regex_ms = /(\d+(?:\.\d+)?)(ms)/; var interval_regex_ms = /(\d+(?:\.\d+)?)(ms)/;
var matches = intervalString.match(interval_regex_ms); var matches = intervalString.match(interval_regex_ms);
if(!matches) { if (!matches) {
matches = intervalString.match(interval_regex); matches = intervalString.match(interval_regex);
} }
if (!matches) { if (!matches) {
@@ -275,13 +278,13 @@ function (angular, _, kbn) {
var value = matches[1]; var value = matches[1];
var unit = matches[2]; var unit = matches[2];
if (value%1!==0) { if (value%1 !== 0) {
if(unit==='ms') {throw new Error('Invalid interval value, cannot be smaller than the millisecond');} if (unit === 'ms') {throw new Error('Invalid interval value, cannot be smaller than the millisecond');}
value = Math.round(kbn.intervals_in_seconds[unit]*value*1000); value = Math.round(kbn.intervals_in_seconds[unit] * value * 1000);
unit = 'ms'; unit = 'ms';
} }
switch(unit) { switch (unit) {
case 'ms': case 'ms':
unit = 'milliseconds'; unit = 'milliseconds';
break; break;
@@ -334,7 +337,7 @@ function (angular, _, kbn) {
if (result) { if (result) {
var value = result[1]; var value = result[1];
var unit = result[2]; var unit = result[2];
switch(unit) { switch (unit) {
case 'ms': case 'ms':
unit = 'milliseconds'; unit = 'milliseconds';
break; break;
@@ -375,7 +378,7 @@ function (angular, _, kbn) {
date = kbn.parseDate(date); date = kbn.parseDate(date);
} }
if(_.isDate(date)) { if (_.isDate(date)) {
name = start_stop_name + "_absolute"; name = start_stop_name + "_absolute";
response_obj[name] = date.getTime(); response_obj[name] = date.getTime();
return; return;
@@ -387,27 +390,31 @@ function (angular, _, kbn) {
function PeakFilter(dataIn, limit) { function PeakFilter(dataIn, limit) {
var datapoints = dataIn; var datapoints = dataIn;
var arrLength = datapoints.length; var arrLength = datapoints.length;
if (arrLength <= 3) if (arrLength <= 3) {
return datapoints; return datapoints;
}
var LastIndx = arrLength - 1; var LastIndx = arrLength - 1;
// Check first point // Check first point
var prvDelta = Math.abs((datapoints[1][0] - datapoints[0][0]) / datapoints[0][0]); var prvDelta = Math.abs((datapoints[1][0] - datapoints[0][0]) / datapoints[0][0]);
var nxtDelta = Math.abs((datapoints[1][0] - datapoints[2][0]) / datapoints[2][0]); var nxtDelta = Math.abs((datapoints[1][0] - datapoints[2][0]) / datapoints[2][0]);
if (prvDelta >= limit && nxtDelta < limit) if (prvDelta >= limit && nxtDelta < limit) {
datapoints[0][0] = datapoints[1][0]; datapoints[0][0] = datapoints[1][0];
}
// Check last point // Check last point
prvDelta = Math.abs((datapoints[LastIndx - 1][0] - datapoints[LastIndx - 2][0]) / datapoints[LastIndx - 2][0]); prvDelta = Math.abs((datapoints[LastIndx - 1][0] - datapoints[LastIndx - 2][0]) / datapoints[LastIndx - 2][0]);
nxtDelta = Math.abs((datapoints[LastIndx - 1][0] - datapoints[LastIndx][0]) / datapoints[LastIndx][0]); nxtDelta = Math.abs((datapoints[LastIndx - 1][0] - datapoints[LastIndx][0]) / datapoints[LastIndx][0]);
if (prvDelta >= limit && nxtDelta < limit) if (prvDelta >= limit && nxtDelta < limit) {
datapoints[LastIndx][0] = datapoints[LastIndx - 1][0]; datapoints[LastIndx][0] = datapoints[LastIndx - 1][0];
}
for (var i = 1; i < arrLength - 1; i++){ for (var i = 1; i < arrLength - 1; i++) {
prvDelta = Math.abs((datapoints[i][0] - datapoints[i - 1][0]) / datapoints[i - 1][0]); prvDelta = Math.abs((datapoints[i][0] - datapoints[i - 1][0]) / datapoints[i - 1][0]);
nxtDelta = Math.abs((datapoints[i][0] - datapoints[i + 1][0]) / datapoints[i + 1][0]); nxtDelta = Math.abs((datapoints[i][0] - datapoints[i + 1][0]) / datapoints[i + 1][0]);
if (prvDelta >= limit && nxtDelta >= limit) if (prvDelta >= limit && nxtDelta >= limit) {
datapoints[i][0] = (datapoints[i-1][0] + datapoints[i+1][0]) / 2; datapoints[i][0] = (datapoints[i - 1][0] + datapoints[i + 1][0]) / 2;
}
} }
return datapoints; return datapoints;

View File

@@ -94,7 +94,7 @@ function (angular, _) {
$scope.validateFilterTag(); $scope.validateFilterTag();
if (!$scope.target.errors.tags) { if (!$scope.target.errors.tags) {
if(!_.has($scope.target.tags,$scope.target.currentTagKey)) { if (!_.has($scope.target.tags,$scope.target.currentTagKey)) {
$scope.target.tags[$scope.target.currentTagKey] = []; $scope.target.tags[$scope.target.currentTagKey] = [];
} }
$scope.target.tags[$scope.target.currentTagKey].push($scope.target.currentTagValue); $scope.target.tags[$scope.target.currentTagKey].push($scope.target.currentTagValue);
@@ -108,7 +108,7 @@ function (angular, _) {
$scope.removeFilterTag = function(key) { $scope.removeFilterTag = function(key) {
delete $scope.target.tags[key]; delete $scope.target.tags[key];
if(_.size($scope.target.tags)===0) { if (_.size($scope.target.tags) === 0) {
$scope.target.tags = null; $scope.target.tags = null;
} }
$scope.targetBlur(); $scope.targetBlur();
@@ -116,7 +116,7 @@ function (angular, _) {
$scope.validateFilterTag = function() { $scope.validateFilterTag = function() {
$scope.target.errors.tags = null; $scope.target.errors.tags = null;
if(!$scope.target.currentTagKey || !$scope.target.currentTagValue) { if (!$scope.target.currentTagKey || !$scope.target.currentTagValue) {
$scope.target.errors.tags = "You must specify a tag name and value."; $scope.target.errors.tags = "You must specify a tag name and value.";
} }
}; };
@@ -136,7 +136,7 @@ function (angular, _) {
$scope.validateGroupBy(); $scope.validateGroupBy();
// nb: if error is found, means that user clicked on cross : cancels input // nb: if error is found, means that user clicked on cross : cancels input
if (_.isEmpty($scope.target.errors.groupBy)) { if (_.isEmpty($scope.target.errors.groupBy)) {
if($scope.isTagGroupBy) { if ($scope.isTagGroupBy) {
if (!$scope.target.groupByTags) { if (!$scope.target.groupByTags) {
$scope.target.groupByTags = []; $scope.target.groupByTags = [];
} }
@@ -147,15 +147,15 @@ function (angular, _) {
} }
$scope.target.groupBy.tagKey = ''; $scope.target.groupBy.tagKey = '';
} }
else { else {
if (!$scope.target.nonTagGroupBys) { if (!$scope.target.nonTagGroupBys) {
$scope.target.nonTagGroupBys = []; $scope.target.nonTagGroupBys = [];
} }
var groupBy = { var groupBy = {
name: $scope.target.currentGroupByType name: $scope.target.currentGroupByType
}; };
if($scope.isValueGroupBy) {groupBy.range_size = $scope.target.groupBy.valueRange;} if ($scope.isValueGroupBy) {groupBy.range_size = $scope.target.groupBy.valueRange;}
else if($scope.isTimeGroupBy) { else if ($scope.isTimeGroupBy) {
groupBy.range_size = $scope.target.groupBy.timeInterval; groupBy.range_size = $scope.target.groupBy.timeInterval;
groupBy.group_count = $scope.target.groupBy.groupCount; groupBy.group_count = $scope.target.groupBy.groupCount;
} }
@@ -171,7 +171,7 @@ function (angular, _) {
$scope.removeGroupByTag = function(index) { $scope.removeGroupByTag = function(index) {
$scope.target.groupByTags.splice(index, 1); $scope.target.groupByTags.splice(index, 1);
if(_.size($scope.target.groupByTags)===0) { if (_.size($scope.target.groupByTags) === 0) {
$scope.target.groupByTags = null; $scope.target.groupByTags = null;
} }
$scope.targetBlur(); $scope.targetBlur();
@@ -179,16 +179,16 @@ function (angular, _) {
$scope.removeNonTagGroupBy = function(index) { $scope.removeNonTagGroupBy = function(index) {
$scope.target.nonTagGroupBys.splice(index, 1); $scope.target.nonTagGroupBys.splice(index, 1);
if(_.size($scope.target.nonTagGroupBys)===0) { if (_.size($scope.target.nonTagGroupBys) === 0) {
$scope.target.nonTagGroupBys = null; $scope.target.nonTagGroupBys = null;
} }
$scope.targetBlur(); $scope.targetBlur();
}; };
$scope.changeGroupByInput = function() { $scope.changeGroupByInput = function() {
$scope.isTagGroupBy = $scope.target.currentGroupByType==='tag'; $scope.isTagGroupBy = $scope.target.currentGroupByType === 'tag';
$scope.isValueGroupBy = $scope.target.currentGroupByType==='value'; $scope.isValueGroupBy = $scope.target.currentGroupByType === 'value';
$scope.isTimeGroupBy = $scope.target.currentGroupByType==='time'; $scope.isTimeGroupBy = $scope.target.currentGroupByType === 'time';
$scope.validateGroupBy(); $scope.validateGroupBy();
}; };
@@ -196,32 +196,32 @@ function (angular, _) {
delete $scope.target.errors.groupBy; delete $scope.target.errors.groupBy;
var errors = {}; var errors = {};
$scope.isGroupByValid = true; $scope.isGroupByValid = true;
if($scope.isTagGroupBy) { if ($scope.isTagGroupBy) {
if(!$scope.target.groupBy.tagKey) { if (!$scope.target.groupBy.tagKey) {
$scope.isGroupByValid = false; $scope.isGroupByValid = false;
errors.tagKey = 'You must supply a tag name'; errors.tagKey = 'You must supply a tag name';
} }
} }
if($scope.isValueGroupBy) { if ($scope.isValueGroupBy) {
if(!$scope.target.groupBy.valueRange || !isInt($scope.target.groupBy.valueRange)) { if (!$scope.target.groupBy.valueRange || !isInt($scope.target.groupBy.valueRange)) {
errors.valueRange = "Range must be an integer"; errors.valueRange = "Range must be an integer";
$scope.isGroupByValid = false; $scope.isGroupByValid = false;
} }
} }
if($scope.isTimeGroupBy) { if ($scope.isTimeGroupBy) {
try { try {
$scope.datasource.convertToKairosInterval($scope.target.groupBy.timeInterval); $scope.datasource.convertToKairosInterval($scope.target.groupBy.timeInterval);
} catch(err) { } catch (err) {
errors.timeInterval = err.message; errors.timeInterval = err.message;
$scope.isGroupByValid = false; $scope.isGroupByValid = false;
} }
if(!$scope.target.groupBy.groupCount || !isInt($scope.target.groupBy.groupCount)) { if (!$scope.target.groupBy.groupCount || !isInt($scope.target.groupBy.groupCount)) {
errors.groupCount = "Group count must be an integer"; errors.groupCount = "Group count must be an integer";
$scope.isGroupByValid = false; $scope.isGroupByValid = false;
} }
} }
if(!_.isEmpty(errors)) { if (!_.isEmpty(errors)) {
$scope.target.errors.groupBy = errors; $scope.target.errors.groupBy = errors;
} }
}; };
@@ -245,17 +245,17 @@ function (angular, _) {
$scope.validateHorizontalAggregator(); $scope.validateHorizontalAggregator();
// nb: if error is found, means that user clicked on cross : cancels input // nb: if error is found, means that user clicked on cross : cancels input
if(_.isEmpty($scope.target.errors.horAggregator)) { if (_.isEmpty($scope.target.errors.horAggregator)) {
if (!$scope.target.horizontalAggregators) { if (!$scope.target.horizontalAggregators) {
$scope.target.horizontalAggregators = []; $scope.target.horizontalAggregators = [];
} }
var aggregator = { var aggregator = {
name:$scope.target.currentHorizontalAggregatorName name:$scope.target.currentHorizontalAggregatorName
}; };
if($scope.hasSamplingRate) {aggregator.sampling_rate = $scope.target.horAggregator.samplingRate;} if ($scope.hasSamplingRate) {aggregator.sampling_rate = $scope.target.horAggregator.samplingRate;}
if($scope.hasUnit) {aggregator.unit = $scope.target.horAggregator.unit;} if ($scope.hasUnit) {aggregator.unit = $scope.target.horAggregator.unit;}
if($scope.hasFactor) {aggregator.factor = $scope.target.horAggregator.factor;} if ($scope.hasFactor) {aggregator.factor = $scope.target.horAggregator.factor;}
if($scope.hasPercentile) {aggregator.percentile = $scope.target.horAggregator.percentile;} if ($scope.hasPercentile) {aggregator.percentile = $scope.target.horAggregator.percentile;}
$scope.target.horizontalAggregators.push(aggregator); $scope.target.horizontalAggregators.push(aggregator);
$scope.targetBlur(); $scope.targetBlur();
} }
@@ -270,7 +270,7 @@ function (angular, _) {
$scope.removeHorizontalAggregator = function(index) { $scope.removeHorizontalAggregator = function(index) {
$scope.target.horizontalAggregators.splice(index, 1); $scope.target.horizontalAggregators.splice(index, 1);
if(_.size($scope.target.horizontalAggregators)===0) { if (_.size($scope.target.horizontalAggregators) === 0) {
$scope.target.horizontalAggregators = null; $scope.target.horizontalAggregators = null;
} }
@@ -282,7 +282,7 @@ function (angular, _) {
$scope.target.currentHorizontalAggregatorName); $scope.target.currentHorizontalAggregatorName);
$scope.hasUnit = _.contains(['sampler','rate'], $scope.target.currentHorizontalAggregatorName); $scope.hasUnit = _.contains(['sampler','rate'], $scope.target.currentHorizontalAggregatorName);
$scope.hasFactor = _.contains(['div','scale'], $scope.target.currentHorizontalAggregatorName); $scope.hasFactor = _.contains(['div','scale'], $scope.target.currentHorizontalAggregatorName);
$scope.hasPercentile = 'percentile'===$scope.target.currentHorizontalAggregatorName; $scope.hasPercentile = 'percentile' === $scope.target.currentHorizontalAggregatorName;
$scope.validateHorizontalAggregator(); $scope.validateHorizontalAggregator();
}; };
@@ -290,26 +290,26 @@ function (angular, _) {
delete $scope.target.errors.horAggregator; delete $scope.target.errors.horAggregator;
var errors = {}; var errors = {};
$scope.isAggregatorValid = true; $scope.isAggregatorValid = true;
if($scope.hasSamplingRate) { if ($scope.hasSamplingRate) {
try { try {
$scope.datasource.convertToKairosInterval($scope.target.horAggregator.samplingRate); $scope.datasource.convertToKairosInterval($scope.target.horAggregator.samplingRate);
} catch(err) { } catch (err) {
errors.samplingRate = err.message; errors.samplingRate = err.message;
$scope.isAggregatorValid = false; $scope.isAggregatorValid = false;
} }
} }
if($scope.hasFactor) { if ($scope.hasFactor) {
if(!$scope.target.horAggregator.factor) { if (!$scope.target.horAggregator.factor) {
errors.factor = 'You must supply a numeric value for this aggregator'; errors.factor = 'You must supply a numeric value for this aggregator';
$scope.isAggregatorValid = false; $scope.isAggregatorValid = false;
} }
else if(parseInt($scope.target.horAggregator.factor)===0 && $scope.target.currentHorizontalAggregatorName==='div') { else if (parseInt($scope.target.horAggregator.factor) === 0 && $scope.target.currentHorizontalAggregatorName === 'div') {
errors.factor = 'Cannot divide by 0'; errors.factor = 'Cannot divide by 0';
$scope.isAggregatorValid = false; $scope.isAggregatorValid = false;
} }
} }
if($scope.hasPercentile) { if ($scope.hasPercentile) {
if(!$scope.target.horAggregator.percentile || if (!$scope.target.horAggregator.percentile ||
$scope.target.horAggregator.percentile<=0 || $scope.target.horAggregator.percentile<=0 ||
$scope.target.horAggregator.percentile>1) { $scope.target.horAggregator.percentile>1) {
errors.percentile = 'Percentile must be between 0 and 1'; errors.percentile = 'Percentile must be between 0 and 1';
@@ -317,7 +317,7 @@ function (angular, _) {
} }
} }
if(!_.isEmpty(errors)) { if (!_.isEmpty(errors)) {
$scope.target.errors.horAggregator = errors; $scope.target.errors.horAggregator = errors;
} }
}; };
@@ -327,25 +327,6 @@ function (angular, _) {
}; };
// Validation // Validation
function MetricListToObject(MetricList) {
var result = {};
var Metric;
var MetricArray = [];
var MetricCnt = 0;
for (var i =0;i < MetricList.length; i++) {
Metric = MetricList[i];
MetricArray = Metric.split('.');
if(!result.hasOwnProperty(MetricArray[0])) {
result[MetricArray[0]] = {};
}
if(!result[MetricArray[0]].hasOwnProperty(MetricArray[1])) {
result[MetricArray[0]][MetricArray[1]] = [];
}
result[MetricArray[0]][MetricArray[1]].push(MetricArray[2]);
}
return result;
}
function validateTarget(target) { function validateTarget(target) {
var errs = {}; var errs = {};
@@ -357,7 +338,7 @@ function (angular, _) {
if (target.sampling) { if (target.sampling) {
$scope.datasource.convertToKairosInterval(target.sampling); $scope.datasource.convertToKairosInterval(target.sampling);
} }
} catch(err) { } catch (err) {
errs.sampling = err.message; errs.sampling = err.message;
} }