From 552997cdc7d8baff0ae6acf00cc278bea7645c38 Mon Sep 17 00:00:00 2001 From: simonz130 Date: Wed, 28 Oct 2020 23:30:27 -0700 Subject: [PATCH] fix: make ListLogEntries use 24hr filter --- .../com/google/cloud/logging/LoggingImpl.java | 27 +++++++ .../google/cloud/logging/LoggingImplTest.java | 70 ++++++++++++++----- 2 files changed, 81 insertions(+), 16 deletions(-) diff --git a/google-cloud-logging/src/main/java/com/google/cloud/logging/LoggingImpl.java b/google-cloud-logging/src/main/java/com/google/cloud/logging/LoggingImpl.java index 21d60fb27..0b8e18a31 100644 --- a/google-cloud-logging/src/main/java/com/google/cloud/logging/LoggingImpl.java +++ b/google-cloud-logging/src/main/java/com/google/cloud/logging/LoggingImpl.java @@ -36,6 +36,7 @@ import com.google.cloud.MonitoredResource; import com.google.cloud.MonitoredResourceDescriptor; import com.google.cloud.PageImpl; +import com.google.cloud.logging.Logging.EntryListOption.OptionType; import com.google.cloud.logging.spi.v2.LoggingRpc; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Function; @@ -48,7 +49,12 @@ import com.google.common.util.concurrent.Uninterruptibles; import com.google.logging.v2.*; import com.google.protobuf.Empty; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -631,6 +637,11 @@ static ListLogEntriesRequest listLogEntriesRequest( if (filter != null) { builder.setFilter(filter); } + else { + // If filter is not specified, default filter is looking back 24 hours in line with gcloud behavior + builder.setFilter(createDefaultTimeRangeFilter()); + } + return builder.build(); } @@ -692,4 +703,20 @@ public void close() throws Exception { int getNumPendingWrites() { return pendingWrites.size(); } + + private static String createDefaultTimeRangeFilter() { + DateFormat rfcDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); + return "timestamp>=\"" + rfcDateFormat.format(yesterday()) + "\""; + } + + private static Date yesterday() { + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.DATE, -1); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); + + return calendar.getTime(); + } } diff --git a/google-cloud-logging/src/test/java/com/google/cloud/logging/LoggingImplTest.java b/google-cloud-logging/src/test/java/com/google/cloud/logging/LoggingImplTest.java index d34f54fd1..a9d34762e 100644 --- a/google-cloud-logging/src/test/java/com/google/cloud/logging/LoggingImplTest.java +++ b/google-cloud-logging/src/test/java/com/google/cloud/logging/LoggingImplTest.java @@ -68,6 +68,11 @@ import com.google.logging.v2.WriteLogEntriesRequest; import com.google.logging.v2.WriteLogEntriesResponse; import com.google.protobuf.Empty; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; import java.util.List; import java.util.Map; import java.util.concurrent.ExecutionException; @@ -1291,8 +1296,11 @@ public void testListLogEntries() { String cursor = "cursor"; EasyMock.replay(rpcFactoryMock); logging = options.getService(); - ListLogEntriesRequest request = - ListLogEntriesRequest.newBuilder().addResourceNames(PROJECT_PB).build(); + ListLogEntriesRequest request = ListLogEntriesRequest.newBuilder() + .addResourceNames(PROJECT_PB) + .setFilter(createDefaultTimeRangeFilter()) + .build(); + List entriesList = ImmutableList.of(LOG_ENTRY1, LOG_ENTRY2); ListLogEntriesResponse response = ListLogEntriesResponse.newBuilder() @@ -1312,12 +1320,16 @@ public void testListLogEntriesNextPage() throws ExecutionException, InterruptedE String cursor1 = "cursor"; EasyMock.replay(rpcFactoryMock); logging = options.getService(); - ListLogEntriesRequest request1 = - ListLogEntriesRequest.newBuilder().addResourceNames(PROJECT_PB).build(); + ListLogEntriesRequest request1 = ListLogEntriesRequest + .newBuilder() + .addResourceNames(PROJECT_PB) + .setFilter(createDefaultTimeRangeFilter()) + .build(); ListLogEntriesRequest request2 = ListLogEntriesRequest.newBuilder() .addResourceNames(PROJECT_PB) .setPageToken(cursor1) + .setFilter(createDefaultTimeRangeFilter()) .build(); List descriptorList1 = ImmutableList.of(LOG_ENTRY1, LOG_ENTRY2); List descriptorList2 = ImmutableList.of(LOG_ENTRY1); @@ -1353,7 +1365,10 @@ public void testListLogEntriesEmpty() { EasyMock.replay(rpcFactoryMock); logging = options.getService(); ListLogEntriesRequest request = - ListLogEntriesRequest.newBuilder().addResourceNames(PROJECT_PB).build(); + ListLogEntriesRequest.newBuilder() + .addResourceNames(PROJECT_PB) + .setFilter(createDefaultTimeRangeFilter()).build(); + List entriesList = ImmutableList.of(); ListLogEntriesResponse response = ListLogEntriesResponse.newBuilder() @@ -1401,8 +1416,9 @@ public void testListLogEntriesAsync() throws ExecutionException, InterruptedExce String cursor = "cursor"; EasyMock.replay(rpcFactoryMock); logging = options.getService(); - ListLogEntriesRequest request = - ListLogEntriesRequest.newBuilder().addResourceNames(PROJECT_PB).build(); + ListLogEntriesRequest request = ListLogEntriesRequest.newBuilder() + .addResourceNames(PROJECT_PB) + .setFilter(createDefaultTimeRangeFilter()).build(); List entriesList = ImmutableList.of(LOG_ENTRY1, LOG_ENTRY2); ListLogEntriesResponse response = ListLogEntriesResponse.newBuilder() @@ -1422,13 +1438,17 @@ public void testListLogEntriesAsyncNextPage() { String cursor1 = "cursor"; EasyMock.replay(rpcFactoryMock); logging = options.getService(); - ListLogEntriesRequest request1 = - ListLogEntriesRequest.newBuilder().addResourceNames(PROJECT_PB).build(); - ListLogEntriesRequest request2 = - ListLogEntriesRequest.newBuilder() - .addResourceNames(PROJECT_PB) - .setPageToken(cursor1) - .build(); + ListLogEntriesRequest request1 = ListLogEntriesRequest + .newBuilder() + .addResourceNames(PROJECT_PB) + .setFilter(createDefaultTimeRangeFilter()) + .build(); + ListLogEntriesRequest request2 = ListLogEntriesRequest + .newBuilder() + .addResourceNames(PROJECT_PB) + .setFilter(createDefaultTimeRangeFilter()) + .setPageToken(cursor1) + .build(); List descriptorList1 = ImmutableList.of(LOG_ENTRY1, LOG_ENTRY2); List descriptorList2 = ImmutableList.of(LOG_ENTRY1); ListLogEntriesResponse response1 = @@ -1458,12 +1478,14 @@ public void testListLogEntriesAsyncNextPage() { } @Test - public void testListLogEntriesAyncEmpty() throws ExecutionException, InterruptedException { + public void testListLogEntriesAsyncEmpty() throws ExecutionException, InterruptedException { String cursor = "cursor"; EasyMock.replay(rpcFactoryMock); logging = options.getService(); ListLogEntriesRequest request = - ListLogEntriesRequest.newBuilder().addResourceNames(PROJECT_PB).build(); + ListLogEntriesRequest.newBuilder() + .addResourceNames(PROJECT_PB) + .setFilter(createDefaultTimeRangeFilter()).build(); List entriesList = ImmutableList.of(); ListLogEntriesResponse response = ListLogEntriesResponse.newBuilder() @@ -1584,4 +1606,20 @@ public void run() { } assertSame(0, exceptions.get()); } + + private static String createDefaultTimeRangeFilter() { + DateFormat rfcDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); + return "timestamp>=\"" + rfcDateFormat.format(yesterday()) + "\""; + } + + private static Date yesterday() { + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.DATE, -1); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); + + return calendar.getTime(); + } }