aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2018-04-23 09:39:10 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-04-23 09:40:45 -0700
commit0a0f2112852b471318aec4a331e1411dad2ffef3 (patch)
tree436159b5b9cfdca4404ec2ad65d80c7d88c5ad7e /src/main/java/com
parent87621656da2377f5b59b0ee84ecaf54ea77b7bd8 (diff)
This change adds timestamps (call start and end time) to the remote grpc log.
PiperOrigin-RevId: 193937177
Diffstat (limited to 'src/main/java/com')
-rw-r--r--src/main/java/com/google/devtools/build/lib/remote/RemoteModule.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/remote/logging/BUILD2
-rw-r--r--src/main/java/com/google/devtools/build/lib/remote/logging/LoggingInterceptor.java20
3 files changed, 21 insertions, 3 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/remote/RemoteModule.java b/src/main/java/com/google/devtools/build/lib/remote/RemoteModule.java
index 2a34533bfc..d9ab87a9f1 100644
--- a/src/main/java/com/google/devtools/build/lib/remote/RemoteModule.java
+++ b/src/main/java/com/google/devtools/build/lib/remote/RemoteModule.java
@@ -133,7 +133,7 @@ public final class RemoteModule extends BlazeModule {
LoggingInterceptor logger = null;
if (!remoteOptions.experimentalRemoteGrpcLog.isEmpty()) {
rpcLogFile = new AsynchronousFileOutputStream(remoteOptions.experimentalRemoteGrpcLog);
- logger = new LoggingInterceptor(rpcLogFile);
+ logger = new LoggingInterceptor(rpcLogFile, env.getRuntime().getClock());
}
RemoteRetrier retrier =
diff --git a/src/main/java/com/google/devtools/build/lib/remote/logging/BUILD b/src/main/java/com/google/devtools/build/lib/remote/logging/BUILD
index dc1caa6266..0a1d806595 100644
--- a/src/main/java/com/google/devtools/build/lib/remote/logging/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/remote/logging/BUILD
@@ -12,10 +12,12 @@ java_library(
tags = ["bazel"],
deps = [
"//src/main/java/com/google/devtools/build/lib:io",
+ "//src/main/java/com/google/devtools/build/lib/clock",
"//src/main/java/com/google/devtools/build/lib/remote/util",
"//src/main/protobuf:remote_execution_log_java_proto",
"//third_party:guava",
"//third_party/grpc:grpc-jar",
+ "//third_party/protobuf:protobuf_java",
"@googleapis//:google_bytestream_bytestream_java_grpc",
"@googleapis//:google_bytestream_bytestream_java_proto",
"@googleapis//:google_devtools_remoteexecution_v1test_remote_execution_java_grpc",
diff --git a/src/main/java/com/google/devtools/build/lib/remote/logging/LoggingInterceptor.java b/src/main/java/com/google/devtools/build/lib/remote/logging/LoggingInterceptor.java
index a805eae83b..bf1b393ecb 100644
--- a/src/main/java/com/google/devtools/build/lib/remote/logging/LoggingInterceptor.java
+++ b/src/main/java/com/google/devtools/build/lib/remote/logging/LoggingInterceptor.java
@@ -15,6 +15,7 @@
package com.google.devtools.build.lib.remote.logging;
import com.google.bytestream.ByteStreamGrpc;
+import com.google.devtools.build.lib.clock.Clock;
import com.google.devtools.build.lib.remote.logging.RemoteExecutionLog.LogEntry;
import com.google.devtools.build.lib.remote.util.TracingMetadataUtils;
import com.google.devtools.build.lib.util.io.AsynchronousFileOutputStream;
@@ -22,6 +23,7 @@ import com.google.devtools.remoteexecution.v1test.ActionCacheGrpc;
import com.google.devtools.remoteexecution.v1test.ContentAddressableStorageGrpc;
import com.google.devtools.remoteexecution.v1test.ExecutionGrpc;
import com.google.devtools.remoteexecution.v1test.RequestMetadata;
+import com.google.protobuf.Timestamp;
import com.google.watcher.v1.WatcherGrpc;
import io.grpc.CallOptions;
import io.grpc.Channel;
@@ -32,15 +34,18 @@ import io.grpc.ForwardingClientCallListener;
import io.grpc.Metadata;
import io.grpc.MethodDescriptor;
import io.grpc.Status;
+import java.time.Instant;
import javax.annotation.Nullable;
/** Client interceptor for logging details of certain gRPC calls. */
public class LoggingInterceptor implements ClientInterceptor {
- AsynchronousFileOutputStream rpcLogFile;
+ private final AsynchronousFileOutputStream rpcLogFile;
+ private final Clock clock;
/** Constructs a LoggingInterceptor which logs RPC calls to the given file. */
- public LoggingInterceptor(AsynchronousFileOutputStream rpcLogFile) {
+ public LoggingInterceptor(AsynchronousFileOutputStream rpcLogFile, Clock clock) {
this.rpcLogFile = rpcLogFile;
+ this.clock = clock;
}
/**
@@ -80,6 +85,15 @@ public class LoggingInterceptor implements ClientInterceptor {
}
}
+ /** Get current time as a Timestamp. */
+ private Timestamp getCurrentTimestamp() {
+ Instant time = Instant.ofEpochMilli(clock.currentTimeMillis());
+ return Timestamp.newBuilder()
+ .setSeconds(time.getEpochSecond())
+ .setNanos(time.getNano())
+ .build();
+ }
+
/**
* Wraps client call to log call details by building a {@link LogEntry} and writing it to the RPC
* log file.
@@ -100,6 +114,7 @@ public class LoggingInterceptor implements ClientInterceptor {
@Override
public void start(Listener<RespT> responseListener, Metadata headers) {
+ entryBuilder.setStartTime(getCurrentTimestamp());
RequestMetadata metadata = TracingMetadataUtils.requestMetadataFromHeaders(headers);
if (metadata != null) {
entryBuilder.setMetadata(metadata);
@@ -115,6 +130,7 @@ public class LoggingInterceptor implements ClientInterceptor {
@Override
public void onClose(Status status, Metadata trailers) {
+ entryBuilder.setEndTime(getCurrentTimestamp());
entryBuilder.setStatus(makeStatusProto(status));
entryBuilder.setDetails(handler.getDetails());
rpcLogFile.write(entryBuilder.build());