.../resources/webapps/static/yarn.dt.plugins.js | 52 ++++++++++++++++++++++ .../webapp/AppAttemptPage.java | 2 +- .../applicationhistoryservice/webapp/AppPage.java | 2 +- .../hadoop/yarn/server/webapp/WebPageUtils.java | 6 +-- 4 files changed, 57 insertions(+), 5 deletions(-) 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 c9416fd..510d257 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 @@ -166,3 +166,55 @@ function parseHadoopProgress(data, type, full) { //Return the title attribute for 'sort', 'filter', 'type' and undefined return data.split("'")[1]; } + +jQuery.fn.dataTableExt.oSort['string-numeric-asc'] = function(a, b) { + return stringNumericSort(a, b); +} + +jQuery.fn.dataTableExt.oSort['string-numeric-desc'] = function(a, b) { + return stringNumericSort(a,b) * -1; +} + +//sort the data having the combination of string and numeric value +function stringNumericSort (a, b) { + var re = /(^-?[0-9]+(\.?[0-9]*)[df]?e?[0-9]?$|^0x[0-9a-f]+$|[0-9]+)/gi, + sre = /(^[ ]*|[ ]*$)/g, + dre = /(^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w ]?|^\d{1,4}[\/\-]\d{1,4}[\/\-]\d{1,4}|^\w+, \w+ \d+, \d{4})/, + hre = /^0x[0-9a-f]+$/i, + ore = /^0/, + x = a.toString().replace(sre, '') || '', + y = b.toString().replace(sre, '') || '', + xN = x.replace(re, '\0$1\0').replace(/\0$/,'').replace(/^\0/,'').split('\0'), + yN = y.replace(re, '\0$1\0').replace(/\0$/,'').replace(/^\0/,'').split('\0'), + xD = parseInt(x.match(hre), 10) || (xN.length !== 1 && x.match(dre) && Date.parse(x)), + yD = parseInt(y.match(hre), 10) || xD && y.match(dre) && Date.parse(y) || null; + + if (yD) { + if ( xD < yD ) { + return -1; + } + else if ( xD > yD ) { + return 1; + } + } + + for(var cLoc=0, numS=Math.max(xN.length, yN.length); cLoc < numS; cLoc++) { + var oFxNcL = !(xN[cLoc] || '').match(ore) && parseFloat(xN[cLoc], 10) || xN[cLoc] || 0; + var oFyNcL = !(yN[cLoc] || '').match(ore) && parseFloat(yN[cLoc], 10) || yN[cLoc] || 0; + + if (isNaN(oFxNcL) !== isNaN(oFyNcL)) { + return (isNaN(oFxNcL)) ? 1 : -1; + } + else if (typeof oFxNcL !== typeof oFyNcL) { + oFxNcL += ''; + oFyNcL += ''; + } + if (oFxNcL < oFyNcL) { + return -1; + } + if (oFxNcL > oFyNcL) { + return 1; + } + } + return 0; +} diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/webapp/AppAttemptPage.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/webapp/AppAttemptPage.java index c7fe318..f9848e9 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/webapp/AppAttemptPage.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/webapp/AppAttemptPage.java @@ -53,7 +53,7 @@ protected void preHead(Page.HTML<_> html) { protected String getContainersTableColumnDefs() { StringBuilder sb = new StringBuilder(); - return sb.append("[\n").append("{'sType':'string', 'aTargets': [0]") + return sb.append("[\n").append("{'sType':'string-numeric', 'aTargets': [0]") .append(", 'mRender': parseHadoopID }]").toString(); } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/webapp/AppPage.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/webapp/AppPage.java index 50dcd96..8ad2166 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/webapp/AppPage.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/webapp/AppPage.java @@ -55,7 +55,7 @@ protected void preHead(Page.HTML<_> html) { protected String getAttemptsTableColumnDefs() { StringBuilder sb = new StringBuilder(); - return sb.append("[\n").append("{'sType':'string', 'aTargets': [0]") + return sb.append("[\n").append("{'sType':'string-numeric', 'aTargets': [0]") .append(", 'mRender': parseHadoopID }") .append("\n, {'sType':'numeric', 'aTargets': [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 5acabf5..ca2edce 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 @@ -44,7 +44,7 @@ private static String getAppsTableColumnDefs(boolean isFairSchedulerPage) { StringBuilder sb = new StringBuilder(); return sb .append("[\n") - .append("{'sType':'string', 'aTargets': [0]") + .append("{'sType':'string-numeric', 'aTargets': [0]") .append(", 'mRender': parseHadoopID }") .append("\n, {'sType':'numeric', 'aTargets': " + (isFairSchedulerPage ? "[6, 7]": "[5, 6]")) @@ -63,7 +63,7 @@ public static String attemptsTableInit() { private static String getAttemptsTableColumnDefs() { StringBuilder sb = new StringBuilder(); - return sb.append("[\n").append("{'sType':'string', 'aTargets': [0]") + return sb.append("[\n").append("{'sType':'string-numeric', 'aTargets': [0]") .append(", 'mRender': parseHadoopID }") .append("\n, {'sType':'numeric', 'aTargets': [1]") .append(", 'mRender': renderHadoopDate }]").toString(); @@ -79,7 +79,7 @@ public static String containersTableInit() { private static String getContainersTableColumnDefs() { StringBuilder sb = new StringBuilder(); - return sb.append("[\n").append("{'sType':'string', 'aTargets': [0]") + return sb.append("[\n").append("{'sType':'string-numeric', 'aTargets': [0]") .append(", 'mRender': parseHadoopID }]").toString(); }