diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/resources/webapps/static/yarn.dt.plugins.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/resources/webapps/static/yarn.dt.plugins.js index c0032725c43..92f2ae935e7 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/resources/webapps/static/yarn.dt.plugins.js +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/resources/webapps/static/yarn.dt.plugins.js @@ -73,6 +73,28 @@ jQuery.fn.dataTableExt.oApi.fnSetFilteringDelay = function ( oSettings, iDelay ) return this; } +jQuery.fn.dataTableExt.oSort['num-ignore-str-asc'] = function(a, b) { + if (isNaN(a) && isNaN(b)) return ((a < b) ? 1 : ((a > b) ? -1 : 0)); + + if (isNaN(a)) return 1; + if (isNaN(b)) return -1; + + var x = parseFloat(a); + var y = parseFloat(b); + return ((x < y) ? -1 : ((x > y) ? 1 : 0)); +}; + +jQuery.fn.dataTableExt.oSort['num-ignore-str-desc'] = function(a, b) { + if (isNaN(a) && isNaN(b)) return ((a < b) ? 1 : ((a > b) ? -1 : 0)); + + if (isNaN(a)) return 1; + if (isNaN(b)) return -1; + + var x = parseFloat(a); + var y = parseFloat(b); + return ((x < y) ? 1 : ((x > y) ? -1 : 0)); +}; + function renderHadoopDate(data, type, full) { if (type === 'display' || type === 'filter') { if(data === '0'|| data === '-1') { diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/webapp/WebPageUtils.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/webapp/WebPageUtils.java index 29f1e634563..5f197308bd8 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/webapp/WebPageUtils.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/webapp/WebPageUtils.java @@ -47,20 +47,27 @@ public static String appsTableInit( private static String getAppsTableColumnDefs( boolean isFairSchedulerPage, boolean isResourceManager) { + // default progress column index is 10 + String progressIndex = "[10]"; StringBuilder sb = new StringBuilder(); sb.append("[\n") - .append("{'sType':'natural', 'aTargets': [0]") - .append(", 'mRender': parseHadoopID }") - .append("\n, {'sType':'numeric', 'aTargets': [6, 7]") - .append(", 'mRender': renderHadoopDate }") - .append("\n, {'sType':'numeric', bSearchable:false, 'aTargets':"); - if (isFairSchedulerPage) { - sb.append("[15]"); - } else if (isResourceManager) { - sb.append("[17]"); - } else { - sb.append("[9]"); + .append("{'sType':'natural', 'aTargets': [0]") + .append(", 'mRender': parseHadoopID }") + .append("\n, {'sType':'num-ignore-str', 'aTargets': [6, 7]") + .append(", 'mRender': renderHadoopDate }"); + if (isResourceManager) { + // Update following line if any column added in RM page before column 10 + sb.append("\n, {'sType':'num-ignore-str', 'aTargets': [10, 11, 12, 13, 14] }"); + // set progress column index to 17 + progressIndex = "[17]"; + } else if (isFairSchedulerPage) { + // Update following line if any column added in scheduler page before column 10 + sb.append("\n, {'sType':'num-ignore-str', 'aTargets': [10, 11, 12, 13, 14] }"); + // set progress column index to 15 + progressIndex = "[15]"; } + sb.append("\n, {'sType':'numeric', bSearchable:false, 'aTargets':"); + sb.append(progressIndex); sb.append(", 'mRender': parseHadoopProgress }]"); return sb.toString(); }