Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,20 @@ public static ListOption pageToken(String pageToken) {
*/
Future<Boolean> deleteSinkAsync(String sink);

/**
* Deletes a log and all its log entries. The log will reappear if new entries are written to it.
*
* @return {@code true} if the log was deleted, {@code false} if it was not found
*/
boolean deleteLog(String log);

/**
* Sends a request for deleting a log and all its log entries. This method returns a
* {@code Future} object to consume the result. {@link Future#get()} returns {@code true} if the
* log was deleted, {@code false} if it was not found.
*/
Future<Boolean> deleteLogAsync(String log);

/**
* Lists the monitored resource descriptors used by Google Cloud Logging. This method returns a
* {@link Page} object that can be used to consume paginated results. Use {@link ListOption} to
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
import com.google.cloud.PageImpl;
import com.google.cloud.logging.spi.LoggingRpc;
import com.google.cloud.logging.spi.v2.ConfigServiceV2Api;
import com.google.cloud.logging.spi.v2.LoggingServiceV2Api;
import com.google.cloud.logging.spi.v2.MetricsServiceV2Api;
import com.google.common.base.Function;
import com.google.common.base.Throwables;
Expand All @@ -39,6 +40,7 @@
import com.google.logging.v2.CreateLogMetricRequest;
import com.google.logging.v2.CreateSinkRequest;
import com.google.logging.v2.DeleteLogMetricRequest;
import com.google.logging.v2.DeleteLogRequest;
import com.google.logging.v2.DeleteSinkRequest;
import com.google.logging.v2.GetLogMetricRequest;
import com.google.logging.v2.GetSinkRequest;
Expand Down Expand Up @@ -249,6 +251,17 @@ public Future<Boolean> deleteSinkAsync(String sink) {
return lazyTransform(rpc.delete(request), EMPTY_TO_BOOLEAN_FUNCTION);
}

public boolean deleteLog(String log) {
return get(deleteLogAsync(log));
}

public Future<Boolean> deleteLogAsync(String log) {
DeleteLogRequest request = DeleteLogRequest.newBuilder()
.setLogName(LoggingServiceV2Api.formatLogName(options().projectId(), log))
.build();
return lazyTransform(rpc.delete(request), EMPTY_TO_BOOLEAN_FUNCTION);
}

private static ListMonitoredResourceDescriptorsRequest listMonitoredResourceDescriptorsRequest(
Map<Option.OptionType, ?> options) {
ListMonitoredResourceDescriptorsRequest.Builder builder =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
import com.google.logging.v2.CreateLogMetricRequest;
import com.google.logging.v2.CreateSinkRequest;
import com.google.logging.v2.DeleteLogMetricRequest;
import com.google.logging.v2.DeleteLogRequest;
import com.google.logging.v2.DeleteSinkRequest;
import com.google.logging.v2.GetLogMetricRequest;
import com.google.logging.v2.GetSinkRequest;
Expand Down Expand Up @@ -84,6 +85,8 @@ public class LoggingImplTest {
com.google.api.MonitoredResourceDescriptor.getDefaultInstance();
private static final MonitoredResourceDescriptor DESCRIPTOR =
MonitoredResourceDescriptor.fromPb(DESCRIPTOR_PB);
private static final String LOG_NAME = "log";
private static final String LOG_NAME_PB = "projects/" + PROJECT + "/logs/" + LOG_NAME;
private static final Function<SinkInfo, LogSink> SINK_TO_PB_FUNCTION =
new Function<SinkInfo, LogSink>() {
@Override
Expand Down Expand Up @@ -1080,4 +1083,42 @@ public void testListResourceDescriptorAsyncWithOptions()
assertArrayEquals(descriptorList.toArray(),
Iterables.toArray(page.values(), MonitoredResourceDescriptor.class));
}

@Test
public void testDeleteLog() {
DeleteLogRequest request = DeleteLogRequest.newBuilder().setLogName(LOG_NAME_PB).build();
Future<Empty> response = Futures.immediateFuture(Empty.getDefaultInstance());
EasyMock.expect(loggingRpcMock.delete(request)).andReturn(response);
EasyMock.replay(rpcFactoryMock, loggingRpcMock);
logging = options.service();
assertTrue(logging.deleteLog(LOG_NAME));
}

@Test
public void testDeleteLog_Null() {
DeleteLogRequest request = DeleteLogRequest.newBuilder().setLogName(LOG_NAME_PB).build();
EasyMock.expect(loggingRpcMock.delete(request)).andReturn(Futures.<Empty>immediateFuture(null));
EasyMock.replay(rpcFactoryMock, loggingRpcMock);
logging = options.service();
assertFalse(logging.deleteLog(LOG_NAME));
}

@Test
public void testDeleteLogAync() throws ExecutionException, InterruptedException {
DeleteLogRequest request = DeleteLogRequest.newBuilder().setLogName(LOG_NAME_PB).build();
Future<Empty> response = Futures.immediateFuture(Empty.getDefaultInstance());
EasyMock.expect(loggingRpcMock.delete(request)).andReturn(response);
EasyMock.replay(rpcFactoryMock, loggingRpcMock);
logging = options.service();
assertTrue(logging.deleteLogAsync(LOG_NAME).get());
}

@Test
public void testDeleteLogAsync_Null() throws ExecutionException, InterruptedException {
DeleteLogRequest request = DeleteLogRequest.newBuilder().setLogName(LOG_NAME_PB).build();
EasyMock.expect(loggingRpcMock.delete(request)).andReturn(Futures.<Empty>immediateFuture(null));
EasyMock.replay(rpcFactoryMock, loggingRpcMock);
logging = options.service();
assertFalse(logging.deleteLogAsync(LOG_NAME).get());
}
}