This is an automated email from the ASF dual-hosted git repository. heneveld pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/brooklyn-server.git
commit e43fe3fe580eec28d94226218dc6787cd01fa541 Author: Mykola Mandra <[email protected]> AuthorDate: Mon Jul 19 10:03:25 2021 +0100 Calculate UTC timestamp in file logstore Signed-off-by: Mykola Mandra <[email protected]> --- .../util/core/logbook/file/FileLogStore.java | 33 +++++++++++++--------- .../util/core/logbook/file/FileLogStoreTest.java | 18 ++++++------ 2 files changed, 29 insertions(+), 22 deletions(-) diff --git a/core/src/main/java/org/apache/brooklyn/util/core/logbook/file/FileLogStore.java b/core/src/main/java/org/apache/brooklyn/util/core/logbook/file/FileLogStore.java index 6a8b6c3..e25428c 100644 --- a/core/src/main/java/org/apache/brooklyn/util/core/logbook/file/FileLogStore.java +++ b/core/src/main/java/org/apache/brooklyn/util/core/logbook/file/FileLogStore.java @@ -36,9 +36,9 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.Calendar; -import java.util.Date; -import java.util.List; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.*; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Predicate; import java.util.regex.Matcher; @@ -70,23 +70,28 @@ public class FileLogStore implements LogStore { public final static ConfigKey<String> LOGBOOK_LOG_STORE_DATEFORMAT = ConfigKeys.newStringConfigKey( BASE_NAME_FILE_LOG_STORE + ".dateFormat", "Date format", "yyyy-MM-dd'T'HH:mm:ss,SSS"); + public final static TimeZone UTC_TIMEZONE = TimeZone.getTimeZone("UTC"); + private final String filePath; private final Path path; private final String logLinePattern; - private final String logDateFormat; + private final DateFormat dateFormat; + @VisibleForTesting public FileLogStore() { this.path = null; this.filePath = ""; this.logLinePattern = LOGBOOK_LOG_STORE_REGEX.getDefaultValue(); - this.logDateFormat = LOGBOOK_LOG_STORE_DATEFORMAT.getDefaultValue(); + dateFormat = new SimpleDateFormat(LOGBOOK_LOG_STORE_DATEFORMAT.getDefaultValue()); + dateFormat.setTimeZone(UTC_TIMEZONE); } public FileLogStore(ManagementContext mgmt) { this.filePath = mgmt.getConfig().getConfig(LOGBOOK_LOG_STORE_PATH); this.logLinePattern = mgmt.getConfig().getConfig(LOGBOOK_LOG_STORE_REGEX); - this.logDateFormat = mgmt.getConfig().getConfig(LOGBOOK_LOG_STORE_DATEFORMAT); + dateFormat = new SimpleDateFormat(mgmt.getConfig().getConfig(LOGBOOK_LOG_STORE_DATEFORMAT)); + dateFormat.setTimeZone(UTC_TIMEZONE); Preconditions.checkNotNull(filePath, "Log file path must be set: " + LOGBOOK_LOG_STORE_PATH.getName()); this.path = Paths.get(this.filePath); } @@ -97,6 +102,10 @@ public class FileLogStore implements LogStore { // TODO: the read of the file needs to be improved, specially to implement reading the file backwards and // do a correct multiline log reading try (Stream<String> stream = Files.lines(path)) { + + Date dateTimeFrom = Strings.isNonBlank(params.getDateTimeFrom()) ? Time.parseDate(params.getDateTimeFrom()) : null; + Date dateTimeTo = Strings.isNonBlank(params.getDateTimeTo()) ? Time.parseDate(params.getDateTimeTo()) : null; + Predicate<BrooklynLogEntry> filter = brooklynLogEntry -> { // Excludes unrecognized items or items without a date, typically they are multiline log messages. @@ -121,15 +130,13 @@ public class FileLogStore implements LogStore { if (brooklynLogEntry.getDatetime() != null) { // Date-time from. - if (Strings.isNonBlank(params.getDateTimeFrom())) { - Date initDate = Time.parseDate(params.getDateTimeFrom()); - isDateTimeFromMatch = brooklynLogEntry.getDatetime().compareTo(initDate) >= 0; + if (!Objects.isNull(dateTimeFrom)) { + isDateTimeFromMatch = brooklynLogEntry.getDatetime().compareTo(dateTimeFrom) >= 0; } // Date-time to. - if (Strings.isNonBlank(params.getDateTimeTo())) { - Date finalDate = Time.parseDate(params.getDateTimeTo()); - isDateTimeToMatch = brooklynLogEntry.getDatetime().compareTo(finalDate) <= 0; + if (!Objects.isNull(dateTimeTo)) { + isDateTimeToMatch = brooklynLogEntry.getDatetime().compareTo(dateTimeTo) <= 0; } } @@ -178,7 +185,7 @@ public class FileLogStore implements LogStore { if (m.matches()) { entry = new BrooklynLogEntry(); entry.setTimestampString(m.group("timestamp")); - Maybe<Calendar> calendarMaybe = Time.parseCalendarFormat(entry.getTimestampString(), logDateFormat); + Maybe<Calendar> calendarMaybe = Time.parseCalendarFormat(entry.getTimestampString(), dateFormat); if (calendarMaybe.isPresentAndNonNull()) { entry.setDatetime(calendarMaybe.get().getTime()); } diff --git a/core/src/test/java/org/apache/brooklyn/util/core/logbook/file/FileLogStoreTest.java b/core/src/test/java/org/apache/brooklyn/util/core/logbook/file/FileLogStoreTest.java index de9d962..21131d6 100644 --- a/core/src/test/java/org/apache/brooklyn/util/core/logbook/file/FileLogStoreTest.java +++ b/core/src/test/java/org/apache/brooklyn/util/core/logbook/file/FileLogStoreTest.java @@ -53,7 +53,7 @@ public class FileLogStoreTest extends TestCase { @BeforeTest public void setUp() { - TimeZone.setDefault(TimeZone.getTimeZone("GMT")); + TimeZone.setDefault(TimeZone.getTimeZone("UTC")); } @BeforeMethod @@ -68,7 +68,7 @@ public class FileLogStoreTest extends TestCase { assertNull(brooklynLogEntry.getTaskId()); assertNull(brooklynLogEntry.getEntityIds()); assertEquals("2021-05-27T11:36:59,251", brooklynLogEntry.getTimestampString()); - assertEquals("Thu May 27 11:36:59 GMT 2021", brooklynLogEntry.getDatetime().toString()); + assertEquals("Thu May 27 11:36:59 UTC 2021", brooklynLogEntry.getDatetime().toString()); assertEquals("DEBUG", brooklynLogEntry.getLevel()); assertEquals("146", brooklynLogEntry.getBundleId()); assertEquals("o.a.b.c.m.i.LocalManagementContext", brooklynLogEntry.getClazz()); @@ -84,7 +84,7 @@ public class FileLogStoreTest extends TestCase { assertNull(brooklynLogEntry.getTaskId()); assertNull(brooklynLogEntry.getEntityIds()); assertEquals("2021-06-07T14:58:58,487", brooklynLogEntry.getTimestampString()); - assertEquals("Mon Jun 07 14:58:58 GMT 2021", brooklynLogEntry.getDatetime().toString()); + assertEquals("Mon Jun 07 14:58:58 UTC 2021", brooklynLogEntry.getDatetime().toString()); assertEquals("INFO", brooklynLogEntry.getLevel()); assertEquals("6", brooklynLogEntry.getBundleId()); assertEquals("o.o.p.l.s.s.EventAdminConfigurationNotifier", brooklynLogEntry.getClazz()); @@ -98,7 +98,7 @@ public class FileLogStoreTest extends TestCase { FileLogStore cut = new FileLogStore(); BrooklynLogEntry brooklynLogEntry = cut.parseLogLine(TASK_LOG_LINE, lineCount); assertEquals("2021-05-27T11:36:59,258", brooklynLogEntry.getTimestampString()); - assertEquals("Thu May 27 11:36:59 GMT 2021", brooklynLogEntry.getDatetime().toString()); + assertEquals("Thu May 27 11:36:59 UTC 2021", brooklynLogEntry.getDatetime().toString()); assertEquals("OGObOWJs", brooklynLogEntry.getTaskId()); assertEquals("[gwpndj09r8]", brooklynLogEntry.getEntityIds()); assertEquals("DEBUG", brooklynLogEntry.getLevel()); @@ -116,7 +116,7 @@ public class FileLogStoreTest extends TestCase { assertNull(brooklynLogEntry.getTaskId()); assertNull(brooklynLogEntry.getEntityIds()); assertEquals("2021-07-05T12:38:09,351", brooklynLogEntry.getTimestampString()); - assertEquals("Mon Jul 05 12:38:09 GMT 2021", brooklynLogEntry.getDatetime().toString()); + assertEquals("Mon Jul 05 12:38:09 UTC 2021", brooklynLogEntry.getDatetime().toString()); assertEquals("ERROR", brooklynLogEntry.getLevel()); assertEquals("293", brooklynLogEntry.getBundleId()); assertEquals("o.a.b.u.m.ExternalUiModule", brooklynLogEntry.getClazz()); @@ -171,7 +171,7 @@ public class FileLogStoreTest extends TestCase { assertNull(firstBrooklynLogEntry.getTaskId()); assertNull(firstBrooklynLogEntry.getEntityIds()); assertEquals("2021-05-27T11:36:59,251", firstBrooklynLogEntry.getTimestampString()); - assertEquals("Thu May 27 11:36:59 GMT 2021",firstBrooklynLogEntry.getDatetime().toString()); + assertEquals("Thu May 27 11:36:59 UTC 2021",firstBrooklynLogEntry.getDatetime().toString()); assertEquals("DEBUG", firstBrooklynLogEntry.getLevel()); assertEquals("146", firstBrooklynLogEntry.getBundleId()); assertEquals("o.a.b.c.m.i.LocalManagementContext", firstBrooklynLogEntry.getClazz()); @@ -184,7 +184,7 @@ public class FileLogStoreTest extends TestCase { assertNull(secondBrooklynLogEntry.getTaskId()); assertNull(secondBrooklynLogEntry.getEntityIds()); assertEquals("2021-07-05T12:38:09,351", secondBrooklynLogEntry.getTimestampString()); - assertEquals("Mon Jul 05 12:38:09 GMT 2021", secondBrooklynLogEntry.getDatetime().toString()); + assertEquals("Mon Jul 05 12:38:09 UTC 2021", secondBrooklynLogEntry.getDatetime().toString()); assertEquals("ERROR", secondBrooklynLogEntry.getLevel()); assertEquals("293", secondBrooklynLogEntry.getBundleId()); assertEquals("o.a.b.u.m.ExternalUiModule", secondBrooklynLogEntry.getClazz()); @@ -289,8 +289,8 @@ public class FileLogStoreTest extends TestCase { logBookQueryParams.setNumberOfItems(1000); // Request all. logBookQueryParams.setTail(false); logBookQueryParams.setLevels(ImmutableList.of()); - logBookQueryParams.setDateTimeFrom("Mon Jul 05 12:38:10 GMT 2021"); // Date of the first INFO log line. - logBookQueryParams.setDateTimeTo("Mon Jul 05 12:38:12 GMT 2021"); // Date of the second INFO log line. + logBookQueryParams.setDateTimeFrom("Mon Jul 05 12:38:10 UTC 2021"); // Date of the first INFO log line. + logBookQueryParams.setDateTimeTo("Mon Jul 05 12:38:12 UTC 2021"); // Date of the second INFO log line. FileLogStore fileLogStore = new FileLogStore(mgmt); List<BrooklynLogEntry> brooklynLogEntries = fileLogStore.query(logBookQueryParams); assertEquals(2, brooklynLogEntries.size());
