in ambari-web/app/views/common/filter_view.js [381:604]
getFilterByType: function (type, isGlobal) {
switch (type) {
case 'ambari-bandwidth':
return function (rowValue, rangeExp) {
var compareChar = isNaN(rangeExp.charAt(0)) ? rangeExp.charAt(0) : false;
var compareScale = rangeExp.charAt(rangeExp.length - 1);
var compareValue = parseFloat(rangeExp.substr(compareChar ? 1 : 0));
if (rangeExp.length === 1 && compareChar !== false) {
// User types only '=' or '>' or '<', so don't filter column values
return true;
}
var oneSymbolScales = {
k: 1024,
m: 1048576,
g: 1073741824
};
var twoSymbolsScales = {
KB: 1024,
MB: 1048576,
GB: 1073741824
};
compareValue *= oneSymbolScales[compareScale] ? oneSymbolScales[compareScale] : oneSymbolScales.g; // default value in GB
rowValue = jQuery(rowValue).text() ? jQuery(rowValue).text() : rowValue;
var convertedRowValue;
if (rowValue === '<1KB') {
convertedRowValue = 1;
} else {
var rowValueScale = rowValue.substr(rowValue.length - 2, 2);
if (twoSymbolsScales[rowValueScale]) {
convertedRowValue = parseFloat(rowValue) * twoSymbolsScales[rowValueScale];
}
}
switch (compareChar) {
case '<':
return compareValue > convertedRowValue;
case '>':
return compareValue < convertedRowValue;
case false:
case '=':
return compareValue === convertedRowValue;
default:
return false;
}
};
case 'duration':
return function (rowValue, rangeExp) {
var compareChar = isNaN(rangeExp.charAt(0)) ? rangeExp.charAt(0) : false;
var compareScale = rangeExp.charAt(rangeExp.length - 1);
var compareValue = parseFloat(rangeExp.substr(compareChar ? 1 : 0));
if (rangeExp.length === 1 && compareChar !== false) {
// User types only '=' or '>' or '<', so don't filter column values
return true;
}
var oneSymbolsScales = {
s: 1000,
m: 60000,
h: 3600000
};
compareValue *= oneSymbolsScales[compareScale] ? oneSymbolsScales[compareScale] : oneSymbolsScales.s;
rowValue = jQuery(rowValue).text() ? jQuery(rowValue).text() : rowValue;
switch (compareChar) {
case '<':
return compareValue > rowValue;
case '>':
return compareValue < rowValue;
case false:
case '=':
return compareValue == rowValue;
default:
return false;
}
};
case 'date':
return function (rowValue, rangeExp) {
var timePassed = App.dateTime() - rowValue;
switch (rangeExp) {
case 'Past 1 hour':
return timePassed <= 3600000;
case 'Past 1 Day':
return timePassed <= 86400000;
case 'Past 2 Days':
return timePassed <= 172800000;
case 'Past 7 Days':
return timePassed <= 604800000;
case 'Past 14 Days':
return timePassed <= 1209600000;
case 'Past 30 Days':
return timePassed <= 2592000000;
case 'Any':
return true;
default:
return false;
}
};
case 'number':
return function (rowValue, rangeExp) {
var compareChar = rangeExp.charAt(0);
var compareValue;
if (rangeExp.length === 1) {
if (isNaN(parseInt(compareChar, 10))) {
// User types only '=' or '>' or '<', so don't filter column values
return true;
}
compareValue = parseFloat(parseFloat(rangeExp).toFixed(2));
}
else {
if (isNaN(parseInt(compareChar, 10))) {
compareValue = parseFloat(parseFloat(rangeExp.substr(1, rangeExp.length)).toFixed(2));
}
else {
compareValue = parseFloat(parseFloat(rangeExp.substr(0, rangeExp.length)).toFixed(2));
}
}
rowValue = parseFloat(jQuery(rowValue).text() ? jQuery(rowValue).text() : rowValue);
switch (compareChar) {
case '<':
return compareValue > rowValue;
case '>':
return compareValue < rowValue;
case '=':
default:
return compareValue === rowValue;
}
};
case 'sub-resource':
return function (origin, compareValue) {
if (!Array.isArray(compareValue) || !compareValue.length) {
return true;
}
return origin.some(function (item) {
for (var i = 0, l = compareValue.length; i < l; i++) {
if (Array.isArray(compareValue[i].value)) {
if (!compareValue[i].value.contains(item.get(compareValue[i].property))) return false;
} else {
if (item.get(compareValue[i].property) !== compareValue[i].value) return false;
}
}
return true;
});
};
case 'multiple':
return function (origin, compareValue) {
var options = compareValue.split(',');
var rowValue = typeof origin === "string" ? origin : origin.mapProperty('componentName').join(" ");
var str = new RegExp(compareValue, "i");
for (var i = 0; i < options.length; i++) {
if (!isGlobal) {
str = new RegExp('(\\W|^)' + options[i] + '(\\W|$)');
}
if (rowValue.search(str) !== -1) {
return true;
}
}
return false;
};
case 'boolean':
case 'select':
return function (origin, compareValue) {
return origin === compareValue;
};
case 'os':
return function (origin, compareValue) {
return origin.getEach('osType').contains(compareValue)
};
case 'range':
return function (origin, compareValue) {
if (compareValue[1] && compareValue[0]) {
return origin >= compareValue[0] && origin <= compareValue[1];
}
if (compareValue[0]) {
return origin >= compareValue[0];
}
if (compareValue[1]) {
return origin <= compareValue[1]
}
return true;
};
case 'alert_status':
/**
* origin - alertDefinition.summary
* compareValue - "OK|WARNING|CRITICAL|UNKNOWN|PENDING"
* PENDING means that OK is 0, WARNING is 0, CRITICAL is 0 and UNKNOWN is 0
*/
return function (origin, compareValue) {
if ('PENDING' === compareValue) {
var isPending = true;
Em.keys(origin).forEach(function(state) {
if (origin[state] && (origin[state].count > 0 || origin[state].maintenanceCount > 0)) {
isPending = false;
}
});
return isPending;
}
return !!origin[compareValue] && (origin[compareValue].count > 0 || origin[compareValue].maintenanceCount > 0);
};
case 'alert_group':
return function (origin, compareValue) {
return origin.mapProperty('id').contains(compareValue);
};
case 'enable_disable':
return function (origin, compareValue) {
return origin === (compareValue === 'enabled');
};
case 'file_extension':
return function(origin, compareValue) {
return origin.endsWith(compareValue);
};
case 'string':
default:
return function (origin, compareValue) {
if (validator.isValidMatchesRegexp(compareValue)) {
var escapedCompareValue = compareValue.replace("(", "\\(").replace(")", "\\)").trim();
var regex = new RegExp(escapedCompareValue, "i");
return regex.test(origin);
}
return false;
}
}
},