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 ")));