From 9481606a4fb928623c5020b1c45b7743f075f217 Mon Sep 17 00:00:00 2001 From: srilakshmikanthanp Date: Thu, 29 May 2025 11:44:41 +0530 Subject: [PATCH 1/2] Ignore [] brackets while capturing date with UNIFIED_DATE_TIMESTAMP --- .../microsoft/gctoolkit/time/DateTimeStamp.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/api/src/main/java/com/microsoft/gctoolkit/time/DateTimeStamp.java b/api/src/main/java/com/microsoft/gctoolkit/time/DateTimeStamp.java index 210a0770..3666f254 100644 --- a/api/src/main/java/com/microsoft/gctoolkit/time/DateTimeStamp.java +++ b/api/src/main/java/com/microsoft/gctoolkit/time/DateTimeStamp.java @@ -65,7 +65,7 @@ private static double ageFromString(String doubleFormat) { private static final String TIME = INTEGER + DECIMAL_POINT + "\\d{3}"; // Unified Tokens - private static final String DATE_TAG = "\\[" + DATE + "]"; + private static final String DATE_TAG = "\\[(" + DATE + ")]"; private static final String UPTIME_TAG = "\\[(" + TIME + ")s]"; // Pre-unified tokens @@ -81,15 +81,20 @@ private static double ageFromString(String doubleFormat) { public static DateTimeStamp fromGCLogLine(String line) { Matcher matcher; - int captureGroup = 2; + int dateCaptureGroup; + int ageCaptureGroup; if ( line.startsWith("[")) { matcher = UNIFIED_DATE_TIMESTAMP.matcher(line); - captureGroup = 3; - } else + dateCaptureGroup = 2; + ageCaptureGroup = 4; + } else { matcher = PREUNIFIED_DATE_TIMESTAMP.matcher(line); + dateCaptureGroup = 1; + ageCaptureGroup = 2; + } if ( matcher.find()) - return new DateTimeStamp(dateFromString(matcher.group(1)), ageFromString(matcher.group(captureGroup))); + return new DateTimeStamp(dateFromString(matcher.group(dateCaptureGroup)), ageFromString(matcher.group(ageCaptureGroup))); else return EMPTY_DATE; } From c3300b545db71c4cd2e545599192428bc914e513 Mon Sep 17 00:00:00 2001 From: srilakshmikanthanp Date: Thu, 12 Jun 2025 19:37:38 +0530 Subject: [PATCH 2/2] Add test case for parsing GC log line with brackets --- .../com/microsoft/gctoolkit/time/DateTimeStampTest.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/api/src/test/java/com/microsoft/gctoolkit/time/DateTimeStampTest.java b/api/src/test/java/com/microsoft/gctoolkit/time/DateTimeStampTest.java index 7aedde5e..ebf0b56e 100644 --- a/api/src/test/java/com/microsoft/gctoolkit/time/DateTimeStampTest.java +++ b/api/src/test/java/com/microsoft/gctoolkit/time/DateTimeStampTest.java @@ -483,4 +483,12 @@ void malformedDateTimeStampThrowsException() { assertThrows(IllegalStateException.class, () -> onlyDate.after(onlyTime)); } + @Test + void shouldParseGCLogLineWithBrackets() { + final String dateTimeString = "2025-05-08T11:07:55.681+0530"; + final String gcLogLine = "[" + dateTimeString + "][gc,phases ] GC(4) Other: 0.2ms"; + final DateTimeStamp dateTimeStamp = DateTimeStamp.fromGCLogLine(gcLogLine); + final ZonedDateTime expected = ZonedDateTime.from(formatter.parse(dateTimeString)); + assertTrue(expected.isEqual(dateTimeStamp.getDateTime())); + } } \ No newline at end of file