This is an automated email from the ASF dual-hosted git repository.
lmccay pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/knox.git
The following commit(s) were added to refs/heads/master by this push:
new 46ccd34 KNOX-2310 - Add aggregate method to KnoxShellTable (#302)
46ccd34 is described below
commit 46ccd34da21c045c0727d217c281ae0c427dbe1f
Author: lmccay <[email protected]>
AuthorDate: Thu Mar 26 22:30:45 2020 -0400
KNOX-2310 - Add aggregate method to KnoxShellTable (#302)
* KNOX-2310 - Add aggregate method to KnoxShellTable
Change-Id: I60eeeaf0f8d9b2419fd95944b4f394a021a7f308
* KNOX-2310 - Add aggregate method to KnoxShellTable
Change-Id: If44ab0a517f8189d130f34483859187cecda3df9
---
.../knox/gateway/shell/table/KnoxShellTable.java | 4 ++
.../shell/table/KnoxShellTableAggregator.java | 74 ++++++++++++++++++++++
.../gateway/shell/table/KnoxShellTableTest.java | 30 +++++++++
3 files changed, 108 insertions(+)
diff --git
a/gateway-shell/src/main/java/org/apache/knox/gateway/shell/table/KnoxShellTable.java
b/gateway-shell/src/main/java/org/apache/knox/gateway/shell/table/KnoxShellTable.java
index e630118..06acd16 100644
---
a/gateway-shell/src/main/java/org/apache/knox/gateway/shell/table/KnoxShellTable.java
+++
b/gateway-shell/src/main/java/org/apache/knox/gateway/shell/table/KnoxShellTable.java
@@ -357,6 +357,10 @@ public class KnoxShellTable {
return new KnoxShellTableFilter(this);
}
+ public KnoxShellTableAggregator aggregate() {
+ return new KnoxShellTableAggregator(this);
+ }
+
public KnoxShellTable select(String cols) {
KnoxShellTable table = new KnoxShellTable();
List<List<Comparable<? extends Object>>> columns = new ArrayList<>();
diff --git
a/gateway-shell/src/main/java/org/apache/knox/gateway/shell/table/KnoxShellTableAggregator.java
b/gateway-shell/src/main/java/org/apache/knox/gateway/shell/table/KnoxShellTableAggregator.java
new file mode 100644
index 0000000..9173628
--- /dev/null
+++
b/gateway-shell/src/main/java/org/apache/knox/gateway/shell/table/KnoxShellTableAggregator.java
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.knox.gateway.shell.table;
+
+public class KnoxShellTableAggregator {
+ private KnoxShellTable tableToAggregate;
+ private String[] cols;
+
+ public KnoxShellTableAggregator(KnoxShellTable table) {
+ tableToAggregate = table;
+ }
+
+ public KnoxShellTableAggregator columns(String cols) {
+ this.cols = cols.split("\\s*,\\s*");
+ return this;
+ }
+
+ public KnoxShellTable functions(String funcs) {
+ String[] functions = funcs.split("\\s*,\\s*");
+
+ KnoxShellTable table = new KnoxShellTable();
+ table.header("");
+ for (String col : cols) {
+ table.header(col);
+ }
+
+ for (String func : functions) {
+ table.row();
+ table.value(func);
+ for (String col : cols) {
+ table.value(executeFunction(col, func));
+ }
+ }
+ return table;
+ }
+
+ private Double executeFunction(String col, String func) {
+ Double value = 0.0d;
+ if ("min".equalsIgnoreCase(func)) {
+ value = tableToAggregate.min(col);
+ }
+ else if ("max".equalsIgnoreCase(func)) {
+ value = tableToAggregate.max(col);
+ }
+ else if ("mean".equalsIgnoreCase(func)) {
+ value = tableToAggregate.mean(col);
+ }
+ else if ("mode".equalsIgnoreCase(func)) {
+ value = tableToAggregate.mode(col);
+ }
+ else if ("median".equalsIgnoreCase(func)) {
+ value = tableToAggregate.median(col);
+ }
+ else if ("sum".equalsIgnoreCase(func)) {
+ value = tableToAggregate.sum(col);
+ }
+ return value;
+ }
+}
diff --git
a/gateway-shell/src/test/java/org/apache/knox/gateway/shell/table/KnoxShellTableTest.java
b/gateway-shell/src/test/java/org/apache/knox/gateway/shell/table/KnoxShellTableTest.java
index 676bef6..6831e34 100644
---
a/gateway-shell/src/test/java/org/apache/knox/gateway/shell/table/KnoxShellTableTest.java
+++
b/gateway-shell/src/test/java/org/apache/knox/gateway/shell/table/KnoxShellTableTest.java
@@ -674,6 +674,36 @@ public class KnoxShellTableTest {
assertEquals(20.9998, TABLE.min(2), 0.1);
}
+ /*
+knox:000> test.aggregate() columns "A,B,C" functions "min, max, mean, median,
mode,sum"
+===> +----------+----------------------+----------+----------+
+| | A | B | C |
++----------+----------------------+----------+----------+
+| min | 100.0 | 200.0 | 300.0 |
+| max | 200.0 | 400.0 | 500.0 |
+| mean | 166.66666666666666 | 300.0 | 400.0 |
+| median | 200.0 | 300.0 | 400.0 |
+| mode | 200.0 | 200.0 | 300.0 |
+| sum | 500.0 | 900.0 | 1200.0 |
++----------+----------------------+----------+----------+
+ */
+ @Test
+ public void testAggregate() throws Exception {
+
+ KnoxShellTable TABLE = new KnoxShellTable();
+ TABLE.header("A").header("B").header("C");
+ TABLE.row().value(100).value("200").value(300);
+ TABLE.row().value(200).value("300").value(400);
+ TABLE.row().value(200).value("400").value(500);
+ KnoxShellTable report =
TABLE.aggregate().columns("A,B,C").functions("min,max,mean,median,mode,sum");
+ assertEquals(100.0, report.cell(1,0).value);
+ assertEquals(200.0, report.cell(1,1).value);
+ assertEquals(166.66666666666666, report.cell(1,2).value);
+ assertEquals(200.0, report.cell(1,3).value);
+ assertEquals(200.0, report.cell(1,4).value);
+ assertEquals(500.0, report.cell(1,5).value);
+ }
+
@Test
public void shouldReturnDifferentCallHistoryForDifferentTables() throws
Exception {
final KnoxShellTable table1 = new KnoxShellTable();