You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@metron.apache.org by ce...@apache.org on 2016/10/11 14:52:11 UTC
incubator-metron git commit: METRON-473 Add LENGTH() To Stellar
closes apache/incubator-metron#293
Repository: incubator-metron
Updated Branches:
refs/heads/master b38e017f8 -> 6277d28c8
METRON-473 Add LENGTH() To Stellar closes apache/incubator-metron#293
Project: http://git-wip-us.apache.org/repos/asf/incubator-metron/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-metron/commit/6277d28c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-metron/tree/6277d28c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-metron/diff/6277d28c
Branch: refs/heads/master
Commit: 6277d28c852e5ef7eeeb42d7cc3db4d69ebe59b6
Parents: b38e017
Author: Otto Fowler <of...@industrialdefender.com>
Authored: Tue Oct 11 10:51:55 2016 -0400
Committer: cstella <ce...@gmail.com>
Committed: Tue Oct 11 10:51:55 2016 -0400
----------------------------------------------------------------------
metron-platform/metron-common/README.md | 7 +++-
.../dsl/functions/DataStructureFunctions.java | 25 ++++++++++++++
.../metron/common/stellar/StellarTest.java | 35 ++++++++++++++++++--
3 files changed, 64 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-metron/blob/6277d28c/metron-platform/metron-common/README.md
----------------------------------------------------------------------
diff --git a/metron-platform/metron-common/README.md b/metron-platform/metron-common/README.md
index 339ea5c..c4099ed 100644
--- a/metron-platform/metron-common/README.md
+++ b/metron-platform/metron-common/README.md
@@ -355,6 +355,11 @@ The following functions are supported:
* Input:
* input - String
* Returns: String
+* `LENGTH`
+ * Description: Returns the length of a string or the size of a collection.
+ * Input:
+ * input - Object of string or collection type (e.g. list)"
+ * Returns: Integer
* `URL_TO_HOST`
* Description: Extract the hostname from a URL.
* Input:
@@ -515,7 +520,7 @@ This command lists all functions resolvable in the Stellar environment. Stellar
BLOOM_ADD, BLOOM_EXISTS, BLOOM_INIT, BLOOM_MERGE, DAY_OF_MONTH, DAY_OF_WEEK, DAY_OF_YEAR,
DOMAIN_REMOVE_SUBDOMAINS, DOMAIN_REMOVE_TLD, DOMAIN_TO_TLD, ENDS_WITH, GET, GET_FIRST,
GET_LAST, IN_SUBNET, IS_DATE, IS_DOMAIN, IS_EMAIL, IS_EMPTY, IS_INTEGER, IS_IP, IS_URL,
-JOIN, MAAS_GET_ENDPOINT, MAAS_MODEL_APPLY, MAP_EXISTS, MAP_GET, MONTH, PROTOCOL_TO_NAME,
+JOIN, LENGTH, MAAS_GET_ENDPOINT, MAAS_MODEL_APPLY, MAP_EXISTS, MAP_GET, MONTH, PROTOCOL_TO_NAME,
REGEXP_MATCH, SPLIT, STARTS_WITH, STATS_ADD, STATS_COUNT, STATS_GEOMETRIC_MEAN, STATS_INIT,
STATS_KURTOSIS, STATS_MAX, STATS_MEAN, STATS_MERGE, STATS_MIN, STATS_PERCENTILE,
STATS_POPULATION_VARIANCE, STATS_QUADRATIC_MEAN, STATS_SD, STATS_SKEWNESS, STATS_SUM,
http://git-wip-us.apache.org/repos/asf/incubator-metron/blob/6277d28c/metron-platform/metron-common/src/main/java/org/apache/metron/common/dsl/functions/DataStructureFunctions.java
----------------------------------------------------------------------
diff --git a/metron-platform/metron-common/src/main/java/org/apache/metron/common/dsl/functions/DataStructureFunctions.java b/metron-platform/metron-common/src/main/java/org/apache/metron/common/dsl/functions/DataStructureFunctions.java
index 8f1caf2..be373f5 100644
--- a/metron-platform/metron-common/src/main/java/org/apache/metron/common/dsl/functions/DataStructureFunctions.java
+++ b/metron-platform/metron-common/src/main/java/org/apache/metron/common/dsl/functions/DataStructureFunctions.java
@@ -162,4 +162,29 @@ public class DataStructureFunctions {
}
}
}
+
+ @Stellar(name="LENGTH"
+ , description="Returns the length of a string or size of a collection. Returns 0 for empty or null Strings"
+ , params = { "input - Object of string or collection type (e.g. list)"}
+ , returns = "Integer"
+ )
+ public static class Length extends BaseStellarFunction {
+ @Override
+ public Object apply(List<Object> list) {
+ if(list.size() == 0) {
+ return 0;
+ }
+ Object o = list.get(0);
+ if(o instanceof Collection) {
+ return ((Collection)o).size();
+ }
+ else if(o instanceof String) {
+ String val = (String) list.get(0);
+ return val == null || val.isEmpty() ? 0 : val.length();
+ }
+ else {
+ return 0;
+ }
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-metron/blob/6277d28c/metron-platform/metron-common/src/test/java/org/apache/metron/common/stellar/StellarTest.java
----------------------------------------------------------------------
diff --git a/metron-platform/metron-common/src/test/java/org/apache/metron/common/stellar/StellarTest.java b/metron-platform/metron-common/src/test/java/org/apache/metron/common/stellar/StellarTest.java
index dc04600..81bb4ce 100644
--- a/metron-platform/metron-common/src/test/java/org/apache/metron/common/stellar/StellarTest.java
+++ b/metron-platform/metron-common/src/test/java/org/apache/metron/common/stellar/StellarTest.java
@@ -21,6 +21,7 @@ package org.apache.metron.common.stellar;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.ImmutableSortedMap;
import org.apache.commons.lang3.StringUtils;
import org.apache.metron.common.dsl.*;
import org.apache.metron.common.utils.SerDeUtils;
@@ -29,6 +30,9 @@ import org.junit.Test;
import org.reflections.Reflections;
import org.reflections.util.ConfigurationBuilder;
+import java.util.Arrays;
+import java.util.ArrayList;
+import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
@@ -276,8 +280,6 @@ public class StellarTest {
Assert.assertEquals(7, (Double)run(query, ImmutableMap.of("one", 1, "very_nearly_one", 1.000001)), 1e-6);
}
}
-
-
@Test
public void testHappyPath() {
String query = "TO_UPPER(TRIM(foo))";
@@ -285,6 +287,35 @@ public class StellarTest {
}
@Test
+ public void testLengthString(){
+ String query = "LENGTH(foo)";
+ Assert.assertEquals(5, run(query,ImmutableMap.of("foo","abcde")));
+ }
+ @Test
+ public void testLengthCollection(){
+ String query = "LENGTH(foo)";
+ Collection c = Arrays.asList(1,2,3,4,5);
+ Assert.assertEquals(5, run(query,ImmutableMap.of("foo",c)));
+ }
+
+ @Test
+ public void testEmptyLengthString(){
+ String query = "LENGTH(foo)";
+ Assert.assertEquals(0,run(query,ImmutableMap.of("foo","")));
+ }
+ @Test
+ public void testEmptyLengthCollection(){
+ String query = "LENGTH(foo)";
+ Collection c = new ArrayList();
+ Assert.assertEquals(0,run(query,ImmutableMap.of("foo",c)));
+ }
+ @Test
+ public void testNoVarLength(){
+ String query = "LENGTH(foo)";
+ Assert.assertEquals(0,run(query,ImmutableMap.of()));
+ }
+
+ @Test
public void testJoin() {
String query = "JOIN( [ TO_UPPER(TRIM(foo)), 'bar' ], ',')";
Assert.assertEquals("CASEY,bar", run(query, ImmutableMap.of("foo", "casey ")));