diff --git a/common/src/main/java/org/opensearch/sql/common/patterns/BrainLogParser.java b/common/src/main/java/org/opensearch/sql/common/patterns/BrainLogParser.java index 6145e005b7d..d26a9b083df 100644 --- a/common/src/main/java/org/opensearch/sql/common/patterns/BrainLogParser.java +++ b/common/src/main/java/org/opensearch/sql/common/patterns/BrainLogParser.java @@ -39,6 +39,11 @@ public class BrainLogParser { "(\\d{4}-\\d{2}-\\d{2})[T" + " ]?(\\d{2}:\\d{2}:\\d{2})(\\.\\d{3})?(Z|([+-]\\d{2}:?\\d{2}))?"), "<*DATETIME*>"); + // UUID + DEFAULT_FILTER_PATTERN_VARIABLE_MAP.put( + Pattern.compile( + "\\b[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}\\b"), + "<*UUID*>"); // Hex Decimal, letters followed by digits, float numbers DEFAULT_FILTER_PATTERN_VARIABLE_MAP.put( Pattern.compile( diff --git a/common/src/test/java/org/opensearch/sql/common/patterns/BrainLogParserTest.java b/common/src/test/java/org/opensearch/sql/common/patterns/BrainLogParserTest.java index 77251cdbc64..055e42f5298 100644 --- a/common/src/test/java/org/opensearch/sql/common/patterns/BrainLogParserTest.java +++ b/common/src/test/java/org/opensearch/sql/common/patterns/BrainLogParserTest.java @@ -104,6 +104,22 @@ public void testPreprocess() { assertEquals(expectedResult, result); } + @Test + public void testPreprocessWithUUID() { + String logMessage = "127.0.0.1 - 1234 something, user_id:c78ac970-f0c3-4954-8cf8-352a8458d01c"; + String logId = "log1"; + List expectedResult = + Arrays.asList("<*IP*>", "-", "<*>", "something", "user_id:<*UUID*>", "log1"); + List result = parser.preprocess(logMessage, logId); + assertEquals(expectedResult, result); + // Test with different delimiter + logMessage = "127.0.0.1=1234 something, user_id:c78ac970-f0c3-4954-8cf8-352a8458d01c"; + logId = "log2"; + expectedResult = Arrays.asList("<*IP*>=<*>", "something", "user_id:<*UUID*>", "log2"); + result = parser.preprocess(logMessage, logId); + assertEquals(expectedResult, result); + } + @Test public void testPreprocessWithIllegalInput() { String logMessage = "127.0.0.1 - 1234 something"; diff --git a/integ-test/src/test/java/org/opensearch/sql/calcite/remote/CalcitePPLPatternsIT.java b/integ-test/src/test/java/org/opensearch/sql/calcite/remote/CalcitePPLPatternsIT.java index ad8b824cbbe..dcb2684d537 100644 --- a/integ-test/src/test/java/org/opensearch/sql/calcite/remote/CalcitePPLPatternsIT.java +++ b/integ-test/src/test/java/org/opensearch/sql/calcite/remote/CalcitePPLPatternsIT.java @@ -281,4 +281,21 @@ public void testBrainAggregationModeWithGroupByClause() throws IOException { ImmutableMap.of( "", ImmutableList.of("6996194389878584395", "-1547954353065580372")))); } + + @Test + public void testBrainParseWithUUID() throws IOException { + JSONObject result = + executeQuery( + String.format( + "source=%s | eval body = '[PlaceOrder] user_id=d664d7be-77d8-11f0-8880-0242f00b101d" + + " user_currency=USD' | head 1 | patterns body method=BRAIN mode=label |" + + " fields patterns_field, tokens", + Index.WEBLOG.getName())); + verifySchema(result, schema("patterns_field", "string"), schema("tokens", "struct")); + verifyDataRows( + result, + rows( + "[PlaceOrder] user_id= user_currency=USD", + ImmutableMap.of("", ImmutableList.of("d664d7be-77d8-11f0-8880-0242f00b101d")))); + } }